SlideShare a Scribd company logo
Set Up a Node &
Write a Cookbook
Chef Fundamentals Webinar Series
training@opscode.com
Nathen Harvey
• Technical Community Manager at Opscode
• Co-host of the Food Fight Show Podcast
• @nathenharvey
• nharvey@opscode.com
Node Setup
Setup a Node to manage
Lesson Objectives
• After completing the lesson, you will be able to
• 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 chefclient
Nodes
NODES
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
We Have No Nodes Yet
Training Node
• The labs require a node to be managed
• We allow for four different options
• Bring your own Node
• Use Vagrant from the Starter Kit
• Launch an instance of a public AMI on EC2
• Use the Chef Fundamentals training lab
learnchef.com
Training Lab Requirements
BETA Chef Training Lab
• Login to the Lab
• https://use.cloudshare.com/
• Make sure your environment is ready
• Runtime: 24 Hours
• Auto-suspend after: 1 Hour
• Storage time: 7 Days
Your Node
• Hostname or IP Address
• SSH Username
• SSH Password
• SSH Port (default is 22)
• SSH credentials for the Training Lab & the EC2 AMI
•username: opscode
•password: opscode
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
Checkpoint
NODES

Bootstrap a Node
Bootstrap the Target Instance
$ knife bootstrap --help

knife bootstrap FQDN (options)
--sudo
-x, --ssh-user USERNAME
-P, --ssh-password PASSWORD
-p, --ssh-port PORT
-N, --node-name NAME
-r, --run-list RUN_LIST

Execute the bootstrap via sudo
The ssh username
The ssh password
The ssh port
The Chef node name for your new node
Comma separated list of roles/recipes to apply
knife bootstrap
• HOSTNAME or IP Address of your machine
•--sudo
•-x YOUR_SSH_USERNAME
•-P YOUR_SSH_PASSWORD
•-p YOUR_SSH_PORT (defaults to 22)
•-N "target1"
knife bootstrap - Lab or AMI
• HOSTNAME or IP Address of your machine
•--sudo
•-x opscode
•-P opscode
•-N "target1"
• No need for -p, uses the default ssh port
Bootstrap the Target Instance
$ knife bootstrap IPADDRESS --sudo -x opscode -P opscode -N “target1”

Bootstrapping Chef on ec2-54-211-119-145.compute-1.amazonaws.com
ec2-54-211-119-145.compute-1.amazonaws.com knife sudo password:
Enter your password:
...
...
ec2-54-211-119-145.compute-1.amazonaws.com Converging 0 resources
ec2-54-211-119-145.compute-1.amazonaws.com
ec2-54-211-119-145.compute-1.amazonaws.com Chef Client finished, 0
resources updated
ec2-54-211-119-145.compute-1.amazonaws.com
local workstation

managed node
(VM)
$ knife bootstrap IPADDRESS --sudo -x USERNAME -P PASSWORD -N target1

local workstation

managed node
(VM)
$ knife bootstrap IPADDRESS --sudo -x USERNAME -P PASSWORD -N target1

SSH!
local workstation

managed node
(VM)
$ knife bootstrap IPADDRESS --sudo -x USERNAME -P PASSWORD -N target1

SSH!
managed node
(VM)

local workstation

chef_server_url
validation_client_name
validation_key
$ knife bootstrap IPADDRESS --sudo -x USERNAME -P PASSWORD -N target1

SSH!
managed node
(VM)

local workstation

Hosted Enterprise Chef
$ knife bootstrap IPADDRESS --sudo -x USERNAME -P PASSWORD -N target1

SSH!
managed node
(VM)

local workstation

Hosted Enterprise Chef

bash -c '
install chef
configure client
run chef'
$ knife bootstrap IPADDRESS --sudo -x USERNAME -P PASSWORD -N target1

SSH!
managed node
(VM)

local workstation

chef-client
Hosted Enterprise Chef
What just happened?
• Chef and all of its dependencies installed via an
operating system-specific package ("omnibus installer")
• Installation includes
• The Ruby language - used by Chef
• knife - Command line tool for administrators
• chef-client - Client application
• ohai - System profiler
• ...and more
View Node on Chef Server
• Login to your Hosted Enterprise Chef
View Node on Chef Server
View Node on Chef Server
Node
• The node is registered with Chef Server
• The Chef Server displays information about the node
• This information comes from Ohai
Ohai
"languages": {
"ruby": {
},
"perl": {
"version": "5.14.2",
"archname": "x86_64linux-gnu-thread-multi"
},
"python": {
"version": "2.7.3",
"builddate": "Aug 1
2012, 05:14:39"
},
"php": {
"version":
"5.3.10-1ubuntu3.6",
"builddate": "(cli)
(built: Mar"
}
},

"kernel": {
"name": "Linux", "release":
"3.2.0-32-virtual",
"version": "#51-Ubuntu SMP Wed
Sep 26 21:53:42 UTC 2012",
"machine": "x86_64",
"modules": {
"isofs": {
"size": "40257",
"refcount": "0"
},
"acpiphp": {
"size": "24231",
"refcount": "0"
}
},
"os": "GNU/Linux"
},
"os": "linux",
"os_version": "3.2.0-32-virtual",
"ohai_time": 1369328621.3456137,

"network": {
"interfaces": {
"lo": {
"mtu": "16436",
"flags": [
"LOOPBACK", “UP","LOWER_UP"
],
"encapsulation": "Loopback",
"addresses": {
"127.0.0.1": {
"family": "inet",
"netmask": "255.0.0.0",
"scope": "Node"
},
"::1": {
"family": "inet6",
"scope": "Node"
}
},
},
"eth0": {
"type": "eth",
"number": "0",
Checkpoint
Write a Cookbook
Packages, Cookbook Files, and Services
Lesson Objectives
• After completing the lesson, you will be able to
• Describe what a cookbook is
• Create a new cookbook
• Explain what a recipe is
• Describe how to use the package, service, and
cookbook_file resources
• Upload a cookbook to the Chef Server
• Explain what a run list is, and how to set it for a
node
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.
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.
Required steps
• Install Apache
• Start the service, and make sure it will start when the
machine boots
• Write out the home page
Exercise: Create a new Cookbook
$ knife cookbook create apache

**
**
**
**

Creating
Creating
Creating
Creating

cookbook apache
README for cookbook: apache
CHANGELOG for cookbook: apache
metadata for cookbook: apache
Edit the default recipe
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: Add a package resource to install Apache to the default
recipe
OPEN IN EDITOR: cookbooks/apache/recipes/default.rb
#
#
#
#
#
#
#
#

Cookbook Name:: apache
Recipe:: default
Copyright 2013, YOUR_COMPANY_NAME
All rights reserved - Do Not Redistribute

package "apache2" do
action :install
end
SAVE FILE!
Chef Resources
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
Chef Resources
• Have a type

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
Chef Resources
• Have a type
• Have a name

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
Chef Resources
• Have a type
• Have a name
• Have parameters

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
Chef Resources
• Have a type
• Have a name
• Have parameters
• Take action to put the
resource into the
desired state

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
Chef Resources
• Have a type
• Have a name
• Have parameters
• Take action to put the
resource into the
desired state
• Can send notifications
to other resources

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
So the resource we just wrote...
package "apache2" do
action :install
end
So the resource we just wrote...
• Is a package resource

package "apache2" do
action :install
end
So the resource we just wrote...
• Is a package resource
• Whose name is
apache2

package "apache2" do
action :install
end
So the resource we just wrote...
• Is a package resource
• Whose name is
apache2
• With an install action

package "apache2" do
action :install
end
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
• Chef uses the platform the node is running to
determine the correct provider for a resource
Exercise: Add a service resource to ensure the service is started
and enabled at boot
OPEN IN EDITOR: cookbooks/apache/recipes/default.rb

...
# All rights reserved - Do Not Redistribute
#
package "apache2" do
action :install
end
service "apache2" do
action [ :enable, :start ]
end
SAVE FILE!
So the resource we just wrote...
service "apache2" do
action [ :enable, :start ]
end
So the resource we just wrote...
• Is a service resource
service "apache2" do
action [ :enable, :start ]
end
So the resource we just wrote...
• Is a service resource
• Whose name is
apache2

service "apache2" do
action [ :enable, :start ]
end
So the resource we just wrote...
• Is a service resource
• Whose name is
apache2
• With two actions:
start and enable

service "apache2" do
action [ :enable, :start ]
end
Order Matters
• Resources are
executed in order

1st

2nd

• Body Level One
• Body Level Two
template "/etc/haproxy/haproxy.cfg" do
• Body Level Three
source "haproxy.cfg.erb"
owner "root"
•"root" Level Four
Body
group
mode "0644"
• :restart, "service[haproxy]"
notifies Body Level Five
package "haproxy" do
action :install
end

end
3rd

service "haproxy" do
supports :restart => :true
action [:enable, :start]
end
Exercise: Add a cookbook_file resource to copy the home page in
place
OPEN IN EDITOR: cookbooks/apache/recipes/default.rb

...
service "apache2" do
action [ :enable, :start ]
end
cookbook_file "/var/www/index.html" do
source "index.html"
mode "0644"
end

SAVE FILE!
So the resource we just wrote...
cookbook_file "/var/www/index.html" do
source "index.html"
mode "0644"
end
So the resource we just wrote...
• Is a cookbook_file
resource

cookbook_file "/var/www/index.html" do
source "index.html"
mode "0644"
end
So the resource we just wrote...
• Is a cookbook_file
resource
• Whose name is
/var/www/index.html

cookbook_file "/var/www/index.html" do
source "index.html"
mode "0644"
end
So the resource we just wrote...
• Is a cookbook_file
cookbook_file "/var/www/index.html"
resource
source "index.html"
mode "0644"
• Whose name is
end
/var/www/index.html
• With two parameters:
• source of index.html
• mode of “0644”

do
Full contents of the apache recipe
#
#
#
#
#
#
#
#

Cookbook Name:: apache
Recipe:: default
Copyright 2013, YOUR_COMPANY_NAME
All rights reserved - Do Not Redistribute

package "apache2" do
action :install
end
service "apache2" do
action [ :enable, :start ]
end
cookbook_file "/var/www/index.html" do
source "index.html"
mode "0644"
end
Exercise: Add index.html to your cookbook’s files/default directory
OPEN IN EDITOR: cookbooks/apache/files/default/index.html

<html>
<body>
<h1>Hello, world!</h1>
</body>
</html>

SAVE FILE!
Exercise: Upload the cookbook
$ knife cookbook upload apache

Uploading apache
Uploaded 1 cookbook.

[0.1.0]
Run List
Enterprise
Chef

What policy sho
uld

I follow?
chef-client

Node

“recipe[apache]”
Update the Run List
• Login to Enterprise
Hosted Chef
• Select the "Nodes" tab
• Select your Node
• Edit the Run List
Update the Run List
• Drag
• Drop
• Save
Exercise: Run the chef-client on your test node
opscode@target1:~$ sudo chef-client
Starting Chef Client, version 11.4.4
[2013-06-25T04:20:22+00:00] INFO: *** Chef 11.4.4 ***
[2013-06-25T04:20:23+00:00] INFO: [inet6] no default interface, picking the first ipaddress
[2013-06-25T04:20:23+00:00] INFO: Run List is [recipe[apache]]
[2013-06-25T04:20:23+00:00] INFO: Run List expands to [apache]
[2013-06-25T04:20:23+00:00] INFO: Starting Chef Run for target1
[2013-06-25T04:20:23+00:00] INFO: Running start handlers
[2013-06-25T04:20:23+00:00] INFO: Start handlers complete.
resolving cookbooks for run list: ["apache"]
[2013-06-25T04:20:24+00:00] INFO: Loading cookbooks [apache]
Synchronizing Cookbooks:
[2013-06-25T04:20:24+00:00] INFO: Storing updated cookbooks/apache/recipes/default.rb in the cache.
[2013-06-25T04:20:24+00:00] INFO: Storing updated cookbooks/apache/recipes/tmp.rb in the cache.
[2013-06-25T04:20:24+00:00] INFO: Storing updated cookbooks/apache/CHANGELOG.md in the cache.
[2013-06-25T04:20:25+00:00] INFO: Storing updated cookbooks/apache/metadata.rb in the cache.
[2013-06-25T04:20:25+00:00] INFO: Storing updated cookbooks/apache/README.md in the cache.
- apache
Compiling Cookbooks...
Converging 3 resources
Recipe: apache::default
* package[apache2] action install[2013-06-25T04:20:25+00:00] INFO: Processing package[apache2] action install (apache::default line 9)
- install version 2.2.22-1ubuntu1 of package apache2
Exercise: Verify that the home page works
• Open a web browser
• Type in the the URL for your test node
Congratulate yourself!
• You have just written your first Chef cookbook!
• (clap!)
Next Week
• List the steps taken
by a chef-client
during a run
• Explain the basic
security model of
Chef
Thank You
• Nathen Harvey
• Technical Community Manager at Opscode
• @nathenharvey
• nharvey@opscode.com

More Related Content

PPTX
Opscode Webinar: Managing Your VMware Infrastructure with Chef
PDF
Chef Fundamentals Training Series Module 2: Workstation Setup
ODP
Introduction to Chef
PDF
Community Cookbooks & further resources - Fundamentals Webinar Series Part 6
PDF
Chef Fundamentals Training Series Module 6: Roles, Environments, Community Co...
PDF
Chef Fundamentals Training Series Module 4: The Chef Client Run and Expanding...
PDF
Chef Fundamentals Training Series Module 1: Overview of Chef
PDF
Node setup, resource, and recipes - Fundamentals Webinar Series Part 2
Opscode Webinar: Managing Your VMware Infrastructure with Chef
Chef Fundamentals Training Series Module 2: Workstation Setup
Introduction to Chef
Community Cookbooks & further resources - Fundamentals Webinar Series Part 6
Chef Fundamentals Training Series Module 6: Roles, Environments, Community Co...
Chef Fundamentals Training Series Module 4: The Chef Client Run and Expanding...
Chef Fundamentals Training Series Module 1: Overview of Chef
Node setup, resource, and recipes - Fundamentals Webinar Series Part 2

What's hot (20)

PDF
Introduction to Chef: Automate Your Infrastructure by Modeling It In Code
PDF
Node object and roles - Fundamentals Webinar Series Part 3
PDF
Automating Infrastructure with Chef
PPTX
Introduction to chef
PDF
Introduction to Chef - Techsuperwomen Summit
PDF
Introduction to Chef - April 22 2015
PDF
Environments - Fundamentals Webinar Series Week 5
PDF
The unintended benefits of Chef
PDF
Automating your infrastructure with Chef
PPTX
Chef Tutorial | Chef Tutorial For Beginners | DevOps Chef Tutorial | DevOps T...
PDF
Overview of Chef - Fundamentals Webinar Series Part 1
PPTX
Understand Chef
PPT
Chef, Devops, and You
PPTX
Chef fundamentals
PDF
Chef-Zero & Local Mode
PDF
Infrastructure Automation with Chef
PDF
Common configuration with Data Bags - Fundamentals Webinar Series Part 4
PDF
Server Installation and Configuration with Chef
PPT
Overview of chef ( Infrastructure as a Code )
PPTX
Chef introduction
Introduction to Chef: Automate Your Infrastructure by Modeling It In Code
Node object and roles - Fundamentals Webinar Series Part 3
Automating Infrastructure with Chef
Introduction to chef
Introduction to Chef - Techsuperwomen Summit
Introduction to Chef - April 22 2015
Environments - Fundamentals Webinar Series Week 5
The unintended benefits of Chef
Automating your infrastructure with Chef
Chef Tutorial | Chef Tutorial For Beginners | DevOps Chef Tutorial | DevOps T...
Overview of Chef - Fundamentals Webinar Series Part 1
Understand Chef
Chef, Devops, and You
Chef fundamentals
Chef-Zero & Local Mode
Infrastructure Automation with Chef
Common configuration with Data Bags - Fundamentals Webinar Series Part 4
Server Installation and Configuration with Chef
Overview of chef ( Infrastructure as a Code )
Chef introduction
Ad

Viewers also liked (14)

KEY
Infrastructure Automation with Chef
PDF
Chef Cookbook Testing and Continuous Integration
PDF
Chef for beginners module 5
PPTX
What Makes a Good Chef Cookbook? (May 2014 Edition)
PDF
RawFoodGuide_v2
PPT
Food as medicine: using food to cure
PDF
Introduction to Docker & CoreOS - Symfony User Group Cologne
 
PDF
Chef for beginners module 2
PPTX
Jenkins and Chef: Infrastructure CI and Automated Deployment
PPTX
Chef for DevOps - an Introduction
PPS
Non Verbal communication and use of body language expression
PPTX
Verbal & Non-Verbal Communication
PPTX
The Impala Cookbook
PPTX
38 gestures of body language
Infrastructure Automation with Chef
Chef Cookbook Testing and Continuous Integration
Chef for beginners module 5
What Makes a Good Chef Cookbook? (May 2014 Edition)
RawFoodGuide_v2
Food as medicine: using food to cure
Introduction to Docker & CoreOS - Symfony User Group Cologne
 
Chef for beginners module 2
Jenkins and Chef: Infrastructure CI and Automated Deployment
Chef for DevOps - an Introduction
Non Verbal communication and use of body language expression
Verbal & Non-Verbal Communication
The Impala Cookbook
38 gestures of body language
Ad

Similar to Chef Fundamentals Training Series Module 3: Setting up Nodes and Cookbook Authoring (20)

PDF
Introduction to Cooking with Chef
ODP
Configuration management with Chef
PDF
Learning chef
PDF
Introduction to Chef
ODP
DevOps and Chef improve your life
PPTX
Kickstarter - Chef Opswork
PDF
Chef: Smart infrastructure automation
PDF
PDF
OSDC 2013 | Introduction into Chef by Andy Hawkins
PDF
IT Automation with Chef
PDF
What is Chef and how we use it at tripsta
PDF
Introduction to Chef
PDF
Chef, Vagrant and Friends
PDF
Chef - Administration for programmers
PDF
PDF
Cloud Automation with Opscode Chef
PDF
Chef basics - write infrastructure as code
PDF
TXLF: Chef- Software Defined Infrastructure Today & Tomorrow
PPTX
Cook Infrastructure with chef -- Justeat.IN
Introduction to Cooking with Chef
Configuration management with Chef
Learning chef
Introduction to Chef
DevOps and Chef improve your life
Kickstarter - Chef Opswork
Chef: Smart infrastructure automation
OSDC 2013 | Introduction into Chef by Andy Hawkins
IT Automation with Chef
What is Chef and how we use it at tripsta
Introduction to Chef
Chef, Vagrant and Friends
Chef - Administration for programmers
Cloud Automation with Opscode Chef
Chef basics - write infrastructure as code
TXLF: Chef- Software Defined Infrastructure Today & Tomorrow
Cook Infrastructure with chef -- Justeat.IN

More from Chef Software, Inc. (20)

PPTX
Opscode Webinar: Cooking with Chef on Microsoft Windows
PDF
Opscode tech festa july 2013
PPTX
Opscode Webinar: Automation for Education May 08-2013
PDF
Utility HPC: Right Systems, Right Scale, Right Science
PDF
The Berkshelf Way
PDF
Using Kanban and Chef: A Case Study – Jeffrey Hulten
PDF
SDN, Network Virtualization and the Software Defined Data Center – Brad Hedlund
PDF
ChefConf 2013 Keynote Session – Opscode – Adam Jacob
PDF
Using Chef and AppFirst to Automate Scale-out/Scale-down of Web Applications ...
PDF
The InstallShield of the 21st Century – Theo Schlossnagle
PDF
Chef ignited a DevOps revolution – BK Box
PDF
Push jobs: an orchestration building block for private Chef
PDF
Multi-provider Vagrant and Chef: AWS, VMware, and more
PDF
Welcome to the IT Industrial Revolution! Are you ready?
PDF
Who Says Elephants Can’t Cook? How IBM and Opscode are changing the role of c...
PDF
Growing Pains with Chef – a Tale of DevOps in a Large Organization
PDF
Cookbook refactoring & abstracting logic to Ruby(gems)
PDF
Creating a culture for Continuous Delivery
PDF
Cookin’ up Hybrid Clouds: Chef and the Accenture Cloud Platform
PDF
Exploiting Conway’s Law for Underpants and Profit
Opscode Webinar: Cooking with Chef on Microsoft Windows
Opscode tech festa july 2013
Opscode Webinar: Automation for Education May 08-2013
Utility HPC: Right Systems, Right Scale, Right Science
The Berkshelf Way
Using Kanban and Chef: A Case Study – Jeffrey Hulten
SDN, Network Virtualization and the Software Defined Data Center – Brad Hedlund
ChefConf 2013 Keynote Session – Opscode – Adam Jacob
Using Chef and AppFirst to Automate Scale-out/Scale-down of Web Applications ...
The InstallShield of the 21st Century – Theo Schlossnagle
Chef ignited a DevOps revolution – BK Box
Push jobs: an orchestration building block for private Chef
Multi-provider Vagrant and Chef: AWS, VMware, and more
Welcome to the IT Industrial Revolution! Are you ready?
Who Says Elephants Can’t Cook? How IBM and Opscode are changing the role of c...
Growing Pains with Chef – a Tale of DevOps in a Large Organization
Cookbook refactoring & abstracting logic to Ruby(gems)
Creating a culture for Continuous Delivery
Cookin’ up Hybrid Clouds: Chef and the Accenture Cloud Platform
Exploiting Conway’s Law for Underpants and Profit

Recently uploaded (20)

PDF
Electronic commerce courselecture one. Pdf
PDF
Newfamily of error-correcting codes based on genetic algorithms
PPTX
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PDF
Reimagining Insurance: Connected Data for Confident Decisions.pdf
PDF
solutions_manual_-_materials___processing_in_manufacturing__demargo_.pdf
PDF
DevOps & Developer Experience Summer BBQ
PDF
GamePlan Trading System Review: Professional Trader's Honest Take
PPTX
breach-and-attack-simulation-cybersecurity-india-chennai-defenderrabbit-2025....
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PPTX
CroxyProxy Instagram Access id login.pptx
PDF
Modernizing your data center with Dell and AMD
PDF
AI And Its Effect On The Evolving IT Sector In Australia - Elevate
PDF
KodekX | Application Modernization Development
PDF
cuic standard and advanced reporting.pdf
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PPTX
Big Data Technologies - Introduction.pptx
PDF
Chapter 2 Digital Image Fundamentals.pdf
PPTX
Comunidade Salesforce São Paulo - Desmistificando o Omnistudio (Vlocity)
Electronic commerce courselecture one. Pdf
Newfamily of error-correcting codes based on genetic algorithms
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
Understanding_Digital_Forensics_Presentation.pptx
Reimagining Insurance: Connected Data for Confident Decisions.pdf
solutions_manual_-_materials___processing_in_manufacturing__demargo_.pdf
DevOps & Developer Experience Summer BBQ
GamePlan Trading System Review: Professional Trader's Honest Take
breach-and-attack-simulation-cybersecurity-india-chennai-defenderrabbit-2025....
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
CroxyProxy Instagram Access id login.pptx
Modernizing your data center with Dell and AMD
AI And Its Effect On The Evolving IT Sector In Australia - Elevate
KodekX | Application Modernization Development
cuic standard and advanced reporting.pdf
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
Dropbox Q2 2025 Financial Results & Investor Presentation
Big Data Technologies - Introduction.pptx
Chapter 2 Digital Image Fundamentals.pdf
Comunidade Salesforce São Paulo - Desmistificando o Omnistudio (Vlocity)

Chef Fundamentals Training Series Module 3: Setting up Nodes and Cookbook Authoring

  • 1. Set Up a Node & Write a Cookbook Chef Fundamentals Webinar Series [email protected]
  • 2. Nathen Harvey • Technical Community Manager at Opscode • Co-host of the Food Fight Show Podcast • @nathenharvey • [email protected]
  • 3. Node Setup Setup a Node to manage
  • 4. Lesson Objectives • After completing the lesson, you will be able to • 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 chefclient
  • 6. 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
  • 7. We Have No Nodes Yet
  • 8. Training Node • The labs require a node to be managed • We allow for four different options • Bring your own Node • Use Vagrant from the Starter Kit • Launch an instance of a public AMI on EC2 • Use the Chef Fundamentals training lab
  • 11. BETA Chef Training Lab • Login to the Lab • https://use.cloudshare.com/ • Make sure your environment is ready • Runtime: 24 Hours • Auto-suspend after: 1 Hour • Storage time: 7 Days
  • 12. Your Node • Hostname or IP Address • SSH Username • SSH Password • SSH Port (default is 22) • SSH credentials for the Training Lab & the EC2 AMI •username: opscode •password: opscode
  • 13. 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
  • 15. Bootstrap the Target Instance $ knife bootstrap --help knife bootstrap FQDN (options) --sudo -x, --ssh-user USERNAME -P, --ssh-password PASSWORD -p, --ssh-port PORT -N, --node-name NAME -r, --run-list RUN_LIST Execute the bootstrap via sudo The ssh username The ssh password The ssh port The Chef node name for your new node Comma separated list of roles/recipes to apply
  • 16. knife bootstrap • HOSTNAME or IP Address of your machine •--sudo •-x YOUR_SSH_USERNAME •-P YOUR_SSH_PASSWORD •-p YOUR_SSH_PORT (defaults to 22) •-N "target1"
  • 17. knife bootstrap - Lab or AMI • HOSTNAME or IP Address of your machine •--sudo •-x opscode •-P opscode •-N "target1" • No need for -p, uses the default ssh port
  • 18. Bootstrap the Target Instance $ knife bootstrap IPADDRESS --sudo -x opscode -P opscode -N “target1” Bootstrapping Chef on ec2-54-211-119-145.compute-1.amazonaws.com ec2-54-211-119-145.compute-1.amazonaws.com knife sudo password: Enter your password: ... ... ec2-54-211-119-145.compute-1.amazonaws.com Converging 0 resources ec2-54-211-119-145.compute-1.amazonaws.com ec2-54-211-119-145.compute-1.amazonaws.com Chef Client finished, 0 resources updated ec2-54-211-119-145.compute-1.amazonaws.com
  • 20. $ knife bootstrap IPADDRESS --sudo -x USERNAME -P PASSWORD -N target1 local workstation managed node (VM)
  • 21. $ knife bootstrap IPADDRESS --sudo -x USERNAME -P PASSWORD -N target1 SSH! local workstation managed node (VM)
  • 22. $ knife bootstrap IPADDRESS --sudo -x USERNAME -P PASSWORD -N target1 SSH! managed node (VM) local workstation chef_server_url validation_client_name validation_key
  • 23. $ knife bootstrap IPADDRESS --sudo -x USERNAME -P PASSWORD -N target1 SSH! managed node (VM) local workstation Hosted Enterprise Chef
  • 24. $ knife bootstrap IPADDRESS --sudo -x USERNAME -P PASSWORD -N target1 SSH! managed node (VM) local workstation Hosted Enterprise Chef bash -c ' install chef configure client run chef'
  • 25. $ knife bootstrap IPADDRESS --sudo -x USERNAME -P PASSWORD -N target1 SSH! managed node (VM) local workstation chef-client Hosted Enterprise Chef
  • 26. What just happened? • Chef and all of its dependencies installed via an operating system-specific package ("omnibus installer") • Installation includes • The Ruby language - used by Chef • knife - Command line tool for administrators • chef-client - Client application • ohai - System profiler • ...and more
  • 27. View Node on Chef Server • Login to your Hosted Enterprise Chef
  • 28. View Node on Chef Server
  • 29. View Node on Chef Server
  • 30. Node • The node is registered with Chef Server • The Chef Server displays information about the node • This information comes from Ohai
  • 31. Ohai "languages": { "ruby": { }, "perl": { "version": "5.14.2", "archname": "x86_64linux-gnu-thread-multi" }, "python": { "version": "2.7.3", "builddate": "Aug 1 2012, 05:14:39" }, "php": { "version": "5.3.10-1ubuntu3.6", "builddate": "(cli) (built: Mar" } }, "kernel": { "name": "Linux", "release": "3.2.0-32-virtual", "version": "#51-Ubuntu SMP Wed Sep 26 21:53:42 UTC 2012", "machine": "x86_64", "modules": { "isofs": { "size": "40257", "refcount": "0" }, "acpiphp": { "size": "24231", "refcount": "0" } }, "os": "GNU/Linux" }, "os": "linux", "os_version": "3.2.0-32-virtual", "ohai_time": 1369328621.3456137, "network": { "interfaces": { "lo": { "mtu": "16436", "flags": [ "LOOPBACK", “UP","LOWER_UP" ], "encapsulation": "Loopback", "addresses": { "127.0.0.1": { "family": "inet", "netmask": "255.0.0.0", "scope": "Node" }, "::1": { "family": "inet6", "scope": "Node" } }, }, "eth0": { "type": "eth", "number": "0",
  • 33. Write a Cookbook Packages, Cookbook Files, and Services
  • 34. Lesson Objectives • After completing the lesson, you will be able to • Describe what a cookbook is • Create a new cookbook • Explain what a recipe is • Describe how to use the package, service, and cookbook_file resources • Upload a cookbook to the Chef Server • Explain what a run list is, and how to set it for a node
  • 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. Required steps • Install Apache • Start the service, and make sure it will start when the machine boots • Write out the home page
  • 38. Exercise: Create a new Cookbook $ knife cookbook create apache ** ** ** ** Creating Creating Creating Creating cookbook apache README for cookbook: apache CHANGELOG for cookbook: apache metadata for cookbook: apache
  • 39. Edit the default recipe OPEN IN EDITOR: cookbooks/apache/recipes/default.rb # # # # # # # # Cookbook Name:: apache Recipe:: default Copyright 2013, YOUR_COMPANY_NAME All rights reserved - Do Not Redistribute
  • 40. Exercise: Add a package resource to install Apache to the default recipe OPEN IN EDITOR: cookbooks/apache/recipes/default.rb # # # # # # # # Cookbook Name:: apache Recipe:: default Copyright 2013, YOUR_COMPANY_NAME All rights reserved - Do Not Redistribute package "apache2" do action :install end SAVE FILE!
  • 41. Chef Resources 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
  • 42. Chef Resources • Have a type 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
  • 43. Chef Resources • Have a type • Have a name 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
  • 44. Chef Resources • Have a type • Have a name • Have parameters 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
  • 45. Chef Resources • Have a type • Have a name • Have parameters • Take action to put the resource into the desired state 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
  • 46. Chef Resources • Have a type • Have a name • Have parameters • Take action to put the resource into the desired state • Can send notifications to other resources 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
  • 47. So the resource we just wrote... package "apache2" do action :install end
  • 48. So the resource we just wrote... • Is a package resource package "apache2" do action :install end
  • 49. So the resource we just wrote... • Is a package resource • Whose name is apache2 package "apache2" do action :install end
  • 50. So the resource we just wrote... • Is a package resource • Whose name is apache2 • With an install action package "apache2" do action :install end
  • 51. 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 • Chef uses the platform the node is running to determine the correct provider for a resource
  • 52. Exercise: Add a service resource to ensure the service is started and enabled at boot OPEN IN EDITOR: cookbooks/apache/recipes/default.rb ... # All rights reserved - Do Not Redistribute # package "apache2" do action :install end service "apache2" do action [ :enable, :start ] end SAVE FILE!
  • 53. So the resource we just wrote... service "apache2" do action [ :enable, :start ] end
  • 54. So the resource we just wrote... • Is a service resource service "apache2" do action [ :enable, :start ] end
  • 55. So the resource we just wrote... • Is a service resource • Whose name is apache2 service "apache2" do action [ :enable, :start ] end
  • 56. So the resource we just wrote... • Is a service resource • Whose name is apache2 • With two actions: start and enable service "apache2" do action [ :enable, :start ] end
  • 57. Order Matters • Resources are executed in order 1st 2nd • Body Level One • Body Level Two template "/etc/haproxy/haproxy.cfg" do • Body Level Three source "haproxy.cfg.erb" owner "root" •"root" Level Four Body group mode "0644" • :restart, "service[haproxy]" notifies Body Level Five package "haproxy" do action :install end end 3rd service "haproxy" do supports :restart => :true action [:enable, :start] end
  • 58. Exercise: Add a cookbook_file resource to copy the home page in place OPEN IN EDITOR: cookbooks/apache/recipes/default.rb ... service "apache2" do action [ :enable, :start ] end cookbook_file "/var/www/index.html" do source "index.html" mode "0644" end SAVE FILE!
  • 59. So the resource we just wrote... cookbook_file "/var/www/index.html" do source "index.html" mode "0644" end
  • 60. So the resource we just wrote... • Is a cookbook_file resource cookbook_file "/var/www/index.html" do source "index.html" mode "0644" end
  • 61. So the resource we just wrote... • Is a cookbook_file resource • Whose name is /var/www/index.html cookbook_file "/var/www/index.html" do source "index.html" mode "0644" end
  • 62. So the resource we just wrote... • Is a cookbook_file cookbook_file "/var/www/index.html" resource source "index.html" mode "0644" • Whose name is end /var/www/index.html • With two parameters: • source of index.html • mode of “0644” do
  • 63. Full contents of the apache recipe # # # # # # # # Cookbook Name:: apache Recipe:: default Copyright 2013, YOUR_COMPANY_NAME All rights reserved - Do Not Redistribute package "apache2" do action :install end service "apache2" do action [ :enable, :start ] end cookbook_file "/var/www/index.html" do source "index.html" mode "0644" end
  • 64. Exercise: Add index.html to your cookbook’s files/default directory OPEN IN EDITOR: cookbooks/apache/files/default/index.html <html> <body> <h1>Hello, world!</h1> </body> </html> SAVE FILE!
  • 65. Exercise: Upload the cookbook $ knife cookbook upload apache Uploading apache Uploaded 1 cookbook. [0.1.0]
  • 66. Run List Enterprise Chef What policy sho uld I follow? chef-client Node “recipe[apache]”
  • 67. Update the Run List • Login to Enterprise Hosted Chef • Select the "Nodes" tab • Select your Node • Edit the Run List
  • 68. Update the Run List • Drag • Drop • Save
  • 69. Exercise: Run the chef-client on your test node opscode@target1:~$ sudo chef-client Starting Chef Client, version 11.4.4 [2013-06-25T04:20:22+00:00] INFO: *** Chef 11.4.4 *** [2013-06-25T04:20:23+00:00] INFO: [inet6] no default interface, picking the first ipaddress [2013-06-25T04:20:23+00:00] INFO: Run List is [recipe[apache]] [2013-06-25T04:20:23+00:00] INFO: Run List expands to [apache] [2013-06-25T04:20:23+00:00] INFO: Starting Chef Run for target1 [2013-06-25T04:20:23+00:00] INFO: Running start handlers [2013-06-25T04:20:23+00:00] INFO: Start handlers complete. resolving cookbooks for run list: ["apache"] [2013-06-25T04:20:24+00:00] INFO: Loading cookbooks [apache] Synchronizing Cookbooks: [2013-06-25T04:20:24+00:00] INFO: Storing updated cookbooks/apache/recipes/default.rb in the cache. [2013-06-25T04:20:24+00:00] INFO: Storing updated cookbooks/apache/recipes/tmp.rb in the cache. [2013-06-25T04:20:24+00:00] INFO: Storing updated cookbooks/apache/CHANGELOG.md in the cache. [2013-06-25T04:20:25+00:00] INFO: Storing updated cookbooks/apache/metadata.rb in the cache. [2013-06-25T04:20:25+00:00] INFO: Storing updated cookbooks/apache/README.md in the cache. - apache Compiling Cookbooks... Converging 3 resources Recipe: apache::default * package[apache2] action install[2013-06-25T04:20:25+00:00] INFO: Processing package[apache2] action install (apache::default line 9) - install version 2.2.22-1ubuntu1 of package apache2
  • 70. Exercise: Verify that the home page works • Open a web browser • Type in the the URL for your test node
  • 71. Congratulate yourself! • You have just written your first Chef cookbook! • (clap!)
  • 72. Next Week • List the steps taken by a chef-client during a run • Explain the basic security model of Chef
  • 73. Thank You • Nathen Harvey • Technical Community Manager at Opscode • @nathenharvey • [email protected]