Last year I wrote a blog post comparing programming languages to driving experiences. Today in the chatroom, my friends and I were talking about config management tools. I’ve had the opportunity to use most of them, so I compared them to operating systems as such:
|CM Tool||OS||Feels Like|
|Ansible||Mac OS||Here's the one way to do things, chosen Your Lord and God, Steve Jobs. You can do things other ways too, but be prepared for a little pain|
|Salt||Linux||Do whatever the fuck you want to do. You have unlimited freedom. It might be a bit painful sometimes though.|
|Chef||DOS||Bash on steroids. OKay, so maybe it's not like DOS, but you know, to fit into the OS analogy...|
Naturally, the above list is listed in my personal preference. I really really really like Salt - I’ve used it since its inception. But Salt is quite tedious to use - I have a repository of salt states for fuck’s sake. That’s not normal. Ansible is far easier, and for all the simple projects that I have, Ansible is more than enough. It’s easy enough that I can write playbooks from scratch without having to resort to a saved salt state. In a proper project setting, I’d probably be using Salt - less technical debt in the future - but for now Ansible suits my needs perfectly.
My experiences with Puppet and Chef are much much less compared to my experience with Salt and Ansible. But every time I get exposed to an environment with Puppet, I feel like the people who use it also probably write FizzBuzz the enterprise way. It feels bureaucractic to use. Ditto with Chef, except Chef feels more commandline-y, if you know what I mean.
With Salt and Ansible, I feel like I can go in and cowboy the entire thing (not necessarily a good thing), but not so much with Chef or Puppet.
Now, of course, I haven’t had much experiences with these - I’m not really a dev ops kinda guy - I just do what needs to be done. My experiences cannot speak for those people who are in dev ops for a career. So take what I wrote here with a pinch of Salt. ;P