Preface
The core philosophy behind configuration management systems has its roots in the US Department of Defense, where it was adopted as a technical management discipline. Today, the philosophy has been adopted by many other disciplines, including systems and software engineering. The basic idea behind a configuration management system is to establish and maintain the consistency of a system or product throughout its lifetime. The following are the fundamental activities associated with any configuration management system:
The purpose of configuration management systems is to ensure that the state of the system isn't residing in the minds of people, but inside a revision control system, from which it's easy to figure out the current state of the system along with the changes that have been made to the underlying system over the course of time. It not only allows to record "what" changes were made, but also "why" the changes were made.
With a phenomenal increase in the usage of cloud platforms, new challenges have emerged for system architects, as they now need to design systems that are able to scale up the size of the infrastructure upon the demands laid down by the application's needs, and the manual configuration of systems in such a dynamic environment is just not possible.
Chef is a configuration management system developed by Opscode and is one of the most widely used systems in its category. It allows you to define the infrastructure as a code, and it can be used to build, deploy, and automate your infrastructure. With Chef, the infrastructure becomes as versionable, testable, and repeatable as an application code.
Mastering Chef is an attempt to provide in-depth knowledge of the underlying system. It provides users with insights into different components of the underlying system and also provides users with insight into the APIs that can be used to either extend Chef, or build toolsets around the ecosystem.