My first configuration management solution was Puppet back in 2013. I was, admittedly, impressed by its power, reliability and maturity relative to its age.

The nagging feeling persisted, however, that with Puppet I was plateauing too early given my experience with Linux. I'd not written code in Ruby before, which was one issue, however the achilles heel of the solution (for me personally) was the unnatural feeling the manifests and modules had. I felt like I was re-learning everything I'd become proficient in.

Learning Ansible

Enter 2015 and Ansible. After my first few weeks reviewing plays and modules I finally felt at home. Ansible combined the best of the command line with the best of Python to create an extremely powerful, extensible and reliable configuration management tool.

The official documentation was more than sufficient when I was getting started.

After a few months, YAML also began to feel like the natural choice for a configuration language.

Finally, familiarity with Jinja2 Templating proved very important.

Inspired by the best

Simplicity of design and implementation had me 80% sold on Ansible. Credit for the remaining 20% goes to the authors of collections of fantastic roles and modules. In particular:

  • DebOps - Insanely well integrated, extensible roles for configuring Debian

  • Jeff Geerling - Author of Ansible for DebOps and publisher of countless well-written roles spanning Debian, Ubuntu and CentOS.