{"id":15761690,"url":"https://github.com/oz123/wolkenbrot","last_synced_at":"2026-03-01T15:31:22.945Z","repository":{"id":25537904,"uuid":"104392918","full_name":"oz123/wolkenbrot","owner":"oz123","description":"Manage cloud Images smartly (Currently AWS and OpenStack only)","archived":false,"fork":false,"pushed_at":"2026-02-03T16:06:43.000Z","size":6465,"stargazers_count":4,"open_issues_count":0,"forks_count":2,"subscribers_count":0,"default_branch":"dev","last_synced_at":"2026-02-04T05:57:37.259Z","etag":null,"topics":["ami","aws","boto","hacktoberfest","openstack","packer","python3"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/oz123.png","metadata":{"files":{"readme":"README.md","changelog":"ChangeLog","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":"AUTHORS","dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"oz123","patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"lfx_crowdfunding":null,"custom":null}},"created_at":"2017-09-21T19:59:25.000Z","updated_at":"2026-02-03T15:01:01.000Z","dependencies_parsed_at":"2024-10-04T11:03:50.499Z","dependency_job_id":"a793b94e-ebd1-4484-9655-373c36f7dba4","html_url":"https://github.com/oz123/wolkenbrot","commit_stats":{"total_commits":90,"total_committers":3,"mean_commits":30.0,"dds":0.05555555555555558,"last_synced_commit":"4641bab9e01a15881445656387793c1b778f239a"},"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/oz123/wolkenbrot","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oz123%2Fwolkenbrot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oz123%2Fwolkenbrot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oz123%2Fwolkenbrot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oz123%2Fwolkenbrot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/oz123","download_url":"https://codeload.github.com/oz123/wolkenbrot/tar.gz/refs/heads/dev","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oz123%2Fwolkenbrot/sbom","scorecard":{"id":716184,"data":{"date":"2025-08-11","repo":{"name":"github.com/oz123/wolkenbrot","commit":"4641bab9e01a15881445656387793c1b778f239a"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":1.5,"checks":[{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Code-Review","score":0,"reason":"Found 1/17 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v0.3 not signed: https://api.github.com/repos/oz123/wolkenbrot/releases/51499935","Warn: release artifact v0.3 does not have provenance: https://api.github.com/repos/oz123/wolkenbrot/releases/51499935"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'dev'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 18 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":0,"reason":"21 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: PYSEC-2024-230 / GHSA-248v-346w-9cwc","Warn: Project is vulnerable to: PYSEC-2022-42986 / GHSA-43fp-rhv2-5gv8","Warn: Project is vulnerable to: PYSEC-2023-135 / GHSA-xqr8-7jwr-rhp7","Warn: Project is vulnerable to: GHSA-3ww4-gg4f-jr7f","Warn: Project is vulnerable to: GHSA-5cpq-8wj7-hf2v","Warn: Project is vulnerable to: GHSA-9v9h-cgj8-h64p","Warn: Project is vulnerable to: PYSEC-2023-254 / GHSA-jfhm-5ghh-2f97","Warn: Project is vulnerable to: GHSA-jm77-qphf-c4w8","Warn: Project is vulnerable to: GHSA-v8gr-m533-ghj9","Warn: Project is vulnerable to: GHSA-w7pp-m8wf-vj6r","Warn: Project is vulnerable to: GHSA-x4qr-2fvf-3mr5","Warn: Project is vulnerable to: PYSEC-2024-60 / GHSA-jjg7-2v4v-x38h","Warn: Project is vulnerable to: GHSA-45x7-px36-x8w8","Warn: Project is vulnerable to: GHSA-9hjg-9r4m-mvj7","Warn: Project is vulnerable to: GHSA-9wx4-h78v-vm56","Warn: Project is vulnerable to: PYSEC-2023-74 / GHSA-j8r2-6x86-q33q","Warn: Project is vulnerable to: GHSA-34jh-p97f-mpxf","Warn: Project is vulnerable to: PYSEC-2023-212 / GHSA-g4mx-q9vg-27p4","Warn: Project is vulnerable to: GHSA-pq67-6m6q-mj2v","Warn: Project is vulnerable to: PYSEC-2023-192 / GHSA-v845-jxx5-vc9f","Warn: Project is vulnerable to: GHSA-jfmj-5v4g-7637"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-22T09:43:53.040Z","repository_id":25537904,"created_at":"2025-08-22T09:43:53.040Z","updated_at":"2025-08-22T09:43:53.040Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29973314,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-01T15:29:09.406Z","status":"ssl_error","status_checked_at":"2026-03-01T15:28:28.558Z","response_time":124,"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":["ami","aws","boto","hacktoberfest","openstack","packer","python3"],"created_at":"2024-10-04T11:03:32.512Z","updated_at":"2026-03-01T15:31:22.938Z","avatar_url":"https://github.com/oz123.png","language":"Python","funding_links":["https://github.com/sponsors/oz123"],"categories":[],"sub_categories":[],"readme":"# Wolkenbrot\n\n## bakes and manages your cloud images (AWS, OpenStack, libvirt/KVM)\n![demo](https://github.com/oz123/wolkenbrot/blob/master/docs/demo.gif?raw=true)\n\nwolkenbrot is named after a German children's title called Wolkenbrot by\nthe Korean authors Baek Hee Na Kim Hyang Soo. The translation to English is\ncloud's bread.\n\nWolken brot is inspired by packer[1] and kujenga[2], removing fabric as a\ndependency. It also aims to be more tested and documented.\n\nIn case you wonder, yes it's similar to packer by Hashicorp.\nBut here are some reasons that you might like it better than packer:\n\n1. It's written in Python.\n2. It's not written in Go.\n3. It can use private AMI as a starting point for your build.\n4. It's smaller and easier to hack on.\n5. It has a cooler name.\n6. It has a better license, MIT sounds way better then MPL-2. Especially because it means \"with\" in German.\n\n### how is it different from Packer or kujenga?\n\n1. It is Python3 only.\n2. It does not depend on fabric.\n3. It replaces boto with boto3\n4. It's name is not Swahili, but rather German.\n5. It adds the ability to list your images\n6. It adds the ability to get detailed information about an image from the CLI.\n7. It adds the ability to de-register images from the CLI.\n\n[1]: https://github.com/macd/kujenga\n[2]: https://www.packer.io/\n\n### AWS Usage (default)\n\nYou can run the following command to build an image:\n\n```\n $ wolkenbrot bake \u003cimage.json\u003e\n```\n\nSee the documentation for the JSON format.\n\nYou can run the following command to list your existing images:\n\n```\n$ wolkenbrot list\n```\n\nYou can view the information about and image:\n\n```\n$  wolkenbrot info ami-72192e\n```\n\nYou can remove the image with:\n\n```\n$ wolkenbrot delete ami-72192e\n```\n\nWolkenbrot follows boto3 configuration principles, so if you wonder how to\npass AWS configuration parameters, take a look in [Boto3's own documentation][2]\n\n[3]: http://boto3.readthedocs.io/en/latest/guide/configuration.html\n\n### OpenStack Usage\n\nUse the `--openstack` flag or set `\"provider\": \"openstack\"` in your JSON config:\n\n```\n$ wolkenbrot --openstack bake \u003cimage.json\u003e\n$ wolkenbrot --openstack list\n$ wolkenbrot --openstack info \u003cimage-id\u003e\n$ wolkenbrot --openstack delete \u003cimage-id\u003e\n```\n\n### Libvirt/KVM Usage\n\nUse the `--libvirt` flag or set `\"provider\": \"libvirt\"` in your JSON config:\n\n```\n$ wolkenbrot --libvirt bake \u003cimage.json\u003e\n$ wolkenbrot --libvirt list\n$ wolkenbrot --libvirt info \u003cimage-name.qcow2\u003e\n$ wolkenbrot --libvirt delete \u003cimage-name.qcow2\u003e\n```\n\n#### Libvirt-specific options\n\n- `--uri` - Libvirt connection URI (default: `qemu:///system`)\n- `--image-dir` - Directory for libvirt images (default: `/var/lib/libvirt/images`)\n\nExamples:\n\n```\n# List images in a custom directory\n$ wolkenbrot --libvirt --image-dir /custom/path list\n\n# Connect to a remote libvirt host\n$ wolkenbrot --libvirt --uri qemu+ssh://user@host/system list\n```\n\n#### Libvirt JSON configuration\n\nExample `libvirt.json`:\n\n```json\n{\n  \"provider\": \"libvirt\",\n  \"name\": \"my-image\",\n  \"description\": \"My custom image\",\n  \"base_image\": {\n    \"path\": \"/var/lib/libvirt/images/ubuntu-cloud.img\"\n  },\n  \"output_path\": \"./my-image.qcow2\",\n  \"user\": \"ubuntu\",\n  \"memory\": 4096,\n  \"vcpus\": 2,\n  \"disk_size\": \"20G\",\n  \"network\": \"default\",\n  \"uploads\": {\n    \"./local-file\": \"/remote/path\"\n  },\n  \"commands\": [\n    \"sudo apt-get update\",\n    \"sudo apt-get install -y nginx\"\n  ]\n}\n```\n\nLibvirt-specific configuration options:\n- `region` - Libvirt connection URI (default: `qemu:///system`)\n- `base_image.path` - Path to the base cloud image (qcow2 format)\n- `output_path` - Where to save the final image\n- `instance_type` - Predefined instance type (see table below)\n- `memory` - VM memory in MB (default: 2048, overrides instance_type)\n- `vcpus` - Number of virtual CPUs (default: 2, overrides instance_type)\n- `disk_size` - Disk size (default: \"20G\", overrides instance_type)\n- `network` - Libvirt network name (default: \"default\")\n\n#### Instance Types\n\n| Type   | vCPUs | Memory | Disk |\n|--------|-------|--------|------|\n| small  | 1     | 1 GB   | 10G  |\n| medium | 2     | 4 GB   | 20G  |\n| large  | 4     | 8 GB   | 40G  |\n| xlarge | 8     | 16 GB  | 80G  |\n\nYou can use `instance_type` instead of specifying `memory`, `vcpus`, and `disk_size` individually:\n\n```json\n{\n  \"provider\": \"libvirt\",\n  \"name\": \"my-image\",\n  \"base_image\": {\"path\": \"/var/lib/libvirt/images/ubuntu.img\"},\n  \"instance_type\": \"medium\"\n}\n```\n\nIndividual settings (`memory`, `vcpus`, `disk_size`) override the instance type defaults if both are specified.\n\n#### Remote Libvirt Hosts\n\nUse `region` in the config (or `--uri` CLI option) to connect to remote libvirt hosts:\n\n```json\n{\n  \"provider\": \"libvirt\",\n  \"name\": \"my-image\",\n  \"region\": \"qemu+ssh://user@remote-host/system\",\n  \"base_image\": {\"path\": \"/var/lib/libvirt/images/ubuntu.img\"},\n  \"instance_type\": \"large\"\n}\n```\n\nCommon URI formats:\n- `qemu:///system` - Local system (default, requires root or libvirt group)\n- `qemu:///session` - Local user session (unprivileged)\n- `qemu+ssh://user@host/system` - Remote host via SSH\n\n### FAQ\n\n * Do you support Windows or Mac OS X?\n\n   The author of this software strongly despises working on Windows or\n   Mac OS X. Hence, this software is not tested for these platforms.\n   If you can run Python on your OS, it might run.\n\n * Do you support provisioning machines with Saltstack\\Chef\\Puppet\\Ansible\\XYZ?\n\n  Yes, just install them via shell first, then call the right binary with the correct playbook\\state\\formula..\n \n### Testing and Installing the test requirements\n\nSimply issue:\n\n```\n$ pip install -e \".[dev]\"\n$ make test\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foz123%2Fwolkenbrot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Foz123%2Fwolkenbrot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foz123%2Fwolkenbrot/lists"}