Both chef and puppet have their own advantages and disadvantages, both of them are good in their own ways.
I'm listing down pros and cons for both of them, can use according to your requirement.
chef
pros:
- Rich collection of modules and configuration recipes.
- Code-driven approach gives you more control and flexibility over your configurations.
- Being centered around Git gives it strong version control capabilities.
- ‘Knife’ tool (which uses SSH for deploying agents from workstation) eases installation burdens
cons:
- The learning curve is steep if you’re not already familiar with Ruby and procedural coding.
- It’s not a simple tool, which can lead to large code bases and complicated environments.
- Doesn’t support push functionality.
Puppet
pros:
- Well-established support community through Puppet Labs.
- It has the most mature interface and runs on nearly every OS.
- Simple installation and initial setup.
- Most complete Web UI in this space.
- Strong reporting capabilities.
cons:
- For more advanced tasks, you will need to use the CLI, which is Ruby-based (meaning you’ll have to understand Ruby).
- Support for pure-Ruby versions (rather than those using Puppet’s customized DSL) is being scaled back.
- Because of the DSL and a design that does not focus on simplicity, the Puppet code base can grow large, unwieldy, and hard to pick up for new people in your organization at higher scale.
- Model-driven approach means less control compared to code-driven approaches.