{"id":19461050,"url":"https://github.com/jtopjian/bagel","last_synced_at":"2026-05-16T18:38:08.351Z","repository":{"id":145813385,"uuid":"160732708","full_name":"jtopjian/bagel","owner":"jtopjian","description":"A configuration management system written in Go and Lua","archived":false,"fork":false,"pushed_at":"2018-12-06T21:49:49.000Z","size":40,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-07-22T18:40:34.194Z","etag":null,"topics":["configuration-management","go","lua"],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jtopjian.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-12-06T21:12:58.000Z","updated_at":"2018-12-09T19:21:05.000Z","dependencies_parsed_at":null,"dependency_job_id":"d179391c-0ce8-46f0-934f-5ec9ccaf8e7a","html_url":"https://github.com/jtopjian/bagel","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/jtopjian/bagel","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jtopjian%2Fbagel","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jtopjian%2Fbagel/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jtopjian%2Fbagel/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jtopjian%2Fbagel/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jtopjian","download_url":"https://codeload.github.com/jtopjian/bagel/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jtopjian%2Fbagel/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33114687,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-16T04:41:52.686Z","status":"ssl_error","status_checked_at":"2026-05-16T04:41:52.009Z","response_time":115,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["configuration-management","go","lua"],"created_at":"2024-11-10T17:39:26.204Z","updated_at":"2026-05-16T18:38:08.336Z","avatar_url":"https://github.com/jtopjian.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"**NOTE:** Until there's an actual binary release made in [releases](/releases), consider this\na proof of concept and not guaranteed to work at all.\n\nBagel\n=====\n\nYet another configuration management tool I dreamed up.\n\nBagel builds off of previous projects such as [Waffles](https://github.com/wffls/waffles)\nand [Yak](https://github.com/jtopjian/yak). It supports:\n\n* The ability to write configuration management manifests in Lua. This means\n  you can use `if` conditionals and `for` loops natively.\n\n* Being able to work with remote communication protocols other than SSH. This\n  means Bagel can (and probably will) support protocols such as LXD, Docker, etc.\n  This can extend beyond simply remotely executing a command: when available,\n  Bagel can take advantage of remote file API rather than just echo'ing or\n  cat'ing content to a file.\n\n* Is written in Go and distributed as a single Go binary for ease of use.\n  A plugin system might be available in the future since it might be quite\n  useful.\n\nQuickstart\n----------\n\n1. Download Bagel.\n2. Create a directory:\n\n  ```bash\n  $ mkdir /opt/bagel\n  $ cd /opt/bagel\n  ```\n\n3. Add some hsots to a file:\n\n  ```bash\n  $ echo example1.com \u003e\u003e hosts.txt\n  $ echo example2.com \u003e\u003e hosts.txt\n  ```\n\n4. Create a `site.yaml` file::\n\n  ```yaml\n  roles:\n    hello:\n      inventories:\n        - my_hosts\n\n  inventories:\n    my_hosts:\n      type: textfile\n      options:\n        file: /opt/bagel/hosts.txt\n      connection: ssh\n\n  connections:\n    ssh:\n      type: ssh\n  ```\n\n5. Create a \"hello\" role in `/opt/bagel/roles/hello.lua`:\n\n  ```lua\n  log.Info(\"Hello, World!\")\n\n  change, err = apt.Package({\n      name = \"sl\",\n  })\n\n  util.StopIfErr(\"Unable to install sl\", err)\n  ```\n\n6. Run Bagel:\n\n  ```shell\n  $ bagel deploy\n  ```\nDocumentation\n-------------\n\nSee the [docs](/docs) directory.\n\nYou can also check out the [acceptance tests](/acctests) for examples.\n\nWhy??\n-----\n\nSame as always: to scratch an itch and create something that didn't exist before.\n\nBuilding from Source\n--------------------\n\n```bash\n$ go get -u github.com/jtopjian/bagel/...\n$ cd $GOPATH/src/github.com/jtopjian/bagel\n$ make build\n# or\n$ make install\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjtopjian%2Fbagel","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjtopjian%2Fbagel","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjtopjian%2Fbagel/lists"}