Node setup, resource, and recipes - Fundamentals Webinar Series Part 2
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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