4. Chef Components
● Chef Client
○ Public/Private key
○ Machines/Humans
● Chef Node
● Chef Indexer
○ RabbitMQ
○ Chef Expander/SOLR
● Chef Server
○ CouchDB
○ Web Interface
○ REST API
● Chef Solo
○ Vagrant - development and tests
5. Cooking with Chef
● Nodes
○ Roles
○ Cookbooks
○ Recipes
○ Resources
● Environment
● Data bags (JSON)
7. Anatomy of a Chef Run
● Build, Register, and Authenticate the Node
○ OHAI
○ chef-validator
○ client.pem
● Synchronize Cookbooks
○ Libraries
○ Attributes
○ Definitions
○ Recipes
8. Anatomy of a Chef Run
● Compile Resource Collection
○ Load Libraries
○ Load Attributes
○ Load Definitions
○ Load Recipes
● Configure Node
○ Converge
○ Save Node
○ Run Notifications
12. Cookbooks
● Version
● Library
○ Ruby code
● Metadata
○ name
○ version
○ depends/conflicts/replaces
○ supports
● Templates
○ ERB
13. Cookbooks
● Attributes
○ override
○ normal
○ default
● Definitions
● File Distribution
● Recipes
○ include
○ search
○ data bags
○ tag
14. Managing Chef
● Knife
○ Bootstrap
○ Exec
■ SSH
○ Plugin
■ Windows
■ knife-windows
■ Windows Remote Management
■ PowerShell
■ EC2/Rackspace/Slicehost/Terremark
● Shef
○ irb
15. Workflow
● Environments
● Freeze
● Metadata version
Development
1. Bump the version number as appropriate
2. Hack
3. Upload and test
4. Repeat 2 and 3 as necessary
Production
1. Upload and freeze your cookbooks
2. Modify your environment to prefer the new version you uploaded
3. Upload the updated environment
4. Deploy
16. Links
Opscode Platform "The first five nodes are free!"
Opscode Wiki
A Brief Chef Tutorial
Example Cookbooks:
http://github.com/opscode/cookbooks
http://github.com/37signals/37s_cookbooks
http://github.com/engineyard/ey-cloud-recipes