Chef is a open source configuration and software integration framework that many organizations are actively investing in to simplify their operations. Here at Coveros, we are using Chef to provision new instances of SecureCI.
In many traditional organizations there is a natural division between our system administrators who are responsible for setting up servers and provisioning software and software developers who guide application development and deployment. This division is due in part to the the different skill sets and knowledge needed for both disciplines. Unfortunately, this invites developers to be removed from the actual production server considerations. The application will work perfectly in development, work slightly differently in implementation and break completely when it’s deployed to production. In addition, the often manual process of building and provisioning software is often error-prone and slow which impacts developments ability to rapidly test and deploy software.
While there is no perfect solution for fixing the problem, bringing a system provisioning framework and application deployment framework like Chef certainly helps.
Why should I be using Chef?
Probably one of the most important and understated reasons to use Chef is that it encourages close collaboration between operations and software development to reach their common goal. Both development and operations will have to work together to properly create automated recipes (Chef’s automated scripts for provisioning and deployment). This starts to break down that division between the two groups and puts them into better alignment with similar goals.
The obvious reason for using Chef is simply automation. Automated provisioning allows us to have deterministic, repeatable, flexible, well-organized and predictable environments. The Ruby code executes the same sequence of operations every time which reduces those manual errors. Chef attributes can be overridden at multiple levels into cookbooks, environments, roles and node defaults, allowing a rule of precedence allowing special node attributes to a specific instance(s) without it affecting the rest of the environment.
Chef’s search capability allows your recipes to query the server and make decisions based on the query results in the form of a Ruby API. This allows you to write recipes in a way that every node in your infrastructure can automatically converge toward the correct configuration needed for the environment it belongs too.