Paramiko is a Python API for SSH client, so it's not comparable to either of
the rest.
Fabric itself is a poor man's badly implemented RPC for sysadmins: you send
commands and receive output and result codes. Fabric wraps this in a Python
API, so you can react to how your operations run.
Salt and Ansible are similar to Fabric (and "poor man's badly implemented RPC"
comment applies to them as well), but they also define some higher level
tasks, like "have X package installed". All three have the operations defined
at the call initiator and return synchronously, when all the work is done.
Then there are CFEngine, Puppet, and Chef. Every managed server runs an agent
that periodically executes some rules. CFEngine and Puppet have their own
DSLs, and Chef uses general purpose language (Ruby), what I consider a bad
fit. These work asynchronously, as you don't push the rules to the servers,
but change them in their distribution point and wait for servers to pick up
the update.
Fabric itself is a poor man's badly implemented RPC for sysadmins: you send commands and receive output and result codes. Fabric wraps this in a Python API, so you can react to how your operations run.
Salt and Ansible are similar to Fabric (and "poor man's badly implemented RPC" comment applies to them as well), but they also define some higher level tasks, like "have X package installed". All three have the operations defined at the call initiator and return synchronously, when all the work is done.
Then there are CFEngine, Puppet, and Chef. Every managed server runs an agent that periodically executes some rules. CFEngine and Puppet have their own DSLs, and Chef uses general purpose language (Ruby), what I consider a bad fit. These work asynchronously, as you don't push the rules to the servers, but change them in their distribution point and wait for servers to pick up the update.