One huge advantage that puppet and chef offer is abstraction from the underlying system. So if you write a configuration that says "Apache should be running, have PHP installed, and have the following 3 virtual hosts installed", then you don't care if you're running on Solaris, Debian, or CentOS. The manifest/recipe takes care of figuring out what the package is called and where the config files go.
I'm not familiar with Ansible, but Fabric seems more like SSH with a for loop. Puppet and Chef are not about automating the typing as much as they are about ensuring consistency. In my Apache example above, if someone goes and changes a vhost file by hand, that file will be replaced with a good one and Apache will be restarted, even if that file was made by a complicated template.
then you don't care if you're running on Solaris,
Debian, or CentOS.
That does sound like an advantage, but I generally run the same OS across all machines (for a client), so that's not a huge advantage for me.
Fabric seems more like SSH with a for loop.
Definitely. And that suffices fairly well for managing 10-20 servers.
if someone goes and changes a vhost file by hand, that file
will be replaced with a good one and Apache will be restarted,
even if that file was made by a complicated template.
Ah, so Puppet is running on a machine, it will maintain the configuration of the machine even if some well-intentioned user fiddles?
> Ah, so Puppet is running on a machine, it will maintain the configuration of the machine even if some well-intentioned user fiddles?
Yes, at least for all ressources under its control. So in theory all changes to ressources managed via puppet should be done via puppet. I guess that's better this way when you're running a large farm of machines, the use-case puppet/chef/etc. were created for.
I'm not familiar with Ansible, but Fabric seems more like SSH with a for loop. Puppet and Chef are not about automating the typing as much as they are about ensuring consistency. In my Apache example above, if someone goes and changes a vhost file by hand, that file will be replaced with a good one and Apache will be restarted, even if that file was made by a complicated template.