At this point, the Ansible project (by Michael DeHaan) achieves most of my design goals for Poppet. Use that! https://github.com/ansible/ansible
THIS IS PRE-ALPHA CODE. NO ONE HAS EVER USED IT TO DO ANYTHING.
Poppet is to Puppet as Sinatra is to Rails. Poppet is a Configuration Management Microframework.
In Poppet, most things are small scripts that accept well-formed JSON on STDIN and output JSON on STDOUT, because Unix + Structure = Awesome.
- run server.rb on your server # rack app, supplies upload/download access through HTTP
- cron coordinator.rb on your server # calculates policies for inventory
- cron announce.rb # uploads system information into inventory
- cron client.rb # downloads and applies policy
- ruby system_facts.rb | ruby make_policy.rb | ruby apply.rb
Please submit Pull Requests via Github, because that UI is pretty good actually.
- TODO Propagate errors to the server and to logs
- STARTED use GPG
- TODO Wrapper scripts for common command lines
- Figure out how to test all this stuff.
- Simplify object constuction by keeping metadata separate from objects
- Model imperative sections of policy
- Use other projects' implementations of complex system calls
- TODO A non-ruby DSL for writing policies
- TODO Transient resources
- TODO Optional resources
- TODO Multi-resource Imp API ("Install all these packages")
- TODO Cross-machine coordination
- TODO Farm out policy-making
- TODO various other TODOs scattered around the source.
- TODO json-shape files for data types
- TODO Don't recreate existing policy files
- TODO Command line parsing (probably Trollop)
- TODO A second System->System filter to happen on the serverside before System->Policy
- TODO Unique filenames for timestamped files
- TODO Find more ways to sort files in public/
- TODO Model changelog entries as Structs
- TODO detect cycles in graphs
- TODO detect references to non-existent resources
- TODO nudged_by should work