Ansible
Model: PUSH = Agentless
Action file: Playbook
Protocols: SSH & NETCONF
Uses YAML.
Written in Python.
Puppet
Model: PULL = Requires Agent (or proxy)
Action file: Manifest
Protocols: HTTPS(REST) TCP port 8140
Written in Ruby
Example of Puppet DSL resource declaration:
sudo::conf { 'CoAdmins':
ensure => present,
content => '%admin ALL=(ALL) ALL',
}
Chef
Model: PULL = Requires Agent
Action file: Recipe, Runlist
Protocols: HTTPS(REST) TCP port 10002
Written in Ruby
Example of Chef recipe:
sudo "CoAdmins"
group "CoAdmins"
nopasswd true
Ansible's playbooks use an imperative language, whereas Puppet uses a declarative language.
Adoption numbers:
Wendell Odom's book says Ansible > Puppet > Chef
Jeremy says Ansible is the most popular choice for network device config management
Boson ExSim says Puppet is most mature and widely used