Ten years ago, there were only two choices for provisioning and configuration management: CFEngine and IBM Tivoli. Neither solution was up to the challenges of the cloud or even the virtualized data center, and thus Puppet and Chef were born.
But today, Puppet and Chef are no longer alone: New tools have cropped up from AnsibleWorks and SaltStack, and they both offer healthy alternatives for DevOps.
“Admins are becoming developers,” said Luke Kanies, founder and CEO of Puppet Labs. “There is a shift going on around what [the] operations role is. It becomes much more about the entire application, and the view of it that the business has. It’s much more about the vertical silos than it used to be. You’re a DBA sys admin or a virtualization sys admin. Now there are technology specialists. Once you’ve got the automation in place, it becomes about the horizontal extraction that works across an application. There’s all this change going on, and in some ways it’s all relatively predictable.”
So what, if anything, distinguishes the four commercial provisioning and configuration-management systems? For one thing, Puppet is strictly focused on handling the configuration of servers after they’ve been stood up. It specializes in going through a fresh system and flipping all the important bits you’ve specified beforehand: user access controls, network routing information, HTTPD configuration and .htaccess, as well as anything else that can be changed on a server.
Chef, on the other hand, is all about actually installing all the various components, and building a server from scratch. It does this through Recipes. Recipes are written to describe what a system should look like in its end state; perhaps that means installing a specific version of Java, then Apache Web Server, then Tomcat.
Both Chef and Puppet achieve their goals through scripts that define how a system should be configured and laid out. Thus, the meat of the DevOps day job can quickly become the care and maintenance of all Chef and Puppet scripts.
The end game here, however, is to get to the point where systems can be programmatically defined and dynamically provisioned. It is for this reason that Chef uses Ruby as its Recipe programming language.
Just as each Java team would have someone charged with maintaining Ant scripts, or with keeping a local Maven repository up to date, Chef and Puppet are often the focus for semi-code aware IT folks.