Chef

Table Of Contents

All about Chef ...

Chef is a systems and cloud infrastructure automation framework that makes it easy to deploy servers and applications to any physical, virtual, or cloud location, no matter the size of the infrastructure. Each organization is comprised of one (or more) workstations, a single server, and every node that will be configured and maintained by the chef-client. Cookbooks (and recipes) are used to tell the chef-client how each node in your organization should be configured. The chef-client (which is installed on every node) does the actual configuration.

The Community

The community is one of the best features of Chef because it is populated by all of the people who use Chef. This also means that the community is a great place to bounce ideas around, ask questions, and to find ways to help make Chef better.

Workflow: Berkshelf | Librarian | Spiceweasel

Development tools: test-kitchen | Food Critic | cucumber-chef | chef-workflow | chefspec | yard-chef | Supermarket | Jenkins Plugin | chef-zero

Discussion: Guidelines | lists.opscode.com | Food Fight Show

Books about Chef: Test-Driven Infrastructure with Chef, 2nd Edition | Instant Chef Starter | Chef Infrastructure Automation Cookbook | Learning Chef (A Guide to Configuration Management and Automation) – Early Release | Customizing Chef (Getting the Most Out of Your Infrastructure Automation) – Early Release

Plugins: chef-client | Knife | Ohai | Handlers | Ridley

Chef for OpenStack: Overview | knife-openstack

Contributions: Contribute to Open Source Chef | Contribute to the Documentation | Style Guide

The Workstation

The Basics: About the Workstation | The chef-repo | Knife | Debug Recipes

Install: Install the chef-client on a Workstation | Bootstrap a Node | Create and Sync the chef-repo

Knife: About Knife | Common Options | Working with KnifeCommands: bootstrap | client | configure | cookbook | cookbook site | data bag | delete | deps | diff | download | edit | environment | exec | index rebuild | list | node | raw | recipe list | role | search | show | ssh | ssl check | ssl fetch | status | tag | upload | user | xargsSingle Page: Knife Reference | Knife Quick Reference (image)

Plugins: About Plugins | Common Options | Custom Plugins | Authenticated RequestsCommands: azure | bluebox | ec2 | eucalyptus | google | hp | linode | openstack | rackspace | terremark | windowsSingle Page: Knife Plugins Reference

Settings: knife.rb | metadata.rb

Tools: chef-shell (executable) | chef-apply (executable)

ChefDK

The ChefDK defines a common workflow for cookbook development, including unit and integration testing, identifying lint-like behavior, dedicated tooling, and more:

Install: Install the chef-dk

Components: Kitchen | ChefSpec | Foodcritic | Berkshelf

Tools: kitchen (executable) | chef (executable)

The Server

The Chef server is a centralized location where all of the objects needed by Chef are stored, including data that has been uploaded from the chef-repo, data that is needed by the chef-client while it configures nodes, and data that is uploaded to the Chef server by the chef-client at the conclusion of every chef-client run.

Server Essentials

The server acts as a hub for all of the data needed by the chef-client while it configures a node:

Enterprise Chef

Enterprise Chef is a Chef server that can be deployed behind the firewall or be accessed from the hosted platform. Enterprise Chef includes all of the core functionality included in the Open Source Chef version, but includes additional functionality like Reporting and built-in support for high availability deployment scenarios.

Deployment Scenarios: Standalone | Scaled Back End | Scaled Front End | Scaled Front and Back Ends

Install: Prerequisites | Install the Enterprise Chef Server | Download the chef-client using the Omnitruck API

Install Scenarios: Standalone | Scaled Back End | Scaled Front End | Scaled Front and Back Ends | Migrate to Enterprise Chef from Open Source Chef | Upgrade for Standalone | Upgrade for High Availability

Configuration Options: Active Directory / LDAP | Create Users | Create Organizations

Add-ons: Chef Manage | Reporting | Push Jobs

Install Add-ons: Chef Manage | Reporting | Push Jobs

Manage Server: Backup and Restore | Firewalls and Ports | High Availability | LDAP | Logs | Monitor | Organizations, Groups, and Users | Security | Services | Performance Tuning | Users

Chef Manager Web User Interface: Clients | Cookbooks | Data Bags | Environments | Nodes | Reports | Roles

Settings and Tools: private-chef.rb | private-chef-ctl | manage.rb

Open Source Chef

Open Source Chef is the open source Chef server that shares many of the same capabilities as the Enterprise Chef.

Install: Install the Open Source Chef Server | Scenario: Install the Open Source Chef Server on a Virtual Machine | Download the Open Source Chef Server with Omnitruck API | Upgrade

Settings and Tools: chef-server.rb | chef-server-ctl

Common Features

The following features are available in both Enterprise Chef and Open Source Chef:

The Node Object: About Node Objects | Run-lists | Deep Merge

Search: About Search

Security: Authentication | Authorization | Headers and Endpoints | Private Keys

Policy: About Policy | Data Bags | Environments | Roles

APIs: Cookbooks Site API | Chef Server API

Chef Analytics

Chef Analytics is an add-on for Enterprise Chef that provides visibility into what is happening on the server. It runs on separate hardware from Enterprise Chef and consists of several components, initially Chef Action Logs.

Components: Chef Actions

Install: Prerequisites | Install Chef Analytics

Settings and Tools: opscode-analytics.rb | opscode-analytics-ctl

Cookbooks

The Basics: About Cookbooks | About Recipes | About Attribute Files | Handlers | Popular Cookbooks

Custom Resources: About Custom Resources | Lightweight Resources | Lightweight Providers w/Chef Resources | Lightweight Providers w/Custom Ruby

Other Cookbook Components: About Definitions | About Files | About Libraries | About Cookbook Metadata | About Templates | About Versions

The Recipe DSL: About the Recipe DSLMethods: attribute? | cookbook_name | data_bag | data_bag_item | platform? | platform_family? | recipe_name | registry_data_exists? | registry_get_subkeys | registry_get_values | registry_has_subkeys? | registry_key_exists? | registry_value_exists? | resources | search | tag | tagged? | untag | value_for_platform | value_for_platform_family | Windows Platform Helper MethodsSingle Page: Recipe DSL

Resources: About Resources | Common FunctionalityResources: apt_package | bash | batch | breakpoint | chef_gem | chef_handler | cookbook_file | cron | deploy | directory | dpkg_package | easy_install_package | env | erl_call | execute | file | gem_package | git | group | http_request | ifconfig | link | log | mdadm | mount | ohai | package | powershell_script | registry_key | remote_directory | remote_file | route | rpm_package | ruby_block | script | service | subversion | template | user | yum_package | windows_packageSingle Page: Resources and Providers

Community Resources (LWRPs): About LWRPs | Common FunctionalityLWRPs: apt | aws | bluepill | chef-client | daemontools | djbdns | dmg | dynect | firewall | freebsd | gunicorn | homebrew | iis | junos | lvm | maven | netdev | nginx | omnibus | openssh | php | powershell | rabbitmq | sudo | transmission | webpi | windows | yum