SlideShare a Scribd company logo
Chef Fundamentals
training@getchef.com
Copyright (C) 2014 Chef Software, Inc.
Nathen Harvey
• Community Director
• Co-host of the Food Fight Show Podcast
• @nathenharvey
Webinar Objectives and Style
3
Multi-week Webinar Series
• After completing of this webinar series you will be
able to
• Automate common infrastructure tasks with Chef
• Describe Chef’s architecture
• Describe Chef’s various tools
• Apply Chef’s primitives to solve your problems
How to learn Chef
• You bring the domain expertise about your business
and infrastructure
• Chef provides a framework for automating your
infrastructure
• Our job is to work together to teach you how to
model and automate your infrastructure with Chef
Chef is a Language
• Learning Chef is like learning the basics of a
language
• 80% fluency will be reached very quickly
• The remaining 20% just takes practice
• The best way to learn Chef is to use Chef
Questions & Answers
• Ask questions in the chat
window when they come to
you
• We’ll answer as many
questions as we can at the
end of the session
Slides and Video
• This webinar is being recorded. The video will be
made available shortly after the session has ended.
• The slides used throughout this webinar will be
made available at the end of each webinar.
• Watch http://learnchef.com for updates.
Agenda
9
Topics
• Overview of Chef
• Workstation Setup
• Node Setup - Today
• Chef Resources and Recipes - Today
• Working with the Node object
• Common configuration with Data Bags
• Roles and Environments
• Community Cookbooks and Further Resources
Node Setup
Setup a Node to manage
11
Lesson Objectives
• After completing the lesson, you will be able to
• Login to the node in your Chef Training Lab
• Install Chef nodes using "knife bootstrap"
• Explain how knife bootstrap configures a node to
use the Organization created in the previous
section
• Explain the basic configuration needed to run chef-
client
12
Chef Infrastructure
Launch Chef Training Lab
14
Nodes
15
Nodes
• Nodes represent the servers in your infrastructure
these may be
• Physical or virtual servers
• Hardware that you own
• Compute instances in a public or private cloud
16
We Have No Nodes Yet
17
$ ssh root@<EXTERNAL_ADDRESS>
Lab - Login
The authenticity of host 'uvo1qrwls0jdgs3blvt.vm.cld.sr
(69.195.232.110)' can't be established.
RSA key fingerprint is d9:95:a3:b9:02:27:e9:cd:
74:e4:a2:34:23:f5:a6:8b.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'uvo1qrwls0jdgs3blvt.vm.cld.sr,
69.195.232.110' (RSA) to the list of known hosts.
chef@uvo1qrwls0jdgs3blvt.vm.cld.sr's password:
Last login: Mon Jan 6 16:26:24 2014 from
host86-145-117-53.range86-145.btcentralplus.com
[chef@CentOS63 ~]$
18
Checkpoint
• At this point you should have
• One virtual machine (VM) or server that you’ll use
for the lab exercises
• The IP address or public hostname
• An application for establishing an ssh connection
• 'sudo' or 'root' permissions on the VM
19
Chef Infrastructure
$ knife bootstrap <EXTERNAL_ADDRESS> -x chef -P chef -N "module2"
"Bootstrap" the Target Instance
Bootstrapping Chef on uvo1qrwls0jdgs3blvt.vm.cld.sr
...
...
uvo1qrwls0jdgs3blvt.vm.cld.sr Creating a new client identity for
module2 using the validator key.
uvo1qrwls0jdgs3blvt.vm.cld.sr resolving cookbooks for run list: []
uvo1qrwls0jdgs3blvt.vm.cld.sr Synchronizing Cookbooks:
uvo1qrwls0jdgs3blvt.vm.cld.sr Compiling Cookbooks...
uvo1qrwls0jdgs3blvt.vm.cld.sr [2014-01-28T11:03:14-05:00] WARN: Node
node2 has an empty run list.
uvo1qrwls0jdgs3blvt.vm.cld.sr Converging 0 resources
uvo1qrwls0jdgs3blvt.vm.cld.sr Chef Client finished, 0 resources updated
21
Node
knife bootstrap
22
Workstation
Chef
Server
Node
knife bootstrap
23
Workstation
knife bootstrap HOSTNAME -x root -P PASSWORD -N module2
Chef
Server
Node
knife bootstrap
24
Workstation
knife bootstrap HOSTNAME -x root -P PASSWORD -N module2
ssh/scp
chef_server_url
validation_client_name
validation_client_key
Chef
Server
Node
knife bootstrap
25
Workstation
knife bootstrap HOSTNAME -x root -P PASSWORD -N module2
ssh/scp
chef_server_url
validation_client_name
validation_client_key
install chef-client
configure chef-client
run chef-client
Chef
Server
Node
knife bootstrap
26
Workstation
knife bootstrap HOSTNAME -x root -P PASSWORD -N module2
ssh/scp
chef_server_url
validation_client_name
validation_client_key
register node
save node details
install chef-client
configure chef-client
run chef-client
Chef
Server
Node
knife bootstrap
27
Workstation
knife bootstrap HOSTNAME -x root -P PASSWORD -N module2
ssh/scp
chef_server_url
validation_client_name
validation_client_key
register node
save node details
install chef-client
configure chef-client
run chef-client
Chef
Server
Node
knife bootstrap
28
Workstation
knife bootstrap HOSTNAME -x root -P PASSWORD -N module2
ssh/scp
chef_server_url
validation_client_name
validation_client_key
register node
save node details
install chef-client
configure chef-client
run chef-client
Chef
Server
Verify Your Target Instance’s Chef-Client is Configured Properly
$ ssh root@<EXTERNAL_ADDRESS>
root@CentOS63:~$ ls /etc/chef
client.pem client.rb first-boot.json validation.pem
root@CentOS63:~$ which chef-client
/usr/bin/chef-client
29
View Node on Chef Server
• Click the 'Details' tab
View Node on Chef Server
31
• Click the 'Attributes' tab
Node
• The node is registered with Chef Server
• The Chef Server displays information about the node
• This information comes from Ohai - we'll see Ohai
later.....
32
Checkpoint
Chef Resources and Recipes
Writing an Apache cookbook
34
Lesson Objectives
• After completing the lesson, you will be able to
• Describe in detail what a cookbook is
• Create a new cookbook
• Explain what a recipe is
• Describe how to use the package, service, and template
resources
• Upload a cookbook to the Chef Server
• Explain what a run list is, and how to set it for a node via
knife
• Explain the output of a chef-client run
35
What is a cookbook?
• A cookbook is like a “package” for Chef recipes.
• It contains all the recipes, files, templates, libraries,
etc. required to configure a portion of your
infrastructure
• Typically they map 1:1 to a piece of software or
functionality.
36
The Problem and the Success Criteria
• The Problem: We need a web server configured to
serve up our home page.
• Success Criteria: We can see the homepage in a
web browser.
37
Desired state: our policy
• Apache web server should be installed
• Apache should be running and configured to start when
the machine boots
• Our home page should be displayed
• Please note in this course we're teaching Chef
primitives, not web server management
• This is probably not the Apache HTTP server
configuration you would use in production
38
$ knife cookbook create apache
Exercise: Create a new Cookbook
** Creating cookbook apache
** Creating README for cookbook: apache
** Creating CHANGELOG for cookbook: apache
** Creating metadata for cookbook: apache
39
$ ls -la cookbooks/apache
Exercise: Explore the cookbook
total 24
drwxr-xr-x 13 opscode opscode 442 Jan 24 21:25 .
drwxr-xr-x 5 opscode opscode 170 Jan 24 21:25 ..
-rw-r--r-- 1 opscode opscode 412 Jan 24 21:25 CHANGELOG.md
-rw-r--r-- 1 opscode opscode 1447 Jan 24 21:25 README.md
drwxr-xr-x 2 opscode opscode 68 Jan 24 21:25 attributes
drwxr-xr-x 2 opscode opscode 68 Jan 24 21:25 definitions
drwxr-xr-x 3 opscode opscode 102 Jan 24 21:25 files
drwxr-xr-x 2 opscode opscode 68 Jan 24 21:25 libraries
-rw-r--r-- 1 opscode opscode 276 Jan 24 21:25 metadata.rb
drwxr-xr-x 2 opscode opscode 68 Jan 24 21:25 providers
drwxr-xr-x 3 opscode opscode 102 Jan 24 21:25 recipes
drwxr-xr-x 2 opscode opscode 68 Jan 24 21:25 resources
drwxr-xr-x 3 opscode opscode 102 Jan 24 21:25 templates
40
Exercise: Open a project drawer if you're using Sublime Text
• If you're using Sublime, then File>Open the chef-repo
directory you created earlier
41
Access the
cookbook files
from the left
menu
OPEN IN EDITOR: cookbooks/apache/recipes/default.rb
#
# Cookbook Name:: apache
# Recipe:: default
#
# Copyright 2013, YOUR_COMPANY_NAME
#
# All rights reserved - Do Not Redistribute
#
Exercise: Edit the default recipe
42
SAVE FILE!
#
# Cookbook Name:: apache
# Recipe:: default
#
# Copyright 2013, YOUR_COMPANY_NAME
#
# All rights reserved - Do Not Redistribute
#
package "httpd" do
action :install
end
Exercise: Add a package resource to install Apache to the default
recipe
OPEN IN EDITOR: cookbooks/apache/recipes/default.rb
43
package "httpd" do
action :install
end
So the resource we just wrote...
44
package "httpd" do
action :install
end
So the resource we just wrote...
• Is a package resource
45
package "httpd" do
action :install
end
So the resource we just wrote...
• Is a package resource
• Whose name is httpd
46
package "httpd" do
action :install
end
So the resource we just wrote...
• Is a package resource
• Whose name is httpd
• With an install action
47
Notice we didn’t say how to install the package
• Resources are declarative - that means we say what
we want to have happen, rather than how
• Resources take action through Providers - providers
perform the how
• Chef uses the platform the node is running to
determine the correct provider for a resource
48
Package Resource
package "git"
{
yum install git
apt-get install git
pacman sync git
pkg_add -r git
Providers aredetermined
by node's platform
49
SAVE FILE!
...
# All rights reserved - Do Not Redistribute
#
package "httpd" do
action :install
end
service "httpd" do
action [ :enable, :start ]
end
Exercise: Add a service resource to ensure the service is started
and enabled at boot
OPEN IN EDITOR: cookbooks/apache/recipes/default.rb
50
service "httpd" do
action [ :enable, :start ]
end
So the resource we just wrote...
51
service "httpd" do
action [ :enable, :start ]
end
So the resource we just wrote...
• Is a service resource
52
service "httpd" do
action [ :enable, :start ]
end
So the resource we just wrote...
• Is a service resource
• Whose name is httpd
53
service "httpd" do
action [ :enable, :start ]
end
So the resource we just wrote...
• Is a service resource
• Whose name is httpd
• With two actions:
• enable
• start
54
• Body Level One
• Body Level Two
• Body Level Three
• Body Level Four
• Body Level Five
Order Matters
package "haproxy" do
action :install
end
template "/etc/haproxy/haproxy.cfg" do
source "haproxy.cfg.erb"
owner "root"
group "root"
mode "0644"
notifies :restart, "service[haproxy]"
end
service "haproxy" do
supports :restart => :true
action [:enable, :start]
end
• Resources are
executed in order
1st
2nd
3rd
55
SAVE FILE!
...
service "httpd" do
action [ :enable, :start ]
end
template "/var/www/html/index.html" do
source "index.html.erb"
mode "0644"
end
Exercise: Add a cookbook_file resource to copy the home page in
place
OPEN IN EDITOR: cookbooks/apache/recipes/default.rb
56
So the resource we just wrote...
template "/var/www/html/index.html" do
source "index.html.erb"
mode "0644"
end
57
So the resource we just wrote...
• Is a template resource
template "/var/www/html/index.html" do
source "index.html.erb"
mode "0644"
end
58
So the resource we just wrote...
• Is a template resource
• Whose name is:
/var/www/html/index.html
template "/var/www/html/index.html" do
source "index.html.erb"
mode "0644"
end
59
So the resource we just wrote...
• Is a template resource
• Whose name is:
/var/www/html/index.html
• With two parameters:
• source of
index.html.erb
• mode of “0644”
template "/var/www/html/index.html" do
source "index.html.erb"
mode "0644"
end
60
Full contents of the apache recipe
#
# Cookbook Name:: apache
# Recipe:: default
#
# Copyright 2013, YOUR_COMPANY_NAME
#
# All rights reserved - Do Not Redistribute
#
package "httpd" do
action :install
end
service "httpd" do
action [ :enable, :start ]
end
template "/var/www/html/index.html" do
source "index.html.erb"
mode "0644"
end
61
OPEN IN EDITOR:
SAVE FILE!
cookbooks/apache/templates/default/index.html.erb
<h1>Hello, world!</h1>
Exercise: Add index.html to your cookbook’s files/default directory
62
$ knife cookbook upload apache
Exercise: Upload the cookbook
Uploading apache [0.1.0]
Uploaded 1 cookbook.
63
Upload a cookbook
knife cookbook upload apache
Upload a cookbook
knife cookbook upload apache
Upload a cookbook
knife cookbook upload apache
Upload a cookbook
knife cookbook upload apache
The Run List
• The Run List is the ordered set of recipes and roles
that the Chef Client will execute on a node
• Recipes are specified by “recipe[name]”
68
$ knife node run_list add module2 "recipe[apache]"
Exercise: Add apache recipe to test node’s run list
module2:
run_list: recipe[apache]
69
Upload a cookbook
knife node run_list add module2 “recipe[apache]”
Upload a cookbook
knife node run_list add module2 “recipe[apache]”
recipe[apache]
Upload a cookbook
knife node run_list add module2 “recipe[apache]”
recipe[apache]
Upload a cookbook
knife node run_list add module2 “recipe[apache]”
recipe[apache]
Upload a cookbook
knife node run_list add module2 “recipe[apache]”
root@CentOS63:~$ sudo chef-client
Exercise: Run Chef Client
Starting Chef Client, version 11.10.4
resolving cookbooks for run list: ["apache"]
Synchronizing Cookbooks:
- apache
Compiling Cookbooks...
Converging 3 resources
Recipe: apache::default
* package[httpd] action install
- install version 2.2.15-29.el6.centos of package httpd
* service[httpd] action enable
- enable service service[httpd]
* service[httpd] action start
- start service service[httpd]
* template[/var/www/html/index.html] action create
- create new file /var/www/html/index.html
- update content in file /var/www/html/index.html from none to 17d291
75
Exercise: Verify that the home page works
• Open a web browser
• Type in the the URL for your test node
76
Congratulate yourself!
• You have just written your first Chef cookbook!
• (clap!)
77
Run List
Node
Enterprise
Chef chef-client
What policy should I follow?
78
Run List
Node
Enterprise
Chef chef-client
What policy should I follow?
"recipe[apache]"
79
Run List
Node
Enterprise
Chef chef-client
What policy should I follow?
"recipe[apache]"
80
Run List
Enterprise
Chef chef-client
What policy should I follow?
"recipe[apache]"
81
Run List
Enterprise
Chef chef-client
What policy should I follow?
"recipe[apache]"
82
Chef Fundamentals
Webinar Series
Six Week Series
• Module 1 - Overview of Chef
• Today - Node Setup, Chef Resources & Recipes
• June 3 - Working with the Node object
• June 10 - Common configuration data with Databags
• June 17 - Using Roles and Environments
• June 24 - Community Cookbooks and Further Resources
• * Topics subject to change, schedule unlikely to change
Sign-up for Webinar
• http://pages.getchef.com/
cheffundamentalsseries.html
Additional Resources
• Chef Fundamentals Webinar Series
• https://www.youtube.com/watch?
v=S5lHUpzoCYo&list=PL11cZfNdwNyPnZA9D1MbVqldGuOWqbum
Z
• Discussion group for webinar participants
• https://groups.google.com/d/forum/learnchef-fundamentals-webinar
102
Additional Resources
• Learn Chef
• http://learnchef.com
• Documentation
• http://docs.opscode.com
103

More Related Content

Node setup, resource, and recipes - Fundamentals Webinar Series Part 2

  • 2. Nathen Harvey • Community Director • Co-host of the Food Fight Show Podcast • @nathenharvey
  • 4. Multi-week Webinar Series • After completing of this webinar series you will be able to • Automate common infrastructure tasks with Chef • Describe Chef’s architecture • Describe Chef’s various tools • Apply Chef’s primitives to solve your problems
  • 5. How to learn Chef • You bring the domain expertise about your business and infrastructure • Chef provides a framework for automating your infrastructure • Our job is to work together to teach you how to model and automate your infrastructure with Chef
  • 6. Chef is a Language • Learning Chef is like learning the basics of a language • 80% fluency will be reached very quickly • The remaining 20% just takes practice • The best way to learn Chef is to use Chef
  • 7. Questions & Answers • Ask questions in the chat window when they come to you • We’ll answer as many questions as we can at the end of the session
  • 8. Slides and Video • This webinar is being recorded. The video will be made available shortly after the session has ended. • The slides used throughout this webinar will be made available at the end of each webinar. • Watch http://learnchef.com for updates.
  • 10. Topics • Overview of Chef • Workstation Setup • Node Setup - Today • Chef Resources and Recipes - Today • Working with the Node object • Common configuration with Data Bags • Roles and Environments • Community Cookbooks and Further Resources
  • 11. Node Setup Setup a Node to manage 11
  • 12. Lesson Objectives • After completing the lesson, you will be able to • Login to the node in your Chef Training Lab • Install Chef nodes using "knife bootstrap" • Explain how knife bootstrap configures a node to use the Organization created in the previous section • Explain the basic configuration needed to run chef- client 12
  • 16. Nodes • Nodes represent the servers in your infrastructure these may be • Physical or virtual servers • Hardware that you own • Compute instances in a public or private cloud 16
  • 17. We Have No Nodes Yet 17
  • 18. $ ssh root@<EXTERNAL_ADDRESS> Lab - Login The authenticity of host 'uvo1qrwls0jdgs3blvt.vm.cld.sr (69.195.232.110)' can't be established. RSA key fingerprint is d9:95:a3:b9:02:27:e9:cd: 74:e4:a2:34:23:f5:a6:8b. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'uvo1qrwls0jdgs3blvt.vm.cld.sr, 69.195.232.110' (RSA) to the list of known hosts. chef@uvo1qrwls0jdgs3blvt.vm.cld.sr's password: Last login: Mon Jan 6 16:26:24 2014 from host86-145-117-53.range86-145.btcentralplus.com [chef@CentOS63 ~]$ 18
  • 19. Checkpoint • At this point you should have • One virtual machine (VM) or server that you’ll use for the lab exercises • The IP address or public hostname • An application for establishing an ssh connection • 'sudo' or 'root' permissions on the VM 19
  • 21. $ knife bootstrap <EXTERNAL_ADDRESS> -x chef -P chef -N "module2" "Bootstrap" the Target Instance Bootstrapping Chef on uvo1qrwls0jdgs3blvt.vm.cld.sr ... ... uvo1qrwls0jdgs3blvt.vm.cld.sr Creating a new client identity for module2 using the validator key. uvo1qrwls0jdgs3blvt.vm.cld.sr resolving cookbooks for run list: [] uvo1qrwls0jdgs3blvt.vm.cld.sr Synchronizing Cookbooks: uvo1qrwls0jdgs3blvt.vm.cld.sr Compiling Cookbooks... uvo1qrwls0jdgs3blvt.vm.cld.sr [2014-01-28T11:03:14-05:00] WARN: Node node2 has an empty run list. uvo1qrwls0jdgs3blvt.vm.cld.sr Converging 0 resources uvo1qrwls0jdgs3blvt.vm.cld.sr Chef Client finished, 0 resources updated 21
  • 23. Node knife bootstrap 23 Workstation knife bootstrap HOSTNAME -x root -P PASSWORD -N module2 Chef Server
  • 24. Node knife bootstrap 24 Workstation knife bootstrap HOSTNAME -x root -P PASSWORD -N module2 ssh/scp chef_server_url validation_client_name validation_client_key Chef Server
  • 25. Node knife bootstrap 25 Workstation knife bootstrap HOSTNAME -x root -P PASSWORD -N module2 ssh/scp chef_server_url validation_client_name validation_client_key install chef-client configure chef-client run chef-client Chef Server
  • 26. Node knife bootstrap 26 Workstation knife bootstrap HOSTNAME -x root -P PASSWORD -N module2 ssh/scp chef_server_url validation_client_name validation_client_key register node save node details install chef-client configure chef-client run chef-client Chef Server
  • 27. Node knife bootstrap 27 Workstation knife bootstrap HOSTNAME -x root -P PASSWORD -N module2 ssh/scp chef_server_url validation_client_name validation_client_key register node save node details install chef-client configure chef-client run chef-client Chef Server
  • 28. Node knife bootstrap 28 Workstation knife bootstrap HOSTNAME -x root -P PASSWORD -N module2 ssh/scp chef_server_url validation_client_name validation_client_key register node save node details install chef-client configure chef-client run chef-client Chef Server
  • 29. Verify Your Target Instance’s Chef-Client is Configured Properly $ ssh root@<EXTERNAL_ADDRESS> root@CentOS63:~$ ls /etc/chef client.pem client.rb first-boot.json validation.pem root@CentOS63:~$ which chef-client /usr/bin/chef-client 29
  • 30. View Node on Chef Server • Click the 'Details' tab
  • 31. View Node on Chef Server 31 • Click the 'Attributes' tab
  • 32. Node • The node is registered with Chef Server • The Chef Server displays information about the node • This information comes from Ohai - we'll see Ohai later..... 32
  • 34. Chef Resources and Recipes Writing an Apache cookbook 34
  • 35. Lesson Objectives • After completing the lesson, you will be able to • Describe in detail what a cookbook is • Create a new cookbook • Explain what a recipe is • Describe how to use the package, service, and template resources • Upload a cookbook to the Chef Server • Explain what a run list is, and how to set it for a node via knife • Explain the output of a chef-client run 35
  • 36. What is a cookbook? • A cookbook is like a “package” for Chef recipes. • It contains all the recipes, files, templates, libraries, etc. required to configure a portion of your infrastructure • Typically they map 1:1 to a piece of software or functionality. 36
  • 37. The Problem and the Success Criteria • The Problem: We need a web server configured to serve up our home page. • Success Criteria: We can see the homepage in a web browser. 37
  • 38. Desired state: our policy • Apache web server should be installed • Apache should be running and configured to start when the machine boots • Our home page should be displayed • Please note in this course we're teaching Chef primitives, not web server management • This is probably not the Apache HTTP server configuration you would use in production 38
  • 39. $ knife cookbook create apache Exercise: Create a new Cookbook ** Creating cookbook apache ** Creating README for cookbook: apache ** Creating CHANGELOG for cookbook: apache ** Creating metadata for cookbook: apache 39
  • 40. $ ls -la cookbooks/apache Exercise: Explore the cookbook total 24 drwxr-xr-x 13 opscode opscode 442 Jan 24 21:25 . drwxr-xr-x 5 opscode opscode 170 Jan 24 21:25 .. -rw-r--r-- 1 opscode opscode 412 Jan 24 21:25 CHANGELOG.md -rw-r--r-- 1 opscode opscode 1447 Jan 24 21:25 README.md drwxr-xr-x 2 opscode opscode 68 Jan 24 21:25 attributes drwxr-xr-x 2 opscode opscode 68 Jan 24 21:25 definitions drwxr-xr-x 3 opscode opscode 102 Jan 24 21:25 files drwxr-xr-x 2 opscode opscode 68 Jan 24 21:25 libraries -rw-r--r-- 1 opscode opscode 276 Jan 24 21:25 metadata.rb drwxr-xr-x 2 opscode opscode 68 Jan 24 21:25 providers drwxr-xr-x 3 opscode opscode 102 Jan 24 21:25 recipes drwxr-xr-x 2 opscode opscode 68 Jan 24 21:25 resources drwxr-xr-x 3 opscode opscode 102 Jan 24 21:25 templates 40
  • 41. Exercise: Open a project drawer if you're using Sublime Text • If you're using Sublime, then File>Open the chef-repo directory you created earlier 41 Access the cookbook files from the left menu
  • 42. OPEN IN EDITOR: cookbooks/apache/recipes/default.rb # # Cookbook Name:: apache # Recipe:: default # # Copyright 2013, YOUR_COMPANY_NAME # # All rights reserved - Do Not Redistribute # Exercise: Edit the default recipe 42
  • 43. SAVE FILE! # # Cookbook Name:: apache # Recipe:: default # # Copyright 2013, YOUR_COMPANY_NAME # # All rights reserved - Do Not Redistribute # package "httpd" do action :install end Exercise: Add a package resource to install Apache to the default recipe OPEN IN EDITOR: cookbooks/apache/recipes/default.rb 43
  • 44. package "httpd" do action :install end So the resource we just wrote... 44
  • 45. package "httpd" do action :install end So the resource we just wrote... • Is a package resource 45
  • 46. package "httpd" do action :install end So the resource we just wrote... • Is a package resource • Whose name is httpd 46
  • 47. package "httpd" do action :install end So the resource we just wrote... • Is a package resource • Whose name is httpd • With an install action 47
  • 48. Notice we didn’t say how to install the package • Resources are declarative - that means we say what we want to have happen, rather than how • Resources take action through Providers - providers perform the how • Chef uses the platform the node is running to determine the correct provider for a resource 48
  • 49. Package Resource package "git" { yum install git apt-get install git pacman sync git pkg_add -r git Providers aredetermined by node's platform 49
  • 50. SAVE FILE! ... # All rights reserved - Do Not Redistribute # package "httpd" do action :install end service "httpd" do action [ :enable, :start ] end Exercise: Add a service resource to ensure the service is started and enabled at boot OPEN IN EDITOR: cookbooks/apache/recipes/default.rb 50
  • 51. service "httpd" do action [ :enable, :start ] end So the resource we just wrote... 51
  • 52. service "httpd" do action [ :enable, :start ] end So the resource we just wrote... • Is a service resource 52
  • 53. service "httpd" do action [ :enable, :start ] end So the resource we just wrote... • Is a service resource • Whose name is httpd 53
  • 54. service "httpd" do action [ :enable, :start ] end So the resource we just wrote... • Is a service resource • Whose name is httpd • With two actions: • enable • start 54
  • 55. • Body Level One • Body Level Two • Body Level Three • Body Level Four • Body Level Five Order Matters package "haproxy" do action :install end template "/etc/haproxy/haproxy.cfg" do source "haproxy.cfg.erb" owner "root" group "root" mode "0644" notifies :restart, "service[haproxy]" end service "haproxy" do supports :restart => :true action [:enable, :start] end • Resources are executed in order 1st 2nd 3rd 55
  • 56. SAVE FILE! ... service "httpd" do action [ :enable, :start ] end template "/var/www/html/index.html" do source "index.html.erb" mode "0644" end Exercise: Add a cookbook_file resource to copy the home page in place OPEN IN EDITOR: cookbooks/apache/recipes/default.rb 56
  • 57. So the resource we just wrote... template "/var/www/html/index.html" do source "index.html.erb" mode "0644" end 57
  • 58. So the resource we just wrote... • Is a template resource template "/var/www/html/index.html" do source "index.html.erb" mode "0644" end 58
  • 59. So the resource we just wrote... • Is a template resource • Whose name is: /var/www/html/index.html template "/var/www/html/index.html" do source "index.html.erb" mode "0644" end 59
  • 60. So the resource we just wrote... • Is a template resource • Whose name is: /var/www/html/index.html • With two parameters: • source of index.html.erb • mode of “0644” template "/var/www/html/index.html" do source "index.html.erb" mode "0644" end 60
  • 61. Full contents of the apache recipe # # Cookbook Name:: apache # Recipe:: default # # Copyright 2013, YOUR_COMPANY_NAME # # All rights reserved - Do Not Redistribute # package "httpd" do action :install end service "httpd" do action [ :enable, :start ] end template "/var/www/html/index.html" do source "index.html.erb" mode "0644" end 61
  • 62. OPEN IN EDITOR: SAVE FILE! cookbooks/apache/templates/default/index.html.erb <h1>Hello, world!</h1> Exercise: Add index.html to your cookbook’s files/default directory 62
  • 63. $ knife cookbook upload apache Exercise: Upload the cookbook Uploading apache [0.1.0] Uploaded 1 cookbook. 63
  • 64. Upload a cookbook knife cookbook upload apache
  • 65. Upload a cookbook knife cookbook upload apache
  • 66. Upload a cookbook knife cookbook upload apache
  • 67. Upload a cookbook knife cookbook upload apache
  • 68. The Run List • The Run List is the ordered set of recipes and roles that the Chef Client will execute on a node • Recipes are specified by “recipe[name]” 68
  • 69. $ knife node run_list add module2 "recipe[apache]" Exercise: Add apache recipe to test node’s run list module2: run_list: recipe[apache] 69
  • 70. Upload a cookbook knife node run_list add module2 “recipe[apache]”
  • 71. Upload a cookbook knife node run_list add module2 “recipe[apache]” recipe[apache]
  • 72. Upload a cookbook knife node run_list add module2 “recipe[apache]” recipe[apache]
  • 73. Upload a cookbook knife node run_list add module2 “recipe[apache]” recipe[apache]
  • 74. Upload a cookbook knife node run_list add module2 “recipe[apache]”
  • 75. root@CentOS63:~$ sudo chef-client Exercise: Run Chef Client Starting Chef Client, version 11.10.4 resolving cookbooks for run list: ["apache"] Synchronizing Cookbooks: - apache Compiling Cookbooks... Converging 3 resources Recipe: apache::default * package[httpd] action install - install version 2.2.15-29.el6.centos of package httpd * service[httpd] action enable - enable service service[httpd] * service[httpd] action start - start service service[httpd] * template[/var/www/html/index.html] action create - create new file /var/www/html/index.html - update content in file /var/www/html/index.html from none to 17d291 75
  • 76. Exercise: Verify that the home page works • Open a web browser • Type in the the URL for your test node 76
  • 77. Congratulate yourself! • You have just written your first Chef cookbook! • (clap!) 77
  • 79. Run List Node Enterprise Chef chef-client What policy should I follow? "recipe[apache]" 79
  • 80. Run List Node Enterprise Chef chef-client What policy should I follow? "recipe[apache]" 80
  • 81. Run List Enterprise Chef chef-client What policy should I follow? "recipe[apache]" 81
  • 82. Run List Enterprise Chef chef-client What policy should I follow? "recipe[apache]" 82
  • 84. Six Week Series • Module 1 - Overview of Chef • Today - Node Setup, Chef Resources & Recipes • June 3 - Working with the Node object • June 10 - Common configuration data with Databags • June 17 - Using Roles and Environments • June 24 - Community Cookbooks and Further Resources • * Topics subject to change, schedule unlikely to change
  • 85. Sign-up for Webinar • http://pages.getchef.com/ cheffundamentalsseries.html
  • 86. Additional Resources • Chef Fundamentals Webinar Series • https://www.youtube.com/watch? v=S5lHUpzoCYo&list=PL11cZfNdwNyPnZA9D1MbVqldGuOWqbum Z • Discussion group for webinar participants • https://groups.google.com/d/forum/learnchef-fundamentals-webinar 102
  • 87. Additional Resources • Learn Chef • http://learnchef.com • Documentation • http://docs.opscode.com 103