$ cat post/config-management-wars:-a-chef's-tale.md

Config Management Wars: A Chef's Tale


October 22, 2012. The day I decided to embrace the chaos.

I’ve been doing ops for almost a decade by now, and the config management wars were in full swing. Puppet was king, but then Chef came storming into town with its promise of simplicity and ease of use. DevOps was the buzzword du jour, and the tools themselves were changing faster than I could keep up.

I had been using Puppet for a while at my current job, but it felt like every day someone was telling me about how easy and awesome Chef was. They’d share stories of how Chef made their infrastructure management tasks so much easier and more efficient. It got to the point where I couldn’t help but wonder if we were missing out.

After some soul-searching (and a bit of nagging from my colleagues), I decided it was time to dive into Chef myself. I set up a small sandbox environment, installed everything, and started with the basics. The first few tutorials went smoothly, and things looked good. But then I hit a roadblock.

The first thing you need to do when setting up a new server is make sure it’s secure. In Puppet, this meant running puppet agent --test on each node, which would configure the necessary security settings. In Chef, you had to use the file resource and write out shell scripts to perform the same task. It felt like I was adding unnecessary complexity just to get a simple setup working.

I started thinking about how we could adapt our existing Puppet infrastructure to use Chef instead. The idea was appealing—Chef’s more approachable syntax and better documentation seemed like it would make my life easier in the long run. But as I dug deeper, I realized that wasn’t going to be so straightforward.

The transition wasn’t just about writing new recipes; we had a massive existing Puppet infrastructure that needed to be ported over. And not only did we need to do this work now, but we also had to maintain both Puppet and Chef for the foreseeable future until we could fully migrate everything.

I sat down with my team and laid out the plan. We agreed that it was worth giving Chef a try, even though it would be a significant undertaking. The hope was that the benefits—easier configuration, better integration, and more flexibility—would make it worthwhile in the end.

The next few weeks were intense. I spent long nights debugging recipes, trying to get everything working perfectly. There were times when I felt like we were fighting an uphill battle against the complexity of our own infrastructure. Chef’s syntax was cleaner, but its power came with a steep learning curve. We had to figure out how to do things that seemed obvious in Puppet but required creative solutions in Chef.

We hit several bumps along the way:

  1. Resource Management: In Puppet, resources were managed declaratively. Chef introduced more of a imperative style, which took some getting used to.
  2. Cookbook Structure: We found ourselves struggling with how best to structure our cookbooks and organize our code.
  3. Testing: While Puppet had strong testing support out of the box, we had to figure out how to write effective tests for Chef.

Despite these challenges, there were moments when things clicked, and it became clear that Chef could make our lives easier. The ability to define resources in a way that was closer to how they would be managed on the server simplified some of our more complex setups.

In the end, we did manage to transition much of our infrastructure over to Chef. It wasn’t perfect by any means—there were still quirks and edge cases—but it was significantly better than what we had with Puppet. And as DevOps became a reality for us, the flexibility and power that Chef offered paid off.

Looking back on that period now, I can see how much those early days shaped my approach to infrastructure management. The experience taught me the importance of choosing the right tool for the job, even if it means going through some pain to get there. And while Puppet will always hold a special place in my heart, I’m grateful for the lessons Chef forced on me.

In the grand scheme of things, the config management wars are just one chapter in the ongoing narrative of infrastructure and ops. But for those of us who lived through it, they were an intense but ultimately enriching experience.

Happy to be done with them, at least for now.


That’s my take from 2012. What about you?