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.
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) – Early Release | Customizing Chef (Getting the Most Out of Your Infrastructure Automation) – Early Release
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 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
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.
The server acts as a hub for all of the data needed by the chef-client while it configures a node:
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.
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
Open Source Chef is the open source Chef server that shares many of the same capabilities as the Enterprise Chef.
The following features are available in both Enterprise Chef and Open Source Chef:
Search: About Search
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 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 | 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