Chef is an open-source systems integration framework built specifically for automating the cloud.
Chef is like unit tests for your servers.
It can safely be run multiple times. Once you develop your configuration, your machines will apply the configuration and Chef will only make any changes to the system if the system state does not match the configured state.
Knife is a powerful command-line interface (CLI) that comes with Chef.
Example for Chef Solo:
gem install knife-solo
Main commands:
Kitchen is a place where you build and store recipes. And cook!
knife kitchen mychefrepo
The kitchen command simply takes a name of the directory to store the kitchen structure.
mykitchen/ ├── cookbooks ├── data_bags ├── nodes ├── roles ├── site-cookbooks └── solo.rb
knife prepare ubuntu@10.0.0.201
knife bootstrap --template-file bootstrap.centos.erb -u root 10.0.0.201 echo '{"run_list":[]}' > nodes/10.0.0.201.json
knife cook ubuntu@10.0.0.201
gem install librarian librarian-chef init librarian-chef install
$ cat Cheffile #!/usr/bin/env ruby site 'http://community.opscode.com/api/v1' cookbook 'nginx', :git => 'git://github.com/opscode-cookbooks/nginx.git' cookbook 'rvm' cookbook 'ruby_build' cookbook 'rbenv', :git => 'https://github.com/fnichol/chef-rbenv' cookbook 'postgresql', :git => 'git://github.com/opscode-cookbooks/postgresql.git'
gem install berkshelf berks install
$ cat Berksfile #!/usr/bin/env ruby site :opscode cookbook 'mysql' cookbook 'nginx', '~> 0.101.5'
├── CHANGELOG.md ├── CONTRIBUTING ├── Gemfile ├── LICENSE ├── README.md ├── attributes ├── definitions ├── files ├── metadata.rb ├── recipes ├── templates └── test
template "#{node[:nginx][:dir]}/sites-available/#{node[:app][:name]}.conf" do source "nginx.conf.erb" mode "0644" end nginx_site "#{node[:app][:name]}.conf"
$ cat nginx.conf.erb upstream prod_unicorn { server unix:<%= node[:app][:web_dir] %>/shared/tmp/sockets/unicorn.sock fail_timeout=0; } server { listen 80 default; ...
"run_list": [ "nginx[source]" ]
or
include_recipe "nginx::source"
├── recipes │ └── default.rb └── templates └── default ├── database.yml.erb ├── nginx.conf.erb └── unicorn.rb.erb
You can setup Chef Server by Chef Solo:
github.com/opscode-cookbooks/chef-server
Contact information