Presentation given at by Gary Larizza at Camp Devops in Chicago ( http://www.campdevops.com ) on agile deployments with Puppet.
Learn more about Puppet: www.puppetlabs.com
Subscribe to Gary on Speakerdeck: https://speakerdeck.com/glarizza
36. Developer
Configuration Production
Data
Staging
Operations
10 Minutes
Build Time
Saturday, October 22, 2011
37. Developer
Configuration Production
Data
Staging
Operations
10 Minutes
Build Time
Saturday, October 22, 2011
38. Developer
Configuration Production
Data
Staging
Operations
10 Minutes
Build Time
Saturday, October 22, 2011
39. Developer
Configuration Production
Data
Staging QA
Operations
10 Minutes 1-2 Hours
Build Time
Saturday, October 22, 2011
40. Developer
Configuration Production
Data
Staging QA
Operations
10 Minutes 1-2 Hours
Build Time
Saturday, October 22, 2011
41. Developer
Configuration Production
Data
Staging QA
Operations
10 Minutes 1-2 Hours
Build Time
Saturday, October 22, 2011
42. Developer Reach
Developer
Configuration Production
Data
Staging QA
Operations
10 Minutes 1-2 Hours 3 Hours
Build Time
Saturday, October 22, 2011
43. Developer Reach
Developer
Configuration Production
Data
Staging QA
Operations
10 Minutes 1-2 Hours 3 Hours
Build Time
Saturday, October 22, 2011
44. What can Ops
learn from Dev?
• Do developers re-write their
code at every step?
• Version control
• Testing frameworks
• Expose ‘settings’ through
configuration data
Saturday, October 22, 2011
45. Infrastructure as Code
with Puppet
• Configured State vs.
• Define what needs to be done
Running State
• Model your ideal state with
• Choose
your level of
simple resources
commitment
Saturday, October 22, 2011
53. Puppet Resources
Type
service { 'httpd':
ensure => running,
enable => true,
hasstatus => true,
hasrestart => true,
}
Saturday, October 22, 2011
54. Puppet Resources
Type Title
service { 'httpd':
ensure => running,
enable => true,
hasstatus => true,
hasrestart => true,
}
Saturday, October 22, 2011
55. Puppet Resources
Type Title
service { 'httpd':
ensure => running,
enable => true,
hasstatus => true,
hasrestart => true,
}
Attributes
Saturday, October 22, 2011
56. Facter
• Describes aspects of your machine - “facts”
• Facts written in Ruby
• Nice library of existing facts
• Custom facts are easy
Saturday, October 22, 2011
57. Facter
garys-mbp:$ facter
domain => puppetlabs.lan
facterversion => 1.5.8
fqdn => garys-mbp.puppetlabs.lan
hardwaremodel => x86_64
hostname => garys-mbp
kernel => Darwin
macosx_buildversion => 10K549
macosx_productname => Mac OS X
macosx_productversion => 10.6.8
macosx_productversion_major => 10.6
macosx_productversion_minor => 8
<...>
Saturday, October 22, 2011
58. Custom Fact
Facter.add("computername") do
computername
confine :kernel => :darwin
setcode('scutil --get ComputerName'.chomp)
scutil ComputerName
end
Saturday, October 22, 2011
59. Custom Fact
Facter.add("computername") do
computername
confine :kernel => :darwin
setcode('scutil --get ComputerName'.chomp)
scutil ComputerName
end
Saturday, October 22, 2011
60. Custom Fact
Fact name
Facter.add("computername") do
computername
confine :kernel => :darwin
setcode('scutil --get ComputerName'.chomp)
scutil ComputerName
end
Saturday, October 22, 2011
61. Custom Fact
Fact name
Facter.add("computername") do
computername
confine :kernel => :darwin
setcode('scutil --get ComputerName'.chomp)
scutil ComputerName
end
Command to Execute
Saturday, October 22, 2011
62. Custom Fact
Fact name
Facter.add("computername") do
computername
confine :kernel => :darwin
setcode('scutil --get ComputerName'.chomp)
scutil ComputerName
end
Command to Execute
Saturday, October 22, 2011
63. Custom Fact
ENV.each do |key,val|
Facter.add("env_#{key}") do
setcode do
val
end
end
end
Saturday, October 22, 2011
64. Separate Data from Logic
• Configuration Data adapts to environment
• Easy deployment - Puppet modules do not change
• Eliminate SSH access for deployment
Saturday, October 22, 2011
67. Data Class in Module
class dns::params {
$dnsserver = '8.8.8.8'
$searchdomain = 'puppetlabs.vm'
}
class dns(
$dnsserver = $dns::params::dnsserver,
$searchdomain = $dns::params::searchdomain
) inherits dns::params {
file { '/etc/resolv.conf':
content => "search ${searchdomain}n nameserver ${dnsserver}n",
}
}
Saturday, October 22, 2011
68. Extlookup
common.csv devops.csv
dnsserver, 8.8.8.8 dnsserver, 10.13.1.2
searchdomain, puppetlabs.vm
$extlookup_datadir = "/etc/puppetlabs/puppet/data"
$extlookup_precedence = [$clientcert, $environment, $architecture, 'common']
node 'agent.puppetlabs.vm' {
include dns
}
class dns {
$dnsserver = extlookup('dnsserver')
$searchdomain = extlookup('searchdomain')
}
Saturday, October 22, 2011
69. External Node Classifier
---
classes:
- dns
parameters:
searchdomain : ‘puppetlabs.vm’
dnsserver : ‘10.13.1.2’
Saturday, October 22, 2011
70. Hiera
• Hierarchal data lookup system
• Structured data backend
• YAML, JSON, and current Puppet state
• http://bit.ly/hieradata
Saturday, October 22, 2011
80. Global Defaults
---
ntpserver: time.puppetlabs.com
puppetserver: puppet.puppetlabs.com
environment: production
Saturday, October 22, 2011
81. Global Defaults
---
ntpserver: time.puppetlabs.com
puppetserver: puppet.puppetlabs.com
environment: production
Saturday, October 22, 2011
82. Global Defaults
Environment
---
ntpserver: time.puppetlabs.com
puppetserver: puppet.puppetlabs.com
environment: production
Saturday, October 22, 2011
83. Global Defaults
Environment
--- ---
ntpserver: time.puppetlabs.com
stompserver: stomp-qa.puppetlabs.com puppetserver: puppet.puppetlabs.com
environment: production
puppetserver: puppet-qa.puppetlabs.com
environment: qa
Saturday, October 22, 2011
84. Global Defaults
Environment
---
ntpserver: time.puppetlabs.com
puppetserver: puppet-qa.puppetlabs.com
environment: qa
stompserver: stomp-qa.puppetlabs.com
Saturday, October 22, 2011
85. Global Defaults
Environment
Role
---
ntpserver: time.puppetlabs.com
puppetserver: puppet-qa.puppetlabs.com
environment: qa
stompserver: stomp-qa.puppetlabs.com
Saturday, October 22, 2011
86. Global Defaults
Environment
Role
--- ---
ntpserver: time.puppetlabs.com
storeconfigs: true puppetserver: puppet-qa.puppetlabs.com
environment: qa
stompserver: stomp-qa.puppetlabs.com
Saturday, October 22, 2011
87. Global Defaults
Environment
Role
---
ntpserver: time.puppetlabs.com
puppetserver: puppet-qa.puppetlabs.com
environment: qa
stompserver: stomp-qa.puppetlabs.com
storeconfigs: true
Saturday, October 22, 2011