Are there any tools like the Django South database migration app, but for migrating entire server configurations?
I manage several server configurations entirely from source control. Django app code, Apache configuration, load balancer configuration, Ubuntu package lists, everything is listed in a configuration file and deployable via Fabric commands. However, I still need to manually determine what's changed, and decide which deployment commands to run in sequence to make the server match my configuration files.
Ideally, I'd like to manage my servers that way South manages my database schema. After I've changed my code, I'd want to generate a "schema migration", which would determine if the Apache.conf needs to be rewritten, static media needs to be uploaded, a new system package needs to be installed, etc.
I've looked at some traditional configuration management tools, but even the biggest ones, like Chef and Puppet, don't seem to have any feature like this and usually aren't idempotent. My own personal experience with Chef showed that this is somewhat it's aim, but that it generally failed to accomplish this, and was notoriously difficult to customize and debug.
Does anyone know of a tool with this functionality?