About this ebook
- Discover the new fundamentals of the ecosystem, its APIs, as well as the ohai and knife plugins
- Learn new ways of using Chef and its attributes by overriding the old attributes
- Packed with real-world examples that can be used to explore the components like speeding up Chef with Ruby
If you have used Chef before and are interested in automation of infrastructure and want to develop your own tools to manage large-scale infrastructures, then this book is for you.
Related to Mastering Chef
Related ebooks
Mastering Chef Provisioning Rating: 0 out of 5 stars0 ratingsMastering Eclipse Plug-in Development Rating: 0 out of 5 stars0 ratingsSelenium Design Patterns and Best Practices Rating: 5 out of 5 stars5/5Learning NHibernate 4 Rating: 0 out of 5 stars0 ratingsMastering Magento 2 - Second Edition Rating: 0 out of 5 stars0 ratingsConfiguration Management with Chef-Solo Rating: 0 out of 5 stars0 ratingsLiferay Portal Performance Best Practices Rating: 0 out of 5 stars0 ratingsExpert Configuration Automation with Chef: A Detailed Roadmap for Mastery Rating: 0 out of 5 stars0 ratingsThe PHP Workshop: Learn to build interactive applications and kickstart your career as a web developer Rating: 0 out of 5 stars0 ratingsLearning Alfresco Web Scripts Rating: 0 out of 5 stars0 ratingsMastering SaltStack Rating: 0 out of 5 stars0 ratingsCreating Development Environments with Vagrant - Second Edition Rating: 0 out of 5 stars0 ratingsASP.NET MVC 4 Mobile App Development Rating: 0 out of 5 stars0 ratingsAdvanced UFT 12 for Test Engineers Cookbook Rating: 0 out of 5 stars0 ratingsMastering Configuration Automation with Chef Rating: 0 out of 5 stars0 ratingsFuelPHP Application Development Blueprints Rating: 0 out of 5 stars0 ratingsMastering CakePHP: A Comprehensive Guide to Rapid Web Development Rating: 0 out of 5 stars0 ratingsAnsible Playbook Essentials Rating: 0 out of 5 stars0 ratingsAPI Testing and Development with Postman: API creation, testing, debugging, and management made easy Rating: 0 out of 5 stars0 ratingsMastering Apache Maven 3 Rating: 0 out of 5 stars0 ratingsMicrosoft Exchange Server PowerShell Essentials Rating: 0 out of 5 stars0 ratingsYii Project Blueprints Rating: 0 out of 5 stars0 ratingsPhpStorm Cookbook Rating: 0 out of 5 stars0 ratingsSpring MVC Beginner’s Guide Rating: 2 out of 5 stars2/5Practical Web Development Rating: 5 out of 5 stars5/5Phalcon Cookbook Rating: 0 out of 5 stars0 ratingsPython Essentials Rating: 5 out of 5 stars5/5Vagrant Virtual Development Environment Cookbook Rating: 5 out of 5 stars5/5WordPress 3 Plugin Development Essentials Rating: 4 out of 5 stars4/5The Ruby Workshop: Develop powerful applications by writing clean, expressive code with Ruby and Ruby on Rails Rating: 0 out of 5 stars0 ratings
Databases For You
SQL QuickStart Guide: The Simplified Beginner's Guide to Managing, Analyzing, and Manipulating Data With SQL Rating: 4 out of 5 stars4/5Behind Every Good Decision: How Anyone Can Use Business Analytics to Turn Data into Profitable Insight Rating: 5 out of 5 stars5/5Data Lake Development with Big Data Rating: 0 out of 5 stars0 ratingsGrokking Algorithms: An illustrated guide for programmers and other curious people Rating: 4 out of 5 stars4/5Access 2019 For Dummies Rating: 0 out of 5 stars0 ratingsLearn SQL in 24 Hours Rating: 5 out of 5 stars5/5COMPUTER SCIENCE FOR ROOKIES Rating: 0 out of 5 stars0 ratingsGetting Started with SQL Server 2014 Administration Rating: 0 out of 5 stars0 ratingsExcel 2021 Rating: 4 out of 5 stars4/5Practical Data Analysis Rating: 4 out of 5 stars4/5CompTIA DataSys+ Study Guide: Exam DS0-001 Rating: 0 out of 5 stars0 ratingsVisualizing Graph Data Rating: 0 out of 5 stars0 ratingsAccess 2016 For Dummies Rating: 0 out of 5 stars0 ratingsTeach Yourself VISUALLY Access 2010 Rating: 0 out of 5 stars0 ratingsBlockchain For Dummies Rating: 5 out of 5 stars5/5Data Structures Demystified Rating: 5 out of 5 stars5/5Learn Git in a Month of Lunches Rating: 0 out of 5 stars0 ratingsPython Projects for Everyone Rating: 0 out of 5 stars0 ratingsPostgreSQL Administration Essentials Rating: 0 out of 5 stars0 ratingsA concise guide to PHP MySQL and Apache Rating: 4 out of 5 stars4/5Practical SQL, 2nd Edition: A Beginner's Guide to Storytelling with Data Rating: 0 out of 5 stars0 ratingsProfessional Access 2013 Programming Rating: 0 out of 5 stars0 ratingsPython for Data Science: A Hands-On Introduction Rating: 0 out of 5 stars0 ratingsLearn SQL Server Administration in a Month of Lunches Rating: 3 out of 5 stars3/5Tableau Cookbook – Recipes for Data Visualization Rating: 0 out of 5 stars0 ratings
Reviews for Mastering Chef
0 ratings0 reviews
Book preview
Mastering Chef - Mayank Joshi
Table of Contents
Mastering Chef
Credits
About the Author
About the Reviewers
www.PacktPub.com
Support files, eBooks, discount offers, and more
Why subscribe?
Free access for Packt account holders
Preface
What this book covers
What you need for this book
Who this book is for
Conventions
Reader feedback
Customer support
Downloading the example code
Errata
Piracy
Questions
1. Introduction to the Chef Ecosystem
Different modes of running Chef
Terminology used in the world of Chef
The anatomy of a Chef run
A Chef run using chef-client
Step 1 – Building a node object
Step 2 – Authenticate
Step 3 – Synchronization of cookbooks
Step 4 – Loading of cookbooks and convergence
Step 5 – Reporting and exception handling
Using chef-solo
Setting up a work environment
Summary
2. Knife and Its Associated Plugins
Introducing Knife
Managing cookbooks
Creating a new cookbook
Uploading a cookbook to chef-server
Getting the list of all the cookbooks on chef-server
Deleting cookbooks
Downloading a cookbook
Deleting multiple cookbooks
Managing environments
Creating an environment
Deleting an environment
Editing an environment
Listing all environments
Displaying information about an environment
Managing roles
Creating a new role
Deleting a role
Editing a role
Listing all available roles
Displaying information about a role
Managing nodes
Creating a node
Listing all available nodes
Displaying information about a node
Editing a node
Adding stuff to the run_list associated with a node
Deleting stuff from the run_list associated with a node
Deleting a node object
Managing an API client
Creating a new client
Listing all available API clients
Displaying information about a client
Deleting an existing client
Reregistering a client
The search command
Bootstrapping a node
Some useful Knife plugins
The knife-ssh plugin
The knife-ec2 plugin
The knife-azure plugin
The knife-google plugin
The knife-push plugin
Summary
3. Chef and Ruby
Ruby
IRB
Variables and types
Symbols
Basic operations
Arithmetic operators
Comparison operators
Assignment operators
Bitwise operators
Logical operators
The Ruby ternary operator
Ruby range operators
The Ruby defined? operator
Conditional statements and loops
The if statement
The unless statement
The case/when statement
The while loop
The until loop
The for loop
Methods
Blocks
Arrays
Creating an array
Accessing elements of an array
Adding elements to an array
Removing elements from an array
Iterating over an array
Selecting elements of an array
The nondestructive way
The destructive way
Bang methods
Hashes
Creating hashes
Iterating over a hash
Classes and objects
What's an object and a class?
Modules
Summary
4. Controlling Access to Resources
The bootstrap process
Authentication
chef-client
Knife
Custom API calls
Authorization
The Open Source Chef server
Enterprise Chef
Object permissions
Groups
Summary
5. Starting the Journey to the World of Recipes
Resources
Guard attributes
Lazy evaluation of attributes
The package resource
The cookbook_file resource
The directory resource
The file resource
The execute resource
The cron resource
The service resource
The bash resource
The template resource
Helper modules
Inline methods
Inline modules
Library modules
Partial templates
Recipes
Attributes
Types of attributes
Including recipes
The run_list
Recipe DSL methods
The platform method
The platform_family method
The value_for_platform method
The value_for_platform_family method
The attribute method
The resources method
Best practices when writing recipes
Summary
6. Cookbooks and LWRPs
Cookbooks
Authoring a cookbook
Uploading a cookbook to the Chef server
Deleting a cookbook
Testing a cookbook
Cookbook versioning
Operators available for use with versioning
Freezing versions
Maintaining multiple versions of cookbooks
Maximum version control strategy
Branch tracking strategy
Custom resources
Setup
Resource
Provider
Provider DSL
Logging
Summary
7. Roles and Environments
Managing roles
Using Knife
Creating a new role
Editing an existing role
Deleting an existing role
Showing details about an existing role
Listing all roles on the Chef server
Using Ruby DSL
Using a JSON file
Using the Chef API
Using the Chef server WebUI
Managing environments
Using Knife
Creating a new environment
Editing an environment configuration
Deleting an environment
Displaying all the environments configured on the Chef server
Showing details associated with an environment
Comparing cookbook versions across environments
Creating or editing an environment using the configuration specified in a file
Using Ruby DSL
Setting up an environment on a node
Using Knife
Editing the client.rb file on the node
Role and environment attributes
Attribute precedence
Environment run lists
Summary
8. Attributes and Their Uses
Attribute naming
Different types of attributes
Different sources of attributes
The attribute file
Recipes
Roles and environments
Ohai
Attribute precedence
Attribute whitelisting
Summary
9. Ohai and Its Plugin Ecosystem
Running the Ohai binary
Ohai plugins
Custom plugins
Logging in Ohai plugins
Summary
10. Data Bags and Templates
Data bags
Management of a data bag
Creating a data bag
Editing a data bag item
Deleting a data bag item or a data bag
Getting a list of all the data bags set up on the Chef server
Getting a list of items and their properties
Using the data bags in recipes
Encrypted data bags
Templates
Template resources and a template in action
Partial templates
Summary
11. Chef API and Search
Prerequisites for using Chef API
Authentication of requests
Endpoints
/users
GET
POST
/users/NAME
DELETE
GET
POST
PUT
/clients
GET
POST
/clients/NAME
DELETE
GET
PUT
/roles
GET
POST
/roles/NAME
DELETE
GET
PUT
/roles/NAME/environments
GET
/roles/NAME/environments/NAME
GET
/cookbooks
GET
/cookbooks/NAME
GET
/cookbooks/NAME/VERSION
DELETE
GET
PUT
/data
GET
POST
/data/NAME
DELETE
GET
POST
/data/NAME/ITEM
DELETE
GET
PUT
/environments
GET
POST
/environments/NAME
DELETE
GET
PUT
/environments/NAME/cookbooks
GET
/environments/NAME/nodes
GET
/environments/NAME/recipes
GET
/environments/NAME/roles/NAME
Search
/search
GET
/search/INDEX
GET
POST
Patterns
Syntax
Exact matching
Wildcard matching
Range matching
Fuzzy matching
Operators
Using search in recipes
Ridley
Summary
12. Extending Chef
Custom Knife plugins
The skeleton of a Knife plugin
Namespace
Class name
Banner
Dependencies
Requirements
Options
Arguments
The run method
Search inside a custom Knife plugin
knife.rb settings
User interactions
Exception handling
A simple Knife plugin
Distributing plugins using gems
Custom Chef handlers
Summary
13. (Ab)Using Chef
The dynamic server list in Capistrano using Chef
Installing Capistrano
Capistrano style deployments using Chef's deploy
resource
Phases of deployment
Callbacks
Actions
Attributes
Extending Chef to bootstrap distributed systems
Running jobs from your workstation
Running jobs from within recipes
Test-driven development with Chef
Development without TDD
Development with TDD
Types of tests
What to use where
How do we simulate a real-world scenario?
Tools
Using Chef in a dynamic environment such as the cloud
Summary
Index
Mastering Chef
Mastering Chef
Copyright © 2015 Packt Publishing
All rights reserved. No part of this book may be reproduced, stored in a retrieval system, or transmitted in any form or by any means, without the prior written permission of the publisher, except in the case of brief quotations embedded in critical articles or reviews.
Every effort has been made in the preparation of this book to ensure the accuracy of the information presented. However, the information contained in this book is sold without warranty, either express or implied. Neither the author, nor Packt Publishing, and its dealers and distributors will be held liable for any damages caused or alleged to be caused directly or indirectly by this book.
Packt Publishing has endeavored to provide trademark information about all of the companies and products mentioned in this book by the appropriate use of capitals. However, Packt Publishing cannot guarantee the accuracy of this information.
First published: June 2015
Production reference: 1240615
Published by Packt Publishing Ltd.
Livery Place
35 Livery Street
Birmingham B3 2PB, UK.
ISBN 978-1-78398-156-4
www.packtpub.com
Credits
Author
Mayank Joshi
Reviewers
Omri Bahumi
Evgeny Goldin
Panagiotis Papadomitsos
Commissioning Editor
Edward Gordon
Acquisition Editor
Meeta Rajani
Content Development Editor
Parita Khedekar
Technical Editors
Manali Gonsalves
Taabish Khan
Copy Editors
Trishya Hajare
Aditya Nair
Project Coordinator
Suzanne Coutinho
Proofreader
Safis Editing
Indexer
Priya Sane
Graphics
Sheetal Aute
Disha Haria
Production Coordinator
Komal Ramchandani
Cover Work
Komal Ramchandani
About the Author
Mayank Joshi works for Indix as a DevOps engineer. He has worn many hats during his 10-year long career. He has been a developer, a systems analyst, a systems administrator, a software consultant, and for the past 6 years, he has been fascinated with the phenomenal growth witnessed in cloud environments and the challenges of automation associated with the hosting of the infrastructure in such environments. Prior to Indix, he worked for start-ups such as SlideShare, R&D organizations such as CDAC, and even had a stint at a highly automated chemical plant of IFFCO.
I would like to thank all my fellow colleagues at Indix for their wonderful support and allowing me to get some spare time amid some very tight work schedules.
I wouldn't have been able to work on cloud platforms and configuration management systems had I not associated with SlideShare. Thanks much, guys!
I would also like to thank my family for bearing with me while I was spending most of the time either working or writing the book.
Last but not least, special thanks to the wonderful team at Packt, especially Parita and Meeta, who really pushed me whenever I was losing focus.
About the Reviewers
Omri Bahumi started his relationship with Linux in 1999 at the age of 12. Since then, he has managed to engage with various areas of Linux-based production systems—from high performance network servers to low-level debugging and advanced networking trickery. He serves in EverythingMe's operations team, where he's in charge of designing, building, and deploying multi-data center cloud infrastructures for developers and users alike. A typical day in his life includes a mixture of having coffee, coding in various languages, managing AWS stacks, taming Docker and Chef, and working with engineers on upcoming features (not necessarily in this order). In his spare time, he likes to hack on Arduino, Raspberry Pi, ESP8266, and all sorts of programmable hardware, making cool electronic projects.
Evgeny Goldin is a Ruby, Groovy, and Scala software developer who turned into an automation and release engineer to introduce order where chaos usually reigns. On an average day, all things related to cloud, automation, and continuous delivery get his immediate attention. Back at home, he's a proud father of a 1-year-old son, dreaming of a day when a proper tech talk would happen between the two! When he has any spare time left, he explores the subjects of aviation safety, functional programming, and web security. He's an open source developer, speaker, and passionate advocate when it comes to tools and techniques that lead to smooth and painless release processes.
Panagiotis Papadomitsos is a distributed systems architect in the mobile intelligence division of Splunk, where he is responsible for the design, implementation, and maintenance of a self-healing, always-on highly distributed application mesh that spans three clouds and receives more than 450 billion events per hour from devices spread across the globe. He's been working with distributed systems for the past 10 years in various companies and positions, with responsibilities ranging from designing and implementing complex heterogeneous infrastructures using Chef and the Chef ecosystem to architecting and coding low-latency distributed applications in Erlang and Nginx/Lua, contributing code back to the community whenever possible. He is a performance-tuning enthusiast; you'll often find him measuring and optimizing critical code execution paths from the application level down to the OS kernel level. When away from the computer screen, he enjoys surfing, snowboarding, and playing the guitar.
www.PacktPub.com
Support files, eBooks, discount offers, and more
For support files and downloads related to your book, please visit www.PacktPub.com.
Did you know that Packt offers eBook versions of every book published, with PDF and ePub files available? You can upgrade to the eBook version at www.PacktPub.com and as a print book customer, you are entitled to a discount on the eBook copy. Get in touch with us at
At www.PacktPub.com, you can also read a collection of free technical articles, sign up for a range of free newsletters and receive exclusive discounts and offers on Packt books and eBooks.
https://www2.packtpub.com/books/subscription/packtlib
Do you need instant solutions to your IT questions? PacktLib is Packt's online digital book library. Here, you can search, access, and read Packt's entire library of books.
Why subscribe?
Fully searchable across every book published by Packt
Copy and paste, print, and bookmark content
On demand and accessible via a web browser
Free access for Packt account holders
If you have an account with Packt at www.PacktPub.com, you can use this to access PacktLib today and view 9 entirely free books. Simply use your login credentials for immediate access.
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.
What this book covers
Chapter 1, Introduction to the Chef Ecosystem, serves as a reference to new users of Chef. After a brief introduction, we jump into the anatomy of a chef-client run and at the end, we'll see how to go about setting up our workstation for the development of a Chef code that is thoroughly tested before being pushed to the production environment.
Chapter 2, Knife and Its Associated Plugins, introduces the reader to one of the most widely used tools in the Chef ecosystem, called Knife. We will learn to use Knife to bootstrap instances and also learn about different plugins that can be used to accomplish daily routine tasks in a more efficient way.
Chapter 3, Chef and Ruby, brings a user up to speed with the required Ruby knowledge, thereby allowing them to write a more efficient infrastructure code. By the end of this chapter, the user will be equipped with enough knowledge of Ruby to extend the code for infrastructure provisioning, beyond what can be accomplished by merely using the DSL provided by Chef.
Chapter 4, Controlling Access to Resources, introduces the concept of organization, groups, and users, and explains how you can allow fine-grained access to different types of objects residing on the Chef server.
Chapter 5, Starting the Journey to the World of Recipes, introduces the reader to the most fundamental unit of code written by Chef developers—recipes
. We'll learn about the different components of a recipe and get an understanding of the different resources that can be used to manage our infrastructure.
Chapter 6, Cookbooks and LWRPs, introduces users to cookbooks and how you can extend chef-client through the use of lightweight resource/provider. Readers will also learn how to create their own custom LWRPs by the end of this chapter.
Chapter 7, Roles and Environments, explains that, most of the time, a server is not just associated with one particular task and can perform many different operations. For example, you might have a web server that is also performing the role of an application server and a proxy. Roles allow users to attach multiple recipes to a server. Also, in most organizations, infrastructure is classified into different environments depending upon the use. For example, an organization might have a dev, QA, staging, and production environment. The configuration of applications running across these environments will be different to some extent. This chapter will explain what a role is, how we can group multiple recipes in a role, and how to use roles inside a recipe to do things conditionally. We'll also learn how you can manage different environments in your infrastructure using Chef.
Chapter 8, Attributes and Their Uses, explains that every service and a server can be identified with a role and set of properties associated with it. Some properties are system specific, such as the IP address, kernel, hostname, and so on. While they are necessary, an effective infrastructure code always needs more properties that can define the services and the server itself in a more precise manner. In this chapter, we'll see what the different types of attributes are and how to override values of the attributes.
Chapter 9, Ohai and Its Plugin Ecosystem, explains that as part of a chef-client run, many details related to the underlying system, such as architecture, operating system, network details, filesystem, and so on, are required to be collected by Chef. Ohai is a tool that allows for this. In this chapter, we'll learn about Ohai and its plugin-based architecture and associated plugins. We'll also learn how to write our own custom Ohai plugins.
Chapter 10, Data Bags and Templates, explains that in highly dynamic environments such as cloud, a configuration management system is only as good as its support for allowing the specification of the configuration in a form that is dynamic. Templates are just what the doctor ordered for this use case. Data bags, on the other hand, are data stores containing the data stored in a JSON format. In this chapter, we'll learn how to make effective use of databags and templates to define our infrastructure.
Chapter 11, Chef API and Search, explains that the Chef API is perhaps one of the most powerful features of Chef. Chef has a really wonderful API and its search facility is what makes it really fun to use. There are lots of cases where you can make use of Chef's API to build tools that can help in the efficient automation of the tasks. In this chapter, we'll look at Chef's API, using search in a recipe using Chef API, and also using a search through Knife.
Chapter 12, Extending Chef, covers the writing of a custom code suited for our requirements that will help us to extend the functionality of Chef. We'll learn how to write custom Knife plugins and custom Chef handlers.
Chapter 13, (Ab)Using Chef, explores some fun uses of Chef, which will allow an increase in productivity, while managing a large scale infrastructure. We'll see how we can extend tools such as Capistrano by using Chef API. We'll also learn how to manage large distributed clusters using an extension of Chef called Ironfan. We will also look at tools such as the Push Job server, which can be used for the orchestration of chef-client runs across a set of instances.
What you need for this book
All the code in this book is written/tested against Chef 12.x. A basic list of software required to run the code in this book is as follows:
Operating system: Mac OS X/Linux/Windows
Ruby: 1.9.3+
Chef: 12.x
Git
Editor: Atom/Sublime/Vi/Emacs/TextMate
Who this book is for
This is a book for anyone who is interested in learning about Chef. You are not required to have any prior experience with the use of Chef or any configuration management system. You aren't expected to have experience with programming in Ruby; however, some experience with the fundamentals of programming will definitely be helpful.
Conventions
In this book, you will find a number of styles of text that distinguish between different kinds of information. Here are some examples of these styles, and an explanation of their meaning.
Code words in text, database table names, folder names, filenames, file extensions, pathnames, dummy URLs, user input, and Twitter handles are shown as follows: Let's see what the knife command has to offer to us.
A block of code is set as follows:
knife[:aws_access_key_id] = AWS_ACCESS_KEY
knife[:aws_secret_access_key] = AWS_SECRET_KEY
When we wish to draw your attention to a particular part of a code block, the relevant lines or items are set in bold:
node_name 'mayank' client_key '~/keys/chef/mayank.pem'
validation_client_name 'chef-validator'
Any command-line input or output is written as follows:
$ knife search '*:*'
New terms and important words are shown in bold. Words that you see on the screen, in menus or dialog boxes for example, appear in the text like this: Once you are done with it, click on the Create Role button.
Note
Warnings or important notes appear in a box like this.
Tip
Tips and tricks appear like this.
Reader feedback
Feedback from our readers is always welcome. Let us know what you think about this book—what you liked or may have disliked. Reader feedback is important for us to develop titles that you really get the most out of.
To send us general feedback, simply send an e-mail to <[email protected]>, and mention the book title via the subject of your message.
If there is a topic that you have expertise in and you are interested in either writing or contributing to a book, see our author guide on www.packtpub.com/authors.
Customer support
Now that you are the proud owner of a Packt book, we have a number of things to help you to get the most from your purchase.
Downloading the example code
You can download the example code files for all Packt books you have purchased from your account at http://www.packtpub.com. If you purchased this book elsewhere, you can visit http://www.packtpub.com/support and register to have the files e-mailed directly to you.
Errata
Although we have taken every care to ensure the accuracy of our content, mistakes do happen. If you find a mistake in one of our books—maybe a mistake in the text or the code—we would be grateful if you would report this to us. By doing so, you can save other readers from frustration and help us improve subsequent versions of this book. If you find any errata, please report them by visiting http://www.packtpub.com/submit-errata, selecting your book, clicking on the errata submission form link, and entering the details of your errata. Once your errata are verified, your submission will be accepted and the errata will be uploaded on our website, or added to any list of existing errata, under the Errata section of that title. Any existing errata can be viewed by selecting your title from http://www.packtpub.com/support.
Piracy
Piracy of copyright material on the Internet is an ongoing problem across all media. At Packt, we take the protection of our copyright and licenses very seriously. If you come across any illegal copies of our works, in any form, on the Internet, please provide us with the location address or website name immediately so that we can pursue a remedy.
Please contact us at <[email protected]> with a link to the suspected pirated material.
We appreciate your help in protecting our authors, and our ability to bring you valuable content.
Questions
You can contact us at <[email protected]> if you are having a problem with any aspect of the book, and we will do our best to address it.
Chapter 1. Introduction to the Chef Ecosystem
Chef is a configuration management system written partly in Ruby and Erlang.
Before we begin our exciting journey towards becoming Chef masters, I think it would be prudent on our part to understand the underlying ecosystem.
The Chef ecosystem is primarily comprised of the following components:
WebUI: This is a Rails application that is used to view information about the Chef server over the Web.
ErChef: Prior to version 11.x, the Chef server API core (the code responsible for catering to requests by Knife or chef-client) was written in Ruby. However, since 11.x, this code has been rewritten in Erlang.
Bookshelf: This is used to store cookbooks content such as files, templates, and so on, that have been uploaded to chef-server as part of a cookbook version.
chef-solr: This is a wrapper around Apache Solr and is used to handle the REST API for indexing and search.
Rabbit MQ: This is used as a message queue for the Chef server. All items that are to be added to a search index repository are first added to a queue.
chef-expander: This is a piece of code that pulls messages from the RabbitMQ queue, processes them into a desired format, and finally posts them to Solr for indexing.
PostgreSQL: This is another major change since version 11.x. Earlier, CouchDB used to be the data storage; however, since version 11.x, PostgreSQL has become the data storage solution used by Chef.
chef-client: This is a Ruby application that runs on every machine that needs to be provisioned. It handles the task of authenticating with chef-server, registering nodes, synchronizing cookbooks, compiling resource collections, handling exceptions and notifications, and so on.
Knife: This is a Ruby application that provides an interface between a local chef repository and the Chef server.
The typical architecture of the Chef ecosystem can be understood by looking at the following figure:
Other than these components, we've chef-shell (shef), Ohai, and chef-solo that form an integral part of