I was pointed to cfengine, but it doesn’t fit my needs IMHO. The machines I have are probably too different. And the most common case will be that I need to change something on exactly one machine. And then log this change. Maybe import it to others later.

Martin F. Krafft also replied, but his suggestion doesn’t fit my usage szenario either.

I never want or would want my machines to change their configuration automatically. It’s always me who does the changes. It often will be just a “svn diff; svn up”, but thats okay. But no automatically executions.

Let me pick a real example: I have two load-balancing, fail-over DHCP servers. Their configuration is 99% shared. They even have each others configuration, since I’ve put them into dhcpserver1.conf and dhcpserver2.conf. The only file they don’t share is the file which includes dhcpserver1.conf on one host and dhcpserver2.conf on the other. It’s a one-line diff, easy to merge, and likely to not change too often. Well, there is pool.conf, which is shared between both hosts. And then there is static.conf, with the static DHCP assignments. When I need to change something, I’m going to log into one of them, do the changes there, maybe syntax check them, run diff, to see I didn’t break anything etc. - then I commit the changes (not committing the “includes.conf”), log into the other box, do an “svn up”, and then I reload the config on both.

It’s working fine so far - except that I have not commited changes here, namely my includes.conf file. In case something breaks with the box, and I need to set it up again, I’d like to be able to just pull my “dhcpserver2” branch into /etc to get it running as it was before. But either I can’t change the shared files on both (or I have to merge them all the time) or I can’t have a branch reflecting 1:1 the configuration I want to have on the box.