BundleWrap logo
BundleWrap

Config management with Python

Easy. Minimalistic. Decentralized.

$ bw repo create $ bw repo bundle create motd $ vim bundles/motd/items.py files = { '/etc/motd': { 'content': 'Hear me roar', }, } $ vim nodes.py nodes = { 'localhost': { 'bundles': ['motd'], }, }
$ bw apply -i localhost i localhost started at 2017-09-27 22:13:00 ? localhost ? localhost ╭─ file:/etc/motd ? localhost? localhostcontent ? localhost--- <node> ? localhost+++ <bundlewrap> ? localhost │ @@ -1 +1 @@ ? localhost-A lion still has claws ? localhost+Hear me roar (no newline at end of file) ? localhost? localhost ╰─ Fix file:/etc/motd? [Y/n] ? localhost localhost motd file:/etc/motd fixed (content) i localhost completed after 3s (0 OK, 1 fixed, 0 skipped, 0 failed) i ╭───────────┬───────┬────┬───────┬─────────┬────────┬──────╮ inode │ items │ OK │ fixedskippedfailed │ time │ i ├───────────┼───────┼────┼───────┼─────────┼────────┼──────┤ i │ localhost │ 1 │ 0 │ 1 │ 0 │ 0 │ 3s │ i ╰───────────┴───────┴────┴───────┴─────────┴────────┴──────╯

Decentralized. There is no server. Just your laptop and your army of nodes.

Quick and easy to get started. You don't even need to know Python.

Lightweight. Even managing just a single machine won't feel like overkill.

Push configuration directly using SSH. No agent required.

Free as in bird.
100% Free Software.
No Enterprise Edition.

Pythonic and hackable.
Write hooks, custom items or use it as a library.