As someone who used Puppet for some years, went to Salt[1], then Ansible[2], I've setteled on POSIX sh[3],
1: http://git.uggedal.com/historic/states/
1: http://git.uggedal.com/historic/states/
http://steve.org.uk/Software/slaughter/
I find it works well, each node pulls configuration from github, an rsync share, or similar, and executes locally. So there's no master in the traditional sense.