Confer - lightweight configuration management
Inspired by tools such as Ansible, Puppet and Chef, but at a much smaller scale.
Why smaller scale?
Because sometimes these otherwise awesome tools take an inordinate amount of time and effort to configure and maintain if you only have a server or two to manage. For example if (like me) you have your own dedicated server that you would like to configure by recipe but you don't need webscale™, then Confer is possibly for you.
Status
Confer is very young and very much in heavy development at this stage so I can't vouch for its stability nor integrity, however I am experienced enough that my code won't blow up in your face. I've intentionally kept the source simple with little in the way of magic so you should find it easy to read should you encounter any problems. Failing that, please feel free to submit issues.
NOTE: Confer is not yet feature complete, let alone production ready.
Upcoming features
- Flexible recipes: A YAML recipe simply describes a list of configurators and their parameters, so if your requirements are a little more complex or dynamic you can construct recipes programmatically with a high level DSL. Or if you need something a little closer to the metal (to integrate within your own code for example) you can simply import Confer as a library and interact directly with its classes.
- Easy to extend: At the heart of Confer are its "configurators" which do all the heavy lifting to apply and verify the configuration defined in recipes. Configurators are built around a simple lifecycle and can be written using a high level DSL or with plain old Ruby objects that implement the appropriate methods.
- Idempotency: The configurator lifecycle includes querying and verification of existing configuration so changes are only applied if actually necessary. Verification can be implicit or explicit, allowing for complex use cases.
- No client/server: Confer performs all of its operations over SSH, and no server component is required. In many cases a client-server model may be desirable, however this may be an indication that you need to consider a more comprehensive tool.
- Generators: In order to speed up the Confer workflow, boilerplate recipes and configurators can be generated.
Caveats
As with any software, there are always going to be some drawbacks and limitations.
- Weak cross platform support: One of Confer's strengths is its simplicity, particularly in regards to writing custom configurators that are appropriate for your setup. However this simplicity means there is no platform abstraction layer, and a configurator that must support multiple platforms will need to contain a fair number of ifs and buts. This may be addressed in a future update.
- Ruby 1.9 untested: At this stage no effort has been made to test Confer with anything less than Ruby 2.0. Apologies for that, but at this point I'm more interested in actually getting a working version. I almost certainly will put some effort into supporting Ruby 1.9 in the very near future. Pull requests are also welcome.
- No tests: I love TDD, but I've had to make an exception on this project because I need it yesterday. Therefore please consider this version of Confer as a prototype until such a time as I can guarantee its behavior with comprehensive tests.
Requirements
Currently the only requirement is that you must be able to connect to the host being configured via SSH, and that Ruby 2.0 is installed on your workstation.
Installing
If you're using a Ruby version manager such as RVM or rbenv (which you should!), you can simply gem install confer
, otherwise you'll probably need to sudo gem install confer
. This should be done client side. There is no need to install Confer on the server.
Alternatively you can install from the source by fetching it and running rake install
.
License
In the spirit of openness and freedom to use and abuse Confer is released under the MIT license, which basically means you are free do whatever you like with it. But it'd be really nice if awesome changes and bug fixes made their way back to the source as pull requests ;-)