Ansible: A Puppet User's Perspective (DevOps Sydney, 2014)
A talk given at Devops Sydney in September 2014, explaining Ansible to Puppet users, with a divergence into patterns and problems you can expect to encounter with each.
It's code! It's code even if you're writing it in a markup language; it's loops, variables, conditions, and functions. It's about as declarative as my mum's Shepherd's Pie recipe.
#
Manifest create_resources(
'ssh_authorized_key',
hiera('my_keys'),
{
user
=>
'app'
} ) Structure of Heira data needs to match closely to what's consuming it (eg. SshAuthorizedKeys).
Ansible is much more flexible (see above), and can avoid the massive single-resource-declaration problem lurking in the bottom-right. :-)
• Puppet has big problems it's going to find difficult to solve without breaking everything. (You can't silently merge two identical Service definitions if you have globals and could- change-on-each-call state hanging around.)
• Puppet makes you write the dependency information, but then squanders it.
• Using generic data is tough without custom mangling or the experimental syntax engine. Summin' up.