SlideShare a Scribd company logo
1 of 108
Infrastructure as Code 
And Quick Introduction to Chef 
DevOps Belfast 
Chef Fundamentals by Chef Software, Inc. is licensed under a 
Creative Commons Attribution-ShareAlike 4.0 International License.
14 months working at Chef 
>4 years working with Chef 
Who Am I? 
John Fitzpatrick 
johnfitzpatrick 
jfitzpatrick@getchef.com 
@jhnftzptrck 
Belfast, Northern Ireland 
Curriculum Development 
Training 
Community stuff
Hello! 
• System Administrator?
Hello! 
• System Administrator? 
• Developer?
Hello! 
• System Administrator? 
• Developer? 
• Business Person (non-technical)?
Hello! 
• System Administrator? 
• Developer? 
• Business Person (non-technical)? 
• Experience with Infrastructure as Code or 
Configuration Management?
Hello! 
• System Administrator? 
• Developer? 
• Business Person (non-technical)? 
• Experience with Infrastructure as Code or 
Configuration Management? 
•Familiar with DevOps?
Why Configuration Management?
IT is revolutionizing every sector 
• All companies in every sector have their own IT Departments 
automating their product offerings 
• They're each striving for 
• Automation 
• Faster Speed to Market 
• Consistent/Predictable Delivery 
• Cost Efficiency
Manufacturing CAD/CAM 
• Faster Design, Develop 
& Deliver cycles 
• Lower costs 
• 24 hour shifts! 
• Faster time to market
Online Banking 
• Convenience 
• Accuracy 
• Instant Access
Online Retail 
• Convenient 
• Cheaper than a high 
street presence 
• Global reach 
• Faster time to market
IT is revolutionizing every sector 
• Accounting 
• Advertising 
• Aerospace 
• Agriculture 
• Airline 
• Apparel & Accessories 
• Automotive 
• Banking 
• Biotechnology 
• Broadcasting 
• Brokerage 
• Call Centers 
• Cargo Handling 
• Chemical 
• Consulting 
• Defense 
• Department Stores 
• Education 
• Electronics 
• Energy 
• Entertainment & Leisure 
• Executive Search 
• Financial Services 
• Food, Beverage & Tobacco 
• Grocery 
• Health Care 
• Internet Publishing 
• Investment Banking 
• Legal 
• Manufacturing 
• Motion Picture & Video 
• Music 
• Newspaper Publishers 
• Online Auctions 
• Pension Funds 
• Pharmaceuticals 
• Private Equity 
• Publishing 
• Real Estate 
• Retail & Wholesale 
• Securities & Commodity 
Exchanges 
• Service 
• Telecommunications 
• Television 
• Transportation 
• Trucking 
• Venture Capital
What about IT industry itself? 
• IT is still a manual process 
• Stuck in the 1990's
IT Sector 
• Companies IT departments 
have been too busy 
providing solutions for their 
Companies' core business 
• But they've neglected their 
own back yard! 
Dev QA Prod 
• IT industry itself is the bottleneck - no one was attempting to 
automate the actual IT environment itself
IT Industry 
• Software companies provide products that feed 
into these IT solutions 
• But sometimes they add complexity of solution to be 
maintained, and not ease of management
Dimensions of Scale
Case Study: Online Retail 
• You place an order 
• Card payment is taken 
• Item is packed & shipped 
• Meanwhile, stock level is debited, & reordered from suppliers 
if it falls below a certain level 
• Totally automated – no human intervention! 
• However the s/w allowing this takes long development 
cycles (maybe months), through planning, development, 
testing/QA, and into production
High Maintenance 
• Herculean task to keep these systems running, 
patched, upgraded, etc
Waterfall Method – Silos! 
Business/Sales Lead 
Software Architect 
Development Team 
QA Team 
Sys Admin
Silos are complex structures
Option 1 
• Spend money improving your Silo 
• Looks pretty but entrenches the problem
Is there a better way? 
•We're in an era of unlimited compute 
• Speed is the new currency
Option 2 
• Pull them down
Option 2 
• Or at least let them become more latterly cross 
functional
DevOps! 
• Implement DevOps culture 
• Communication 
• Collaboration 
• Integration 
• End Goal: CD Pipeline!
Automate everything!
Integrated Approach 
• Historically 
• Developers wrote software 
• Operations (Sys Admins) installed and maintained it 
• Now developers need to consider deploying their 
code while writing they're writing it
CD Pipeline – Sample Workflow 
Automate 
dBuild and 
Unit Tests 
Developmen 
t 
Release 
to 
Productio 
n 
GitHub Automate 
d 
Acceptanc 
e Test 
Manual 
Code 
Review (?) 
Feedback Check-in 
(Linting) 
Feedback 
Trigger 
Check-in 
Feedback 
(Linting) 
Trigger 
Feedback 
Trigger 
Check-in 
Feedback 
(Linting) 
Feedback 
Trigger 
Trigger 
Trigger Trigger Feedback 
Feedback
Developers with Pagers? Whoah!
Benefits of Automation
So where do I start? 
•The first step to establish a fully automated CD 
pipeline is to define your Infrastructure as 
Code
Infrastructure as Code 
A SysAdmins Journey
Typical Sys Admin Journey 
From a vanilla image… 
ssh into machine 
$ yum install httpd 
$ yum install wget 
$ yum install unzip 
$ wget https://somewhere/master.zip 
$ unzip master.zip 
$ cd myapp 
$ sudo mv html /var/www/ 
$ sudo su root 
$ python myappinstall.py 
$ apachectl graceful
Typical Sys Admin Journey 
From a vanilla image… 
ssh into machine 
$ yum install httpd 
$ yum install wget 
$ yum install unzip 
$ wget https://somewhere/master.zip 
$ unzip master.zip 
$ cd myapp 
$ sudo mv html /var/www/ 
$ sudo su root 
$ python myappinstall.py 
$ apachectl graceful 
Log into machine
Typical Sys Admin Journey 
From a vanilla image… 
ssh into machine 
$ yum install httpd 
$ yum install wget 
$ yum install unzip 
$ wget https://somewhere/master.zip 
$ unzip master.zip 
$ cd myapp 
$ sudo mv html /var/www/ 
$ sudo su root 
$ python myappinstall.py 
$ apachectl graceful 
Install a few packages
Typical Sys Admin Journey 
From a vanilla image… 
ssh into machine 
$ yum install httpd 
$ yum install wget 
$ yum install unzip 
$ wget https://somewhere/master.zip 
$ unzip master.zip 
$ cd myapp 
$ sudo mv html /var/www/ 
$ sudo su root 
$ python myappinstall.py 
$ apachectl graceful 
Pull in some content
Typical Sys Admin Journey 
From a vanilla image… 
ssh into machine 
$ yum install httpd 
$ yum install wget 
$ yum install unzip 
$ wget https://somewhere/master.zip 
$ unzip master.zip 
$ cd myapp 
$ sudo mv html /var/www/ 
$ sudo su root 
$ python myappinstall.py 
$ apachectl graceful 
Manipulate directories & 
content
Typical Sys Admin Journey 
From a vanilla image… 
ssh into machine 
$ yum install httpd 
$ yum install wget 
$ yum install unzip 
$ wget https://somewhere/master.zip 
$ unzip master.zip 
$ cd myapp 
$ sudo mv html /var/www/ 
$ sudo su root 
$ python myappinstall.py 
$ apachectl graceful 
Re/start services
Typical Sys Admin Journey 
ssh into machine 
$ yum install httpd 
$ yum install wget 
$ yum install unzip 
$ wget https://somewhere/master.zip 
$ unzip master.zip 
$ cd myapp 
$ sudo mv html /var/www/ 
$ sudo su root 
$ python myappinstall.py 
$ apachectl graceful 
• All commands are 
manual 
• Have different 
syntaxes 
• They're platform 
specific (RHEL, 
Debian, Windows, …) 
From a vanilla image…
Typical Sys Admin Journey 
• Store notes in ~/server.txt
Typical Sys Admin Journey 
• Store notes in ~/server.txt 
• Move notes to the wiki
Typical Sys Admin Journey 
• Store notes in ~/server.txt 
• Move notes to the wiki 
•Write some scripts (setup.sh, fixit.sh, etc.)
Typical Sys Admin Journey 
• Store notes in ~/server.txt 
• Move notes to the wiki 
•Write some scripts (setup.sh, fixit.sh, etc.) 
• setup.sh.BAK 
• fixit.sh.OLD
Typical Sys Admin Journey 
• Store notes in ~/server.txt 
• Move notes to the wiki 
•Write some scripts (setup.sh, fixit.sh, etc.) 
• setup.sh.BAK 
• fixit.sh.OLD 
• Golden images and snapshots
Sample Infrastructure 
Graphite Nagios 
JBoss 
Memcache 
Postgres Slaves 
Postgres Master
New Compliance Mandate! 
Graphite Nagios 
JBoss 
Memcache 
Postgres Slaves 
Postgres Master 
• Move SSH off port 22 
• Let’s put it on 2022
6 Golden Images to Update 
Graphite Nagios 
JBoss 
Memcache 
Postgres Slaves 
Postgres Master 
1 
3 
4 
5 
2 
6 
/etc/ssh/sshd_config 
--- a/sshd_config 
+++ b/sshd_config 
-Port 22 
+Port 2202
12 Instances to replace 
Graphite Nagios 
JBoss 
Memcache 
Postgres Slaves 
Postgres Master 
1 
3 
2 
4 5 6 7 
8 
10 
9 
11 
12 
• Launch 
• Delete 
• Repeat 
• Typically manually 
• High stakes 
• Late hours 
• Risky change
The Infrastructure Code 
• Consistent DSL to manage any configuration 
component of a server 
• packages 
• files 
• users 
• … 
• Platform agnostic 
• Complex implementation code abstracted out
Treat Infrastructure like any code base 
• Infrastructure configuration files stored in version 
control, e.g. GitHub 
• Infrastructure becomes as testable & repeatable 
as the application code you're delivering
So what does this code look like? 
Lets drill down and look at how Chef implements this
What is a Resource? 
• 'Resource', n., the basic unit of configuration in Chef 
• Represents a piece of the system & its desired state 
• A package to be installed 
• A service to be running 
• A file to be generated 
• A user to be managed 
• etc
Example: 'package' Resource 
•Manage software packages 
• Install 
• Upgrade 
• Remove 
package "apache2" do 
action :install 
end
Resources – Test and Repair 
• Resources use a test and repair model 
• Resource currently in the desired state? 
• Yes – Do nothing 
• No – Bring the resource into the desired state (repair)
Example: 'file' Resource 
• Create a static file on disk 
• Add 
• Delete 
• Permissions 
• etc 
file "/var/www/html/index.html" do 
content "Hello, Belfast!" 
owner "root" 
group "root" 
end
Example: 'template' Resource 
• Create a dynamic/templated file on disk 
• Install 
• Upgrade 
• Remove 
• etc 
template "/etc/apache2/apache2.conf" do 
source "apache2.conf.erb" 
owner "root" 
group "root" 
mode "0644" 
notifies :restart, "service[httpd]" 
variables( 
:document_root => node["docroot"], 
:port => "80" 
) 
end
Example: 'service' Resource 
•Manage services on the machine 
• start 
• stop 
• reload 
• etc 
service "apache2" do 
action [ :enable, :start ] 
end
Other Resources 
• deploy 
• cron 
• directory 
• mount 
• user 
• group 
• dsc_resource 
•powershell_script 
• registry_key 
• remote_directory 
• route 
• and many more… 
• Or build your own!
Declarative Interface 
• Resources are platform agnostic 
• Policy declares what state each resource should be 
in, but not how to get there 
package "ntp" 
• Chef decides how to implement this:- 
• OSX: brew install ntp 
• RHEL: yum install ntp 
• Ubuntu: agt-get install ntp 
• …
What is a Chef Recipe? 
• 'Recipe', n., a file containing one or more 
Resources
Recipe: An ordered list of resources 
package "apache2" do 
file "/var/www/html/index.html" do 
content "Hello, Belfast!" 
end 
template "/etc/apache2/apache2.conf" do 
source "apache2.conf.erb" 
notifies :restart, "service[httpd]" 
variables( 
:document_root => node["docroot"], 
:port => "80" 
) 
end 
action :install 
end 
service "apache2" do 
action [:enable,:start] 
end
Recipe: An ordered list of resources 
package "apache2" do 
file "/var/www/html/index.html" do 
content "Hello, Belfast!" 
end 
template "/etc/apache2/apache2.conf" do 
source "apache2.conf.erb" 
notifies :restart, "service[httpd]" 
variables( 
:document_root => node["docroot"], 
:port => "80" 
) 
end 
action :install 
end 
service "apache2" do 
action [:enable,:start] 
end 
Order is critical!
Chef Provisioning Resources (aka Chef Metal) 
• Provision servers in any our multiple locations 
with_driver 'aws' 
num_nodes = 100 
1.upto(num_nodes) do |i| 
machine "hadoop#{i}" do 
recipe 'hadoop::default' 
recipe 'ntp' 
converge true 
tag 'hadoop' 
end 
end
Chef Provisioning Resources (aka Chef Metal) 
• Provision servers in any our multiple locations 
with_driver 'aws' 
num_nodes = 100 
1.upto(num_nodes) do |i| 
machine "hadoop#{i}" do 
recipe 'hadoop::default' 
recipe 'ntp' 
converge true 
tag 'hadoop' 
end 
end 
• Cloud: 
• FOG: EC2, DigitalOcean, OpenStack, etc. 
• Virtualization: 
• Vagrant: VirtualBox, VMWare Fusion, etc. 
• Vsphere 
• Containers: 
• LXC 
• Docker 
• Bare Metal: 
• SSH
Extending the Ruby DSL 
• Recipes can include arbitrary Ruby code 
search(:node, "ipaddress:10*").each.uniq do|node| 
file "node_#{node[ipaddress]}" do 
content #{node[user]} 
end 
end 
%w{mysql apache2 ntp}.each do |pkg| 
package pkg do 
action :install 
end 
end 
1.upto(10) do |i| 
file "file#{i}" do 
action :create 
end 
end
Extending the Ruby DSL 
• Recipes can include arbitrary Ruby code 
search(:node, "ipaddress:10*").each.uniq do|node| 
file "node_#{node[ipaddress]}" do 
content #{node[user]} 
end 
end 
%w{mysql apache2 ntp}.each do |pkg| 
package pkg do 
action :install 
end 
end 
1.upto(10) do |i| 
file "file#{i}" do 
action :create 
end 
end
Extending the Ruby DSL 
• Recipes can include arbitrary Ruby code 
search(:node, "ipaddress:10*").each.uniq do|node| 
file "node_#{node[ipaddress]}" do 
content #{node[user]} 
end 
end 
%w{mysql apache2 ntp}.each do |pkg| 
package pkg do 
action :install 
end 
end 
1.upto(10) do |i| 
file "file#{i}" do 
action :create 
end 
end 
Returns a Ruby array 
Std Ruby array methods
Extending the Ruby DSL 
• Recipes can include arbitrary Ruby code 
search(:node, "ipaddress:10*").each.uniq do|node| 
file "node_#{node[ipaddress]}" do 
content #{node[user]} 
end 
end 
%w{mysql apache2 ntp}.each do |pkg| 
package pkg do 
action :install 
end 
end 
1.upto(10) do |i| 
file "file#{i}" do 
action :create 
end 
end 
Declare an array 
explicitly 
Std Ruby array method
Extending the Ruby DSL 
• Recipes can include arbitrary Ruby code 
search(:node, "ipaddress:10*").each.uniq do|node| 
file "node_#{node[ipaddress]}" do 
content #{node[user]} 
end 
end 
%w{mysql apache2 ntp}.each do |pkg| 
package pkg do 
action :install 
end 
end 
1.upto(10) do |i| 
file "file#{i}" do 
action :create 
end 
end 
Std Ruby array method
What is a Cookbook? 
• 'Cookbook', n., a collection of recipes & supporting 
files 
• These supporting files could be 
• attributes 
• templates 
• etc 
• Naming convention: 'cookbookname::recipename'
What is a run_list? 
• 'run_list', n., a list of recipes to be run in a given 
'chef-client' run 
run_list [ 
"recipe[ntp::client]" 
"recipe[users::default]" 
"role[webserver]" 
]
What is a run_list? 
• 'run_list', n., a list of recipes to be run in a given 
'chef-client' run 
run_list [ 
"recipe[ntp::client]" 
"recipe[users::default]" 
"role[webserver]" 
] 
Order is critical! 
cookbook recipe
chef–client queries Chef Server for runlist 
Node 
Chef 
Server
chef–client pulls node runlist from Chef Server 
Node 
Chef 
Server 
"recipe[ntp::client]" 
"recipe[users::default]" 
"role[webserver]"
chef-client invokes the runlist 
Chef 
Server 
"recipe[ntp::client]" 
"recipe[users::default]" 
"role[webserver]"
Distributed Architecture 
• Highly scalable distributed system 
• No processing performed on the Chef Server 
• All processing is performed on the node itself
What can you manage? 
•Nodes represent any infrastructure component 
• Physical servers or virtual servers 
• Local hardware 
•Compute instances in a public or private cloud 
• Employee workstations 
• Could also be network hardware - switches, 
routers, etc
Chef Server 
• Stores policy files and other configuration data 
• Maintains a searchable index of node data
Use Case - Search 
Bringing it all Together
Search 
• Chef Server maintains a searchable index of 
node data 
• Recipes can search for other nodes with specific 
• Roles 
• IP addresses 
• Hostnames 
• FQDNs 
• etc 
http://www.flickr.com/photos/kathycsus/2686772625
Search for Nodes 
pool_members = search("node","role:webserver") 
template "/etc/haproxy/haproxy.cfg" do 
source "haproxy-app_lb.cfg.erb" 
owner "root" 
group "root" 
mode 0644 
variables :pool_members => pool_members.uniq 
notifies :restart, "service[haproxy]" 
end
Webservers 
HAProxy Configuration 
HA Proxy
pool_members = search("node","role:webserver") 
Webservers 
HAProxy Load Balancer 
Chef 
Server 
HA Proxy
pool_members = search("node","role:webserver") 
Webservers 
HAProxy Load Balancer 
Chef 
Server 
HA Proxy
pool_members = search("node","role:webserver") 
Webservers 
HAProxy Load Balancer 
Chef 
Server 
HA Proxy
pool_members = search("node","role:webserver") 
Webservers 
HAProxy Load Balancer 
Chef 
Server 
{ 
"web01" : { 
"hostname" : "web01", 
"ipaddress" : "10.1.1.1" 
}, 
"web02" : { 
"hostname" : "web02", 
"ipaddress" : "10.1.1.2" 
}, 
"web03" : { 
"hostname" : "web03", 
"ipaddress" : "10.1.1.3" 
}, 
"web04" : { 
"hostname" : "web04", 
"ipaddress" : "10.1.1.4" 
} 
} 
HA Proxy
pool_members = search("node","role:webserver") 
Webservers 
HAProxy Load Balancer 
Chef 
Server 
{ 
"web01" : { 
"hostname" : "web01", 
"ipaddress" : "10.1.1.1" 
}, 
"web02" : { 
"hostname" : "web02", 
"ipaddress" : "10.1.1.2" 
}, 
"web03" : { 
"hostname" : "web03", 
"ipaddress" : "10.1.1.3" 
}, 
"web04" : { 
"hostname" : "web04", 
"ipaddress" : "10.1.1.4" 
} 
} 
HA Proxy
pool_members = search("node","role:webserver") 
Webservers 
HAProxy Load Balancer 
HA Proxy 
Chef 
Server 
pool_members 
{ 
"web01" : { 
"hostname" : "web01", 
"ipaddress" : "10.1.1.1" 
}, 
"web02" : { 
"hostname" : "web02", 
"ipaddress" : "10.1.1.2" 
}, 
"web03" : { 
"hostname" : "web03", 
"ipaddress" : "10.1.1.3" 
}, 
"web04" : { 
"hostname" : "web04", 
"ipaddress" : "10.1.1.4" 
} 
} 
{ 
"web01" : { 
"hostname" : "web01", 
"ipaddress" : "10.1.1.1" 
}, 
"web02" : { 
"hostname" : "web02", 
"ipaddress" : "10.1.1.2" 
}, 
"web03" : { 
"hostname" : "web03", 
"ipaddress" : "10.1.1.3" 
}, 
"web04" : { 
"hostname" : "web04", 
"ipaddress" : "10.1.1.4" 
} 
}
HAProxy Configuration 
Webservers 
pool_members 
{ 
"web01" : { 
"hostname" : "web01", 
"ipaddress" : "10.1.1.1" 
}, 
"web02" : { 
"hostname" : "web02", 
"ipaddress" : "10.1.1.2" 
}, 
"web03" : { 
"hostname" : "web03", 
"ipaddress" : "10.1.1.3" 
}, 
"web04" : { 
"hostname" : "web04", 
"ipaddress" : "10.1.1.4" 
} 
} 
HA Proxy
HAProxy Configuration 
haproxy.cfg 
server web01 10.1.1.1 weight 1 maxconn 1 check 
server web02 10.1.1.2 weight 1 maxconn 1 check 
server web03 10.1.1.3 weight 1 maxconn 1 check 
server web04 10.1.1.4 weight 1 maxconn 1 check 
pool_members 
{ 
"web01" : { 
"hostname" : "web01", 
"ipaddress" : "10.1.1.1" 
}, 
"web02" : { 
"hostname" : "web02", 
"ipaddress" : "10.1.1.2" 
}, 
"web03" : { 
"hostname" : "web03", 
"ipaddress" : "10.1.1.3" 
}, 
"web04" : { 
"hostname" : "web04", 
"ipaddress" : "10.1.1.4" 
} 
} 
Webservers 
HA Proxy
HAProxy Configuration 
haproxy.cfg 
server web01 10.1.1.1 weight 1 maxconn 1 check 
server web02 10.1.1.2 weight 1 maxconn 1 check 
server web03 10.1.1.3 weight 1 maxconn 1 check 
server web04 10.1.1.4 weight 1 maxconn 1 check 
pool_members 
{ 
"web01" : { 
"hostname" : "web01", 
"ipaddress" : "10.1.1.1" 
}, 
"web02" : { 
"hostname" : "web02", 
"ipaddress" : "10.1.1.2" 
}, 
"web03" : { 
"hostname" : "web03", 
"ipaddress" : "10.1.1.3" 
}, 
"web04" : { 
"hostname" : "web04", 
"ipaddress" : "10.1.1.4" 
} 
} 
Webservers 
HA Proxy
HAProxy Configuration 
haproxy.cfg 
server web01 10.1.1.1 weight 1 maxconn 1 check 
server web02 10.1.1.2 weight 1 maxconn 1 check 
server web03 10.1.1.3 weight 1 maxconn 1 check 
server web04 10.1.1.4 weight 1 maxconn 1 check 
pool_members 
{ 
"web01" : { 
"hostname" : "web01", 
"ipaddress" : "10.1.1.1" 
}, 
"web02" : { 
"hostname" : "web02", 
"ipaddress" : "10.1.1.2" 
}, 
"web03" : { 
"hostname" : "web03", 
"ipaddress" : "10.1.1.3" 
}, 
"web04" : { 
"hostname" : "web04", 
"ipaddress" : "10.1.1.4" 
} 
} 
Webservers 
HA Proxy
HAProxy Configuration 
haproxy.cfg 
server web01 10.1.1.1 weight 1 maxconn 1 check 
server web02 10.1.1.2 weight 1 maxconn 1 check 
server web03 10.1.1.3 weight 1 maxconn 1 check 
server web04 10.1.1.4 weight 1 maxconn 1 check 
pool_members 
{ 
"web01" : { 
"hostname" : "web01", 
"ipaddress" : "10.1.1.1" 
}, 
"web02" : { 
"hostname" : "web02", 
"ipaddress" : "10.1.1.2" 
}, 
"web03" : { 
"hostname" : "web03", 
"ipaddress" : "10.1.1.3" 
}, 
"web04" : { 
"hostname" : "web04", 
"ipaddress" : "10.1.1.4" 
} 
} 
Webservers 
HA Proxy
So when this… 
9 
Jboss App 
Graphite Nagios 
Memcache 
Postgres Slaves 
Postgres Master
Jboss App 
Graphite Nagios 
Memcache 
Postgres Slaves 
Postgres Master 
…becomes this
...this can happen automatically 
Graphite Nagios 
Memcache 
Postgres Slaves 
Postgres Master 
Jboss App
Wrapping Up & Demo
Power of Infrastructure as Code 
• Reconstruct business from code repository, 
data backup, and compute resources
We’ve only scratched the surface 
https://www.getchef.com/chef/
We’ve only scratched the surface… 
• actions 
• alerting 
• analytics 
• auditing 
• Berkshelf 
• bootstrap 
• built-in and custom 
• CD/CI frameworks 
(ant, maven, 
Jenkins, etc.) 
• chef (executable) 
• chef-apply 
• chef-client 
• chef-metal 
• chef-shell 
• ChefSpec 
• cookbook metadata 
• cookbook 
versioning 
• cookbooks 
• data bags 
• definitions 
• delete validation 
keys 
• diagnostics 
• encrypted 
• environments 
• event logging 
• handlers 
• HEC signup 
• HWRP 
• idempotence 
• kitchen 
• knife 
• knife-ec2 and 
friends 
• LWRP 
• monitoring 
• multiple data 
centers 
• node attributes 
• nodes 
• ohai 
• orchestration 
• performance 
testing 
• provisioning 
• push jobs 
• recipes 
• reporting 
• resource 
notifications 
• resources 
• roles 
• rubocop 
• food critic 
• Serverspec 
• scaling 
• search 
• server/data locality 
• source control 
(GitHub, etc.) 
• standard & custom 
plugin 
• Starter Kit 
• Supermarket 
• TDD 
• templates
Build Anything Automatically 
• Simple internal applications 
•Workstations 
• Hadoop clusters 
• IaaS infrastructure 
• PaaS infrastructure 
• SaaS applications 
• Storage systems 
• You name it 
http://www.flickr.com/photos/hyku/245010680/
And Manage it Simply 
•Automatically reconfigure 
everything 
• Linux, Windows, Unixes, 
BSDs 
• Load balancers 
•Monitoring systems 
• Cloud migrations become 
trivial 
http://www.flickr.com/photos/helico/404640681/
Automate everything!
Chef Training 
Chef Fundamentals - 25/26 September, London 
Ping me for 10% Discount
Demo 
Deploying Apache web application in EC2 using 
Chef Provisioning
Demo 
• https://github.com/johnfitzpatrick/DevOps- 
Belfast/tree/18nov14

More Related Content

What's hot

Devops kc meetup_5_20_2013
Devops kc meetup_5_20_2013Devops kc meetup_5_20_2013
Devops kc meetup_5_20_2013
Aaron Blythe
 
Puppet Camp Melbourne 2014:
Puppet Camp Melbourne 2014: Puppet Camp Melbourne 2014:
Puppet Camp Melbourne 2014:
Puppet
 
Chef vs Puppet vs Ansible vs Saltstack | Configuration Management Tools | Dev...
Chef vs Puppet vs Ansible vs Saltstack | Configuration Management Tools | Dev...Chef vs Puppet vs Ansible vs Saltstack | Configuration Management Tools | Dev...
Chef vs Puppet vs Ansible vs Saltstack | Configuration Management Tools | Dev...
Simplilearn
 
Test driven infrastructure development (2 - puppetconf 2013 edition)
Test driven infrastructure development (2 - puppetconf 2013 edition)Test driven infrastructure development (2 - puppetconf 2013 edition)
Test driven infrastructure development (2 - puppetconf 2013 edition)
Tomas Doran
 
Helping Ops Help You: Development’s Role in Enabling Self-Service Operations
Helping Ops Help You:  Development’s Role in Enabling Self-Service OperationsHelping Ops Help You:  Development’s Role in Enabling Self-Service Operations
Helping Ops Help You: Development’s Role in Enabling Self-Service Operations
Rundeck
 
Releasing To Production Every Week India
Releasing To Production Every Week   IndiaReleasing To Production Every Week   India
Releasing To Production Every Week India
exortech
 

What's hot (20)

Introduction to DevOps
Introduction to DevOpsIntroduction to DevOps
Introduction to DevOps
 
Devops kc meetup_5_20_2013
Devops kc meetup_5_20_2013Devops kc meetup_5_20_2013
Devops kc meetup_5_20_2013
 
Your Goat Anti-Fragiled My Snowflake! Demystifying DevOps Jargon (30 minute v...
Your Goat Anti-Fragiled My Snowflake! Demystifying DevOps Jargon (30 minute v...Your Goat Anti-Fragiled My Snowflake! Demystifying DevOps Jargon (30 minute v...
Your Goat Anti-Fragiled My Snowflake! Demystifying DevOps Jargon (30 minute v...
 
Puppet Camp Melbourne 2014:
Puppet Camp Melbourne 2014: Puppet Camp Melbourne 2014:
Puppet Camp Melbourne 2014:
 
Chef vs Puppet vs Ansible vs Saltstack | Configuration Management Tools | Dev...
Chef vs Puppet vs Ansible vs Saltstack | Configuration Management Tools | Dev...Chef vs Puppet vs Ansible vs Saltstack | Configuration Management Tools | Dev...
Chef vs Puppet vs Ansible vs Saltstack | Configuration Management Tools | Dev...
 
Looking into HTML5 + CSS3
Looking into HTML5 + CSS3Looking into HTML5 + CSS3
Looking into HTML5 + CSS3
 
presentation
presentationpresentation
presentation
 
How to choose Enterprise tools to build out your Continuous Delivery toolscape
How to choose Enterprise tools to build out your Continuous Delivery toolscapeHow to choose Enterprise tools to build out your Continuous Delivery toolscape
How to choose Enterprise tools to build out your Continuous Delivery toolscape
 
Test driven infrastructure development (2 - puppetconf 2013 edition)
Test driven infrastructure development (2 - puppetconf 2013 edition)Test driven infrastructure development (2 - puppetconf 2013 edition)
Test driven infrastructure development (2 - puppetconf 2013 edition)
 
Getting started with PHP on IBM i
Getting started with PHP on IBM iGetting started with PHP on IBM i
Getting started with PHP on IBM i
 
Play Framework: Intro & High-Level Overview
Play Framework: Intro & High-Level OverviewPlay Framework: Intro & High-Level Overview
Play Framework: Intro & High-Level Overview
 
Engage 2016 - Adm01 - Back from the Dead: When Bad Code Kills a Good Server
Engage 2016 - Adm01 - Back from the Dead: When Bad Code Kills a Good ServerEngage 2016 - Adm01 - Back from the Dead: When Bad Code Kills a Good Server
Engage 2016 - Adm01 - Back from the Dead: When Bad Code Kills a Good Server
 
Helping Ops Help You: Development’s Role in Enabling Self-Service Operations
Helping Ops Help You:  Development’s Role in Enabling Self-Service OperationsHelping Ops Help You:  Development’s Role in Enabling Self-Service Operations
Helping Ops Help You: Development’s Role in Enabling Self-Service Operations
 
Troubleshooting K1000
Troubleshooting K1000Troubleshooting K1000
Troubleshooting K1000
 
Inventory Tips & Tricks
Inventory Tips & TricksInventory Tips & Tricks
Inventory Tips & Tricks
 
Provisioning Q and A
Provisioning Q and AProvisioning Q and A
Provisioning Q and A
 
Releasing To Production Every Week India
Releasing To Production Every Week   IndiaReleasing To Production Every Week   India
Releasing To Production Every Week India
 
Experiences with Debugging Data Races
Experiences with Debugging Data RacesExperiences with Debugging Data Races
Experiences with Debugging Data Races
 
Containerdays Intro to Habitat
Containerdays Intro to HabitatContainerdays Intro to Habitat
Containerdays Intro to Habitat
 
Continuos Integration and Delivery: from Zero to Hero with TeamCity, Docker a...
Continuos Integration and Delivery: from Zero to Hero with TeamCity, Docker a...Continuos Integration and Delivery: from Zero to Hero with TeamCity, Docker a...
Continuos Integration and Delivery: from Zero to Hero with TeamCity, Docker a...
 

Viewers also liked

Code to-cloud toolchain-LA OpenStack meet up-20140626
Code to-cloud toolchain-LA OpenStack meet up-20140626Code to-cloud toolchain-LA OpenStack meet up-20140626
Code to-cloud toolchain-LA OpenStack meet up-20140626
aedocw
 
Weekly lecture appsterdam_19mar2014
Weekly lecture appsterdam_19mar2014Weekly lecture appsterdam_19mar2014
Weekly lecture appsterdam_19mar2014
Microsoft
 

Viewers also liked (18)

Operate with an openstack deployment by code
Operate with an openstack deployment by codeOperate with an openstack deployment by code
Operate with an openstack deployment by code
 
Openstack Infrastructure Containerization
Openstack Infrastructure ContainerizationOpenstack Infrastructure Containerization
Openstack Infrastructure Containerization
 
Deploying OpenStack with Chef
Deploying OpenStack with ChefDeploying OpenStack with Chef
Deploying OpenStack with Chef
 
Monitoring federation open stack infrastructure
Monitoring federation open stack infrastructureMonitoring federation open stack infrastructure
Monitoring federation open stack infrastructure
 
CI/CD Pipeline to Deploy and Maintain an OpenStack IaaS Cloud
CI/CD Pipeline to Deploy and Maintain an OpenStack IaaS CloudCI/CD Pipeline to Deploy and Maintain an OpenStack IaaS Cloud
CI/CD Pipeline to Deploy and Maintain an OpenStack IaaS Cloud
 
Code to-cloud toolchain-LA OpenStack meet up-20140626
Code to-cloud toolchain-LA OpenStack meet up-20140626Code to-cloud toolchain-LA OpenStack meet up-20140626
Code to-cloud toolchain-LA OpenStack meet up-20140626
 
Weekly lecture appsterdam_19mar2014
Weekly lecture appsterdam_19mar2014Weekly lecture appsterdam_19mar2014
Weekly lecture appsterdam_19mar2014
 
CI/CD Pipeline with Docker
CI/CD Pipeline with DockerCI/CD Pipeline with Docker
CI/CD Pipeline with Docker
 
OpenStack - Infrastructure as a service
OpenStack - Infrastructure as a serviceOpenStack - Infrastructure as a service
OpenStack - Infrastructure as a service
 
OpenStack Infrastructure at any Scale - Simple is BEST!? - - OpenStack最新情報セミ...
OpenStack Infrastructure at any Scale - Simple is BEST!? -  - OpenStack最新情報セミ...OpenStack Infrastructure at any Scale - Simple is BEST!? -  - OpenStack最新情報セミ...
OpenStack Infrastructure at any Scale - Simple is BEST!? - - OpenStack最新情報セミ...
 
Infrastructure-as-Code and CI Infrastructure at OpenStack
Infrastructure-as-Code and CI Infrastructure at OpenStackInfrastructure-as-Code and CI Infrastructure at OpenStack
Infrastructure-as-Code and CI Infrastructure at OpenStack
 
Creating a CI/CD Pipeline for a Java EE Application in the Cloud
Creating a CI/CD Pipeline for a Java EE Application in the CloudCreating a CI/CD Pipeline for a Java EE Application in the Cloud
Creating a CI/CD Pipeline for a Java EE Application in the Cloud
 
A CI/CD Pipeline to Deploy and Maintain OpenStack - cfgmgmtcamp2015
A CI/CD Pipeline to Deploy and Maintain OpenStack - cfgmgmtcamp2015A CI/CD Pipeline to Deploy and Maintain OpenStack - cfgmgmtcamp2015
A CI/CD Pipeline to Deploy and Maintain OpenStack - cfgmgmtcamp2015
 
CI/CD for everyone else
CI/CD for everyone elseCI/CD for everyone else
CI/CD for everyone else
 
Kakao Openstack CI/CD
Kakao Openstack CI/CDKakao Openstack CI/CD
Kakao Openstack CI/CD
 
Continuous Integration, Build Pipelines and Continuous Deployment
Continuous Integration, Build Pipelines and Continuous DeploymentContinuous Integration, Build Pipelines and Continuous Deployment
Continuous Integration, Build Pipelines and Continuous Deployment
 
Business Process Maturity and Centers of Excellence
Business Process Maturity and Centers of ExcellenceBusiness Process Maturity and Centers of Excellence
Business Process Maturity and Centers of Excellence
 
Anatomy of a Continuous Integration and Delivery (CICD) Pipeline
Anatomy of a Continuous Integration and Delivery (CICD) PipelineAnatomy of a Continuous Integration and Delivery (CICD) Pipeline
Anatomy of a Continuous Integration and Delivery (CICD) Pipeline
 

Similar to 'Intro to Infrastructure as Code' - DevOps Belfast

August Webinar - Water Cooler Talks: A Look into a Developer's Workbench
August Webinar - Water Cooler Talks: A Look into a Developer's WorkbenchAugust Webinar - Water Cooler Talks: A Look into a Developer's Workbench
August Webinar - Water Cooler Talks: A Look into a Developer's Workbench
Howard Greenberg
 
Open Source Tools for Leveling Up Operations FOSSET 2014
Open Source Tools for Leveling Up Operations FOSSET 2014Open Source Tools for Leveling Up Operations FOSSET 2014
Open Source Tools for Leveling Up Operations FOSSET 2014
Mandi Walls
 

Similar to 'Intro to Infrastructure as Code' - DevOps Belfast (20)

Standardizing and Managing Your Infrastructure - MOSC 2011
Standardizing and Managing Your Infrastructure - MOSC 2011Standardizing and Managing Your Infrastructure - MOSC 2011
Standardizing and Managing Your Infrastructure - MOSC 2011
 
Ci & proServer
Ci & proServerCi & proServer
Ci & proServer
 
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20
 
SymfonyCon Madrid 2014 - Rock Solid Deployment of Symfony Apps
SymfonyCon Madrid 2014 - Rock Solid Deployment of Symfony AppsSymfonyCon Madrid 2014 - Rock Solid Deployment of Symfony Apps
SymfonyCon Madrid 2014 - Rock Solid Deployment of Symfony Apps
 
August Webinar - Water Cooler Talks: A Look into a Developer's Workbench
August Webinar - Water Cooler Talks: A Look into a Developer's WorkbenchAugust Webinar - Water Cooler Talks: A Look into a Developer's Workbench
August Webinar - Water Cooler Talks: A Look into a Developer's Workbench
 
Symfony Live NYC 2014 - Rock Solid Deployment of Symfony Apps
Symfony Live NYC 2014 -  Rock Solid Deployment of Symfony AppsSymfony Live NYC 2014 -  Rock Solid Deployment of Symfony Apps
Symfony Live NYC 2014 - Rock Solid Deployment of Symfony Apps
 
Deployment is the new build
Deployment is the new buildDeployment is the new build
Deployment is the new build
 
Open Source Tools for Leveling Up Operations FOSSET 2014
Open Source Tools for Leveling Up Operations FOSSET 2014Open Source Tools for Leveling Up Operations FOSSET 2014
Open Source Tools for Leveling Up Operations FOSSET 2014
 
Application Deployment at UC Riverside
Application Deployment at UC RiversideApplication Deployment at UC Riverside
Application Deployment at UC Riverside
 
Django dev-env-my-way
Django dev-env-my-wayDjango dev-env-my-way
Django dev-env-my-way
 
Picnic Software - Developing a flexible and scalable application
Picnic Software - Developing a flexible and scalable applicationPicnic Software - Developing a flexible and scalable application
Picnic Software - Developing a flexible and scalable application
 
Prescriptive System Security with InSpec
Prescriptive System Security with InSpecPrescriptive System Security with InSpec
Prescriptive System Security with InSpec
 
Prescriptive Security with InSpec - All Things Open 2019
Prescriptive Security with InSpec - All Things Open 2019Prescriptive Security with InSpec - All Things Open 2019
Prescriptive Security with InSpec - All Things Open 2019
 
How to Contribute to Ansible
How to Contribute to AnsibleHow to Contribute to Ansible
How to Contribute to Ansible
 
Hacking on WildFly 9
Hacking on WildFly 9Hacking on WildFly 9
Hacking on WildFly 9
 
What we talk about when we talk about DevOps
What we talk about when we talk about DevOpsWhat we talk about when we talk about DevOps
What we talk about when we talk about DevOps
 
How bigtop leveraged docker for build automation and one click hadoop provis...
How bigtop leveraged docker for build automation and  one click hadoop provis...How bigtop leveraged docker for build automation and  one click hadoop provis...
How bigtop leveraged docker for build automation and one click hadoop provis...
 
Pipeline as code for your infrastructure as Code
Pipeline as code for your infrastructure as CodePipeline as code for your infrastructure as Code
Pipeline as code for your infrastructure as Code
 
OSDC 2013 | Introduction into Chef by Andy Hawkins
OSDC 2013 | Introduction into Chef by Andy HawkinsOSDC 2013 | Introduction into Chef by Andy Hawkins
OSDC 2013 | Introduction into Chef by Andy Hawkins
 
Deploying your SaaS stack OnPrem
Deploying your SaaS stack OnPremDeploying your SaaS stack OnPrem
Deploying your SaaS stack OnPrem
 

Recently uploaded

+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 

Recently uploaded (20)

presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal OntologySix Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontology
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 

'Intro to Infrastructure as Code' - DevOps Belfast

  • 1. Infrastructure as Code And Quick Introduction to Chef DevOps Belfast Chef Fundamentals by Chef Software, Inc. is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.
  • 2. 14 months working at Chef >4 years working with Chef Who Am I? John Fitzpatrick johnfitzpatrick jfitzpatrick@getchef.com @jhnftzptrck Belfast, Northern Ireland Curriculum Development Training Community stuff
  • 3. Hello! • System Administrator?
  • 4. Hello! • System Administrator? • Developer?
  • 5. Hello! • System Administrator? • Developer? • Business Person (non-technical)?
  • 6. Hello! • System Administrator? • Developer? • Business Person (non-technical)? • Experience with Infrastructure as Code or Configuration Management?
  • 7. Hello! • System Administrator? • Developer? • Business Person (non-technical)? • Experience with Infrastructure as Code or Configuration Management? •Familiar with DevOps?
  • 9. IT is revolutionizing every sector • All companies in every sector have their own IT Departments automating their product offerings • They're each striving for • Automation • Faster Speed to Market • Consistent/Predictable Delivery • Cost Efficiency
  • 10. Manufacturing CAD/CAM • Faster Design, Develop & Deliver cycles • Lower costs • 24 hour shifts! • Faster time to market
  • 11. Online Banking • Convenience • Accuracy • Instant Access
  • 12. Online Retail • Convenient • Cheaper than a high street presence • Global reach • Faster time to market
  • 13. IT is revolutionizing every sector • Accounting • Advertising • Aerospace • Agriculture • Airline • Apparel & Accessories • Automotive • Banking • Biotechnology • Broadcasting • Brokerage • Call Centers • Cargo Handling • Chemical • Consulting • Defense • Department Stores • Education • Electronics • Energy • Entertainment & Leisure • Executive Search • Financial Services • Food, Beverage & Tobacco • Grocery • Health Care • Internet Publishing • Investment Banking • Legal • Manufacturing • Motion Picture & Video • Music • Newspaper Publishers • Online Auctions • Pension Funds • Pharmaceuticals • Private Equity • Publishing • Real Estate • Retail & Wholesale • Securities & Commodity Exchanges • Service • Telecommunications • Television • Transportation • Trucking • Venture Capital
  • 14. What about IT industry itself? • IT is still a manual process • Stuck in the 1990's
  • 15. IT Sector • Companies IT departments have been too busy providing solutions for their Companies' core business • But they've neglected their own back yard! Dev QA Prod • IT industry itself is the bottleneck - no one was attempting to automate the actual IT environment itself
  • 16. IT Industry • Software companies provide products that feed into these IT solutions • But sometimes they add complexity of solution to be maintained, and not ease of management
  • 18. Case Study: Online Retail • You place an order • Card payment is taken • Item is packed & shipped • Meanwhile, stock level is debited, & reordered from suppliers if it falls below a certain level • Totally automated – no human intervention! • However the s/w allowing this takes long development cycles (maybe months), through planning, development, testing/QA, and into production
  • 19. High Maintenance • Herculean task to keep these systems running, patched, upgraded, etc
  • 20. Waterfall Method – Silos! Business/Sales Lead Software Architect Development Team QA Team Sys Admin
  • 21. Silos are complex structures
  • 22. Option 1 • Spend money improving your Silo • Looks pretty but entrenches the problem
  • 23. Is there a better way? •We're in an era of unlimited compute • Speed is the new currency
  • 24. Option 2 • Pull them down
  • 25. Option 2 • Or at least let them become more latterly cross functional
  • 26. DevOps! • Implement DevOps culture • Communication • Collaboration • Integration • End Goal: CD Pipeline!
  • 28. Integrated Approach • Historically • Developers wrote software • Operations (Sys Admins) installed and maintained it • Now developers need to consider deploying their code while writing they're writing it
  • 29. CD Pipeline – Sample Workflow Automate dBuild and Unit Tests Developmen t Release to Productio n GitHub Automate d Acceptanc e Test Manual Code Review (?) Feedback Check-in (Linting) Feedback Trigger Check-in Feedback (Linting) Trigger Feedback Trigger Check-in Feedback (Linting) Feedback Trigger Trigger Trigger Trigger Feedback Feedback
  • 32. So where do I start? •The first step to establish a fully automated CD pipeline is to define your Infrastructure as Code
  • 33. Infrastructure as Code A SysAdmins Journey
  • 34. Typical Sys Admin Journey From a vanilla image… ssh into machine $ yum install httpd $ yum install wget $ yum install unzip $ wget https://somewhere/master.zip $ unzip master.zip $ cd myapp $ sudo mv html /var/www/ $ sudo su root $ python myappinstall.py $ apachectl graceful
  • 35. Typical Sys Admin Journey From a vanilla image… ssh into machine $ yum install httpd $ yum install wget $ yum install unzip $ wget https://somewhere/master.zip $ unzip master.zip $ cd myapp $ sudo mv html /var/www/ $ sudo su root $ python myappinstall.py $ apachectl graceful Log into machine
  • 36. Typical Sys Admin Journey From a vanilla image… ssh into machine $ yum install httpd $ yum install wget $ yum install unzip $ wget https://somewhere/master.zip $ unzip master.zip $ cd myapp $ sudo mv html /var/www/ $ sudo su root $ python myappinstall.py $ apachectl graceful Install a few packages
  • 37. Typical Sys Admin Journey From a vanilla image… ssh into machine $ yum install httpd $ yum install wget $ yum install unzip $ wget https://somewhere/master.zip $ unzip master.zip $ cd myapp $ sudo mv html /var/www/ $ sudo su root $ python myappinstall.py $ apachectl graceful Pull in some content
  • 38. Typical Sys Admin Journey From a vanilla image… ssh into machine $ yum install httpd $ yum install wget $ yum install unzip $ wget https://somewhere/master.zip $ unzip master.zip $ cd myapp $ sudo mv html /var/www/ $ sudo su root $ python myappinstall.py $ apachectl graceful Manipulate directories & content
  • 39. Typical Sys Admin Journey From a vanilla image… ssh into machine $ yum install httpd $ yum install wget $ yum install unzip $ wget https://somewhere/master.zip $ unzip master.zip $ cd myapp $ sudo mv html /var/www/ $ sudo su root $ python myappinstall.py $ apachectl graceful Re/start services
  • 40. Typical Sys Admin Journey ssh into machine $ yum install httpd $ yum install wget $ yum install unzip $ wget https://somewhere/master.zip $ unzip master.zip $ cd myapp $ sudo mv html /var/www/ $ sudo su root $ python myappinstall.py $ apachectl graceful • All commands are manual • Have different syntaxes • They're platform specific (RHEL, Debian, Windows, …) From a vanilla image…
  • 41. Typical Sys Admin Journey • Store notes in ~/server.txt
  • 42. Typical Sys Admin Journey • Store notes in ~/server.txt • Move notes to the wiki
  • 43. Typical Sys Admin Journey • Store notes in ~/server.txt • Move notes to the wiki •Write some scripts (setup.sh, fixit.sh, etc.)
  • 44. Typical Sys Admin Journey • Store notes in ~/server.txt • Move notes to the wiki •Write some scripts (setup.sh, fixit.sh, etc.) • setup.sh.BAK • fixit.sh.OLD
  • 45. Typical Sys Admin Journey • Store notes in ~/server.txt • Move notes to the wiki •Write some scripts (setup.sh, fixit.sh, etc.) • setup.sh.BAK • fixit.sh.OLD • Golden images and snapshots
  • 46. Sample Infrastructure Graphite Nagios JBoss Memcache Postgres Slaves Postgres Master
  • 47. New Compliance Mandate! Graphite Nagios JBoss Memcache Postgres Slaves Postgres Master • Move SSH off port 22 • Let’s put it on 2022
  • 48. 6 Golden Images to Update Graphite Nagios JBoss Memcache Postgres Slaves Postgres Master 1 3 4 5 2 6 /etc/ssh/sshd_config --- a/sshd_config +++ b/sshd_config -Port 22 +Port 2202
  • 49. 12 Instances to replace Graphite Nagios JBoss Memcache Postgres Slaves Postgres Master 1 3 2 4 5 6 7 8 10 9 11 12 • Launch • Delete • Repeat • Typically manually • High stakes • Late hours • Risky change
  • 50. The Infrastructure Code • Consistent DSL to manage any configuration component of a server • packages • files • users • … • Platform agnostic • Complex implementation code abstracted out
  • 51. Treat Infrastructure like any code base • Infrastructure configuration files stored in version control, e.g. GitHub • Infrastructure becomes as testable & repeatable as the application code you're delivering
  • 52. So what does this code look like? Lets drill down and look at how Chef implements this
  • 53. What is a Resource? • 'Resource', n., the basic unit of configuration in Chef • Represents a piece of the system & its desired state • A package to be installed • A service to be running • A file to be generated • A user to be managed • etc
  • 54. Example: 'package' Resource •Manage software packages • Install • Upgrade • Remove package "apache2" do action :install end
  • 55. Resources – Test and Repair • Resources use a test and repair model • Resource currently in the desired state? • Yes – Do nothing • No – Bring the resource into the desired state (repair)
  • 56. Example: 'file' Resource • Create a static file on disk • Add • Delete • Permissions • etc file "/var/www/html/index.html" do content "Hello, Belfast!" owner "root" group "root" end
  • 57. Example: 'template' Resource • Create a dynamic/templated file on disk • Install • Upgrade • Remove • etc template "/etc/apache2/apache2.conf" do source "apache2.conf.erb" owner "root" group "root" mode "0644" notifies :restart, "service[httpd]" variables( :document_root => node["docroot"], :port => "80" ) end
  • 58. Example: 'service' Resource •Manage services on the machine • start • stop • reload • etc service "apache2" do action [ :enable, :start ] end
  • 59. Other Resources • deploy • cron • directory • mount • user • group • dsc_resource •powershell_script • registry_key • remote_directory • route • and many more… • Or build your own!
  • 60. Declarative Interface • Resources are platform agnostic • Policy declares what state each resource should be in, but not how to get there package "ntp" • Chef decides how to implement this:- • OSX: brew install ntp • RHEL: yum install ntp • Ubuntu: agt-get install ntp • …
  • 61. What is a Chef Recipe? • 'Recipe', n., a file containing one or more Resources
  • 62. Recipe: An ordered list of resources package "apache2" do file "/var/www/html/index.html" do content "Hello, Belfast!" end template "/etc/apache2/apache2.conf" do source "apache2.conf.erb" notifies :restart, "service[httpd]" variables( :document_root => node["docroot"], :port => "80" ) end action :install end service "apache2" do action [:enable,:start] end
  • 63. Recipe: An ordered list of resources package "apache2" do file "/var/www/html/index.html" do content "Hello, Belfast!" end template "/etc/apache2/apache2.conf" do source "apache2.conf.erb" notifies :restart, "service[httpd]" variables( :document_root => node["docroot"], :port => "80" ) end action :install end service "apache2" do action [:enable,:start] end Order is critical!
  • 64. Chef Provisioning Resources (aka Chef Metal) • Provision servers in any our multiple locations with_driver 'aws' num_nodes = 100 1.upto(num_nodes) do |i| machine "hadoop#{i}" do recipe 'hadoop::default' recipe 'ntp' converge true tag 'hadoop' end end
  • 65. Chef Provisioning Resources (aka Chef Metal) • Provision servers in any our multiple locations with_driver 'aws' num_nodes = 100 1.upto(num_nodes) do |i| machine "hadoop#{i}" do recipe 'hadoop::default' recipe 'ntp' converge true tag 'hadoop' end end • Cloud: • FOG: EC2, DigitalOcean, OpenStack, etc. • Virtualization: • Vagrant: VirtualBox, VMWare Fusion, etc. • Vsphere • Containers: • LXC • Docker • Bare Metal: • SSH
  • 66. Extending the Ruby DSL • Recipes can include arbitrary Ruby code search(:node, "ipaddress:10*").each.uniq do|node| file "node_#{node[ipaddress]}" do content #{node[user]} end end %w{mysql apache2 ntp}.each do |pkg| package pkg do action :install end end 1.upto(10) do |i| file "file#{i}" do action :create end end
  • 67. Extending the Ruby DSL • Recipes can include arbitrary Ruby code search(:node, "ipaddress:10*").each.uniq do|node| file "node_#{node[ipaddress]}" do content #{node[user]} end end %w{mysql apache2 ntp}.each do |pkg| package pkg do action :install end end 1.upto(10) do |i| file "file#{i}" do action :create end end
  • 68. Extending the Ruby DSL • Recipes can include arbitrary Ruby code search(:node, "ipaddress:10*").each.uniq do|node| file "node_#{node[ipaddress]}" do content #{node[user]} end end %w{mysql apache2 ntp}.each do |pkg| package pkg do action :install end end 1.upto(10) do |i| file "file#{i}" do action :create end end Returns a Ruby array Std Ruby array methods
  • 69. Extending the Ruby DSL • Recipes can include arbitrary Ruby code search(:node, "ipaddress:10*").each.uniq do|node| file "node_#{node[ipaddress]}" do content #{node[user]} end end %w{mysql apache2 ntp}.each do |pkg| package pkg do action :install end end 1.upto(10) do |i| file "file#{i}" do action :create end end Declare an array explicitly Std Ruby array method
  • 70. Extending the Ruby DSL • Recipes can include arbitrary Ruby code search(:node, "ipaddress:10*").each.uniq do|node| file "node_#{node[ipaddress]}" do content #{node[user]} end end %w{mysql apache2 ntp}.each do |pkg| package pkg do action :install end end 1.upto(10) do |i| file "file#{i}" do action :create end end Std Ruby array method
  • 71. What is a Cookbook? • 'Cookbook', n., a collection of recipes & supporting files • These supporting files could be • attributes • templates • etc • Naming convention: 'cookbookname::recipename'
  • 72. What is a run_list? • 'run_list', n., a list of recipes to be run in a given 'chef-client' run run_list [ "recipe[ntp::client]" "recipe[users::default]" "role[webserver]" ]
  • 73. What is a run_list? • 'run_list', n., a list of recipes to be run in a given 'chef-client' run run_list [ "recipe[ntp::client]" "recipe[users::default]" "role[webserver]" ] Order is critical! cookbook recipe
  • 74. chef–client queries Chef Server for runlist Node Chef Server
  • 75. chef–client pulls node runlist from Chef Server Node Chef Server "recipe[ntp::client]" "recipe[users::default]" "role[webserver]"
  • 76. chef-client invokes the runlist Chef Server "recipe[ntp::client]" "recipe[users::default]" "role[webserver]"
  • 77. Distributed Architecture • Highly scalable distributed system • No processing performed on the Chef Server • All processing is performed on the node itself
  • 78. What can you manage? •Nodes represent any infrastructure component • Physical servers or virtual servers • Local hardware •Compute instances in a public or private cloud • Employee workstations • Could also be network hardware - switches, routers, etc
  • 79. Chef Server • Stores policy files and other configuration data • Maintains a searchable index of node data
  • 80. Use Case - Search Bringing it all Together
  • 81. Search • Chef Server maintains a searchable index of node data • Recipes can search for other nodes with specific • Roles • IP addresses • Hostnames • FQDNs • etc http://www.flickr.com/photos/kathycsus/2686772625
  • 82. Search for Nodes pool_members = search("node","role:webserver") template "/etc/haproxy/haproxy.cfg" do source "haproxy-app_lb.cfg.erb" owner "root" group "root" mode 0644 variables :pool_members => pool_members.uniq notifies :restart, "service[haproxy]" end
  • 84. pool_members = search("node","role:webserver") Webservers HAProxy Load Balancer Chef Server HA Proxy
  • 85. pool_members = search("node","role:webserver") Webservers HAProxy Load Balancer Chef Server HA Proxy
  • 86. pool_members = search("node","role:webserver") Webservers HAProxy Load Balancer Chef Server HA Proxy
  • 87. pool_members = search("node","role:webserver") Webservers HAProxy Load Balancer Chef Server { "web01" : { "hostname" : "web01", "ipaddress" : "10.1.1.1" }, "web02" : { "hostname" : "web02", "ipaddress" : "10.1.1.2" }, "web03" : { "hostname" : "web03", "ipaddress" : "10.1.1.3" }, "web04" : { "hostname" : "web04", "ipaddress" : "10.1.1.4" } } HA Proxy
  • 88. pool_members = search("node","role:webserver") Webservers HAProxy Load Balancer Chef Server { "web01" : { "hostname" : "web01", "ipaddress" : "10.1.1.1" }, "web02" : { "hostname" : "web02", "ipaddress" : "10.1.1.2" }, "web03" : { "hostname" : "web03", "ipaddress" : "10.1.1.3" }, "web04" : { "hostname" : "web04", "ipaddress" : "10.1.1.4" } } HA Proxy
  • 89. pool_members = search("node","role:webserver") Webservers HAProxy Load Balancer HA Proxy Chef Server pool_members { "web01" : { "hostname" : "web01", "ipaddress" : "10.1.1.1" }, "web02" : { "hostname" : "web02", "ipaddress" : "10.1.1.2" }, "web03" : { "hostname" : "web03", "ipaddress" : "10.1.1.3" }, "web04" : { "hostname" : "web04", "ipaddress" : "10.1.1.4" } } { "web01" : { "hostname" : "web01", "ipaddress" : "10.1.1.1" }, "web02" : { "hostname" : "web02", "ipaddress" : "10.1.1.2" }, "web03" : { "hostname" : "web03", "ipaddress" : "10.1.1.3" }, "web04" : { "hostname" : "web04", "ipaddress" : "10.1.1.4" } }
  • 90. HAProxy Configuration Webservers pool_members { "web01" : { "hostname" : "web01", "ipaddress" : "10.1.1.1" }, "web02" : { "hostname" : "web02", "ipaddress" : "10.1.1.2" }, "web03" : { "hostname" : "web03", "ipaddress" : "10.1.1.3" }, "web04" : { "hostname" : "web04", "ipaddress" : "10.1.1.4" } } HA Proxy
  • 91. HAProxy Configuration haproxy.cfg server web01 10.1.1.1 weight 1 maxconn 1 check server web02 10.1.1.2 weight 1 maxconn 1 check server web03 10.1.1.3 weight 1 maxconn 1 check server web04 10.1.1.4 weight 1 maxconn 1 check pool_members { "web01" : { "hostname" : "web01", "ipaddress" : "10.1.1.1" }, "web02" : { "hostname" : "web02", "ipaddress" : "10.1.1.2" }, "web03" : { "hostname" : "web03", "ipaddress" : "10.1.1.3" }, "web04" : { "hostname" : "web04", "ipaddress" : "10.1.1.4" } } Webservers HA Proxy
  • 92. HAProxy Configuration haproxy.cfg server web01 10.1.1.1 weight 1 maxconn 1 check server web02 10.1.1.2 weight 1 maxconn 1 check server web03 10.1.1.3 weight 1 maxconn 1 check server web04 10.1.1.4 weight 1 maxconn 1 check pool_members { "web01" : { "hostname" : "web01", "ipaddress" : "10.1.1.1" }, "web02" : { "hostname" : "web02", "ipaddress" : "10.1.1.2" }, "web03" : { "hostname" : "web03", "ipaddress" : "10.1.1.3" }, "web04" : { "hostname" : "web04", "ipaddress" : "10.1.1.4" } } Webservers HA Proxy
  • 93. HAProxy Configuration haproxy.cfg server web01 10.1.1.1 weight 1 maxconn 1 check server web02 10.1.1.2 weight 1 maxconn 1 check server web03 10.1.1.3 weight 1 maxconn 1 check server web04 10.1.1.4 weight 1 maxconn 1 check pool_members { "web01" : { "hostname" : "web01", "ipaddress" : "10.1.1.1" }, "web02" : { "hostname" : "web02", "ipaddress" : "10.1.1.2" }, "web03" : { "hostname" : "web03", "ipaddress" : "10.1.1.3" }, "web04" : { "hostname" : "web04", "ipaddress" : "10.1.1.4" } } Webservers HA Proxy
  • 94. HAProxy Configuration haproxy.cfg server web01 10.1.1.1 weight 1 maxconn 1 check server web02 10.1.1.2 weight 1 maxconn 1 check server web03 10.1.1.3 weight 1 maxconn 1 check server web04 10.1.1.4 weight 1 maxconn 1 check pool_members { "web01" : { "hostname" : "web01", "ipaddress" : "10.1.1.1" }, "web02" : { "hostname" : "web02", "ipaddress" : "10.1.1.2" }, "web03" : { "hostname" : "web03", "ipaddress" : "10.1.1.3" }, "web04" : { "hostname" : "web04", "ipaddress" : "10.1.1.4" } } Webservers HA Proxy
  • 95. So when this… 9 Jboss App Graphite Nagios Memcache Postgres Slaves Postgres Master
  • 96. Jboss App Graphite Nagios Memcache Postgres Slaves Postgres Master …becomes this
  • 97. ...this can happen automatically Graphite Nagios Memcache Postgres Slaves Postgres Master Jboss App
  • 99. Power of Infrastructure as Code • Reconstruct business from code repository, data backup, and compute resources
  • 100. We’ve only scratched the surface https://www.getchef.com/chef/
  • 101. We’ve only scratched the surface… • actions • alerting • analytics • auditing • Berkshelf • bootstrap • built-in and custom • CD/CI frameworks (ant, maven, Jenkins, etc.) • chef (executable) • chef-apply • chef-client • chef-metal • chef-shell • ChefSpec • cookbook metadata • cookbook versioning • cookbooks • data bags • definitions • delete validation keys • diagnostics • encrypted • environments • event logging • handlers • HEC signup • HWRP • idempotence • kitchen • knife • knife-ec2 and friends • LWRP • monitoring • multiple data centers • node attributes • nodes • ohai • orchestration • performance testing • provisioning • push jobs • recipes • reporting • resource notifications • resources • roles • rubocop • food critic • Serverspec • scaling • search • server/data locality • source control (GitHub, etc.) • standard & custom plugin • Starter Kit • Supermarket • TDD • templates
  • 102. Build Anything Automatically • Simple internal applications •Workstations • Hadoop clusters • IaaS infrastructure • PaaS infrastructure • SaaS applications • Storage systems • You name it http://www.flickr.com/photos/hyku/245010680/
  • 103. And Manage it Simply •Automatically reconfigure everything • Linux, Windows, Unixes, BSDs • Load balancers •Monitoring systems • Cloud migrations become trivial http://www.flickr.com/photos/helico/404640681/
  • 105. Chef Training Chef Fundamentals - 25/26 September, London Ping me for 10% Discount
  • 106.
  • 107. Demo Deploying Apache web application in EC2 using Chef Provisioning

Editor's Notes

  1. Developing super slick software applications, of ever increasing complexity, spanning multiple/many nodes, either in the cloud, or on premise, on bare metal or virtualised environments or a mixture of all.   All sectors are being revolutionised!! 
  2. IT has made Manufacturing is unrecognisable No human intervention can mean 24hr shifts
  3. Similar for finance - Reduction of man power,
  4. Similar for finance - Reduction of man power,
  5. We're all aware of benefits of Online Retail. Faster time to market, convenience buying
  6. Market trading, Airlines, social media, gaming entertainment In fact every industry Every business is a software business!!
  7. IT industry is still stuck in the 1990's
  8. These industries have been focusing on the end goals of their particular sector - IT was a means to an end
  9. The IT industry for its part delivers the building blocks for their applications – Apache, MongoDB, MySQL, Python, etc etc etc. No one has really looked at how each of these can be deployed together in an automated fashion
  10. The ability for an application to scale is determined by a number of key factors - Time - Complextity - Resources - human - Resources - servers This is true to scale both in short term (eg xmas rush), and for longer term growth
  11. Sales orders could be accepted, payment received, and goods shipped automatically, but the s/w allowing this took long development cycles (maybe months), through planning, development, testing/QA, and into production
  12. Everything done at once:- functional spec  detailed design specs  3-4 mths design development test cycles Should have smaller releases more often in a continuous way
  13. One problem is a lot of companies use the Waterfall Method - aka Rhythm Method, and we all know how precarious that is - when it goes wrong the consequences can be disastrous The waterfall method is build of slios (GRENADE ANALOGY)
  14. But Silos are complex structures – so what do we do?
  15. Better processes, reporting etc But you're just kicking the ball down the street There has to be a better way
  16. We're in a new era Speed is of the essence There are other options
  17. Implement a DevOps culture withing the organization DevOps is less about tools – more about mindset, attitude and cross-functional interaction Change is Constant. DevOps culture stresses communication, collaboration and integration between developers and sysadmin (Continuous Integration is a step along the way to Continuous Delivery)
  18. And importantly – Automate Everything!! Automation is key!
  19. Automation is key!
  20. The goal of Continuous Delivery pipline can be achieved by automating all processes – from development, through testing and into production e.g. Jenkins or Travis-CI, or Bamboo watching the repo and build out the node & kick of tests. Other tools like Test Kitchen, serverspec, chefspec, fodcrtitc, rubucop, etc <<ToDo: Add speaker notes>>
  21. Earlier I mentioned latterly cross-functional teams Let devs ssh into production to troubleshoot stuff, while sys admin learn to do their stuff via code Totally collaborative - Blame-free postmortems! http://www.troll.me/2011/08/31/ancient-aliens-guy/who-created-mind-fuck-aliens/
  22. Q. Why do we want to automate? A. So we can reap the benefits of speed, consistency and scale
  23. The first step is to implement automation infrastructure as code
  24. Typically SSH into the machine, install a few packages, pull in some content, edit a few config files, restart apache, etc The commands can be scripted, but would take a few if/then/else statements to cover different platforms
  25. Log into machine
  26. Install a few packages
  27. Pull in some content
  28. Manipulate directories & content
  29. Re/start services
  30. All commands are manual They have different syntaxes They're platform specific (RHEL, Debian, Windows, …) Its all a bit of a hack
  31. He/she keeps notes in text files
  32. Maintains config steps in a wiki
  33. They automate using bash scripts
  34. With their own version control
  35. And maintain golden images & snapshots
  36. Run the code periodically to ensure node complies with policy, e.g. new user added to AD or LDAP?
  37. In Chef, configurations are in 'cookbooks' and 'recipes'
  38. techy drill down on Chef DSL - Resources, Recipes & Cookbooks… Just to give a flavour of what we're talking about
  39. Resources are the primitives you use to build out your code
  40. This means The package should be installed NOT Install this package
  41. This file should exist NOT create this file
  42. As opposed to Linux (packages, files, services), the holy trinity in the Windows world is more “packages, registry keys, services). The windows_package resource has a mock URL (MS URLs are dreadfully long). It takes options “/quiet and /restart”. The action is to install. The windows_registry resource enables Remote Desktop and pokes a firewall hole. The W3SVC is IIS.
  43. Desired State Configuration (DSC) Use the route resource to manage the system routing table in a Linux environment.
  44. Windows could be choclately
  45. As well as configuring individual servers, you can use chef to provision multiple servers across any environment, AMI is defaulted for region here https://github.com/opscode/chef-provisioning-aws/blob/master/lib/chef/provisioning/aws_driver/driver.rb#L356-379 But can be overwritten using ':image' – see https://github.com/opscode/chef-provisioning-aws/blob/master/lib/chef/provisioning/aws_driver/driver.rb#L205
  46. if you're in AWS, various AWS objects like SNS topics, SQS queues, IAM users, ELBs, etc. can be managed.
  47. As opposed to Linux (packages, files, services), the holy trinity in the Windows world is more “packages, registry keys, services). The windows_package resource has a mock URL (MS URLs are dreadfully long). It takes options “/quiet and /restart”. The action is to install. The windows_registry resource enables Remote Desktop and pokes a firewall hole. The W3SVC is IIS.
  48. As opposed to Linux (packages, files, services), the holy trinity in the Windows world is more “packages, registry keys, services). The windows_package resource has a mock URL (MS URLs are dreadfully long). It takes options “/quiet and /restart”. The action is to install. The windows_registry resource enables Remote Desktop and pokes a firewall hole. The W3SVC is IIS.
  49. Recipes can be extended using Ruby to build out complex recipes
  50. Recipes can be extended using Ruby to build out complex recipes
  51. Recipes can be extended using Ruby to build out complex recipes
  52. Recipes can be extended using Ruby to build out complex recipes
  53. Recipes can be extended using Ruby to build out complex recipes
  54. chef-client pings chef server and for its runlist? When the chef-server run on the node it asks the chef server what policy should I follow, or what is my run list
  55. Chef server looks at the run_list and sends the appropriate cookbooks to the node
  56. Chef-client then executes the resources on the run list Chef is a highly scalable distributed system No processing performed on the Chef Server All processing is performed on the node itself All the heavy lifting is done on the node!! the server is quite light weight!
  57. network device support for some vendors Arista, Juniper, Cisco
  58. Chef is a highly scalable distributed system No processing performed on the Chef Server All processing is performed on the node itself Chef Server is Open Source. Free for up to 25 nodes: Management Console HA and Replication Analytics Platform
  59. Skip this and move to Demo if running short on time
  60. Chef Search is one of its killer features. It enables you to do a lot of heavy lifting easily. Search for nodes by their roles, or other attributes (you assign, or assume via cookbooks).
  61. Infrastructure as code allows you to automatically build an infrastructre and deploy your code on any platform (Ubuntu, RHEL, Windows), and in any environment – ec2, RAX, OpenStack, vmware, bare metal, etc Stop for a minute and think about what we're saying here. Think about how freeing this can be. The next configuration change you need to make in production starts with a commit to your version control system. You can re-provision your infrastructure with another service provider; move from the data center to the clould and back again.How will this impact the way you run operations in your organization?What questions do you have?
  62. Chef Server is All Open Source The following are free for up to 25 nodes: Management Console HA and Replication Analytics Platform
  63. AMI is defaulted for region here https://github.com/opscode/chef-provisioning-aws/blob/master/lib/chef/provisioning/aws_driver/driver.rb#L356-379 But can be overwritten using ':image' – see https://github.com/opscode/chef-provisioning-aws/blob/master/lib/chef/provisioning/aws_driver/driver.rb#L205