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.
From the beginning: Overview (long)
Using Ruby: Just Enough Ruby for Chef
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.
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) [O’Reilly] | Customizing Chef (Getting the Most Out of Your Infrastructure Automation) | Learning Chef [Packt Publishing] | Chef Essentials | Managing Windows Servers with Chef
Knife: About Knife | Common Options | Working with Knife — Commands: bootstrap | client | configure | cookbook | cookbook site | data bag | delete | deps | diff | download | edit | environment | exec | index rebuild | list | node | raw | recipe list | role | search | serve | show | ssh | ssl check | ssl fetch | status | tag | upload | user | xargs — Single Page: Knife Reference | Knife Quick Reference (image)
Plugins: About Plugins | Common Options | Custom Plugins | Authenticated Requests — Commands: azure | bluebox | ec2 | eucalyptus | google | hp | linode | openstack | rackspace | terremark | windows — Single Page: Knife Plugins Reference
The Chef development kit 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
The Chef server acts as a hub for configuration data. The Chef server stores cookbooks, the policies that are applied to nodes, and metadata that describes each registered node that is being managed by the chef-client. Nodes use the chef-client to ask the Chef server for configuration details, such as recipes, templates, and file distributions. The chef-client then does as much of the configuration work as possible on the nodes themselves (and not on the Chef server). This scalable approach distributes the configuration effort throughout the organization.
Manage Server: Runbook (all manage tasks in a single topic) — Shorter topics: Backup and Restore | Firewalls and Ports | High Availability | Logs | Monitor | Organizations, Groups, and Users | Security | Services | Performance Tuning
The server acts as a hub for all of the data needed by the chef-client while it configures a node:
Chef Analytics is an add-on for the Chef server that provides visibility into what is happening on the server. It runs on separate hardware from the Chef server and consists of several components, initially built around Chef Actions.
The Recipe DSL: About the Recipe DSL — Methods: 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 Methods — Single Page: Recipe DSL
Resources: About Resources | Common Functionality — Resources: apt_package | bash | batch | breakpoint | chef_gem | chef_handler | cookbook_file | cron | deploy | directory | dpkg_package | dsc_script | 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_package — Single Page: Resources and Providers
Community Resources (LWRPs): About LWRPs | Common Functionality — LWRPs: 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