Agile Deploymentswith Puppet
Gary LarizzaPuppet Labs
@glarizza
Saturday, October 22, 2011
Agile Deploymentswith Puppet
Gary LarizzaPuppet Labs
@glarizza
http://bit.ly/garydevops
Saturday, October 22, 2011
DevOps• Culture not tools?
• Release Management?
• http://slidesha.re/itweapon
• http://bit.ly/toolsmatter
• http://slidesha.re/devopstools
Saturday, October 22, 2011
Example of ‘poor
deployment’
Saturday, October 22, 2011
Saturday, October 22, 2011
Developer
Operations
Saturday, October 22, 2011
Developer
Operations
Saturday, October 22, 2011
Developer
Production
Operations
Saturday, October 22, 2011
Developer
Production
Staging
Operations
Saturday, October 22, 2011
Developer
Production
Staging
Operations
Saturday, October 22, 2011
Developer
Production
Staging
Operations
Saturday, October 22, 2011
Developer
Production
Staging
Operations
Saturday, October 22, 2011
Developer
Production
Staging
Build Time
Operations
Day(s)
Saturday, October 22, 2011
Developer
Production
Staging QA
Build Time
Operations
Day(s)
Saturday, October 22, 2011
Developer
Production
Staging QA
Build Time
Operations
Day(s)
Saturday, October 22, 2011
Developer
Production
Staging QA
Build Time
Operations
Day(s)
Saturday, October 22, 2011
Developer
Production
Staging QA
Build Time
Operations
Day(s) Week(s)
Saturday, October 22, 2011
Developer
Production
Staging QA
Build Time
Operations
Day(s) Week(s)
Saturday, October 22, 2011
Developer
Production
Staging QA
UK
Build Time
Operations
Day(s) Week(s)
Saturday, October 22, 2011
Developer
Production
Staging QA
UK
Build Time
Operations
Day(s) Week(s)
Saturday, October 22, 2011
Developer
Production
Staging QA
UK
China
Build Time
Operations
Day(s) Week(s)
Saturday, October 22, 2011
Developer
Production
Staging QA
UK
China
Build Time
Operations
Day(s) Week(s)
Saturday, October 22, 2011
Developer
Production
Staging QA
UK
China
Canada
Build Time
Operations
Day(s) Week(s)
Saturday, October 22, 2011
Developer
Production
Staging QA
UK
China
Canada
Build Time
Operations
Day(s) Week(s)
Saturday, October 22, 2011
Developer
Production
Staging QA
UK
China
Canada
Build Time
Operations
Day(s) Week(s) ???
Saturday, October 22, 2011
Rampinationhttp://bit.ly/pconfkeynote
Saturday, October 22, 2011
Example of ‘Agile’
Saturday, October 22, 2011
Saturday, October 22, 2011
Developer
Operations
Saturday, October 22, 2011
Developer
Production
Operations
Saturday, October 22, 2011
Developer
Production
Operations
Configuration Data
Saturday, October 22, 2011
Developer
Production
Operations
Configuration Data
Saturday, October 22, 2011
Developer
Production
Operations
Configuration Data
Saturday, October 22, 2011
Developer
Production
Operations
Configuration Data
Saturday, October 22, 2011
Developer
Production
StagingOperations
Configuration Data
Saturday, October 22, 2011
Developer
Production
Staging
Build Time
Operations
10 Minutes
Configuration Data
Saturday, October 22, 2011
Developer
Production
Staging
Build Time
Operations
10 Minutes
Configuration Data
Saturday, October 22, 2011
Developer
Production
Staging
Build Time
Operations
10 Minutes
Configuration Data
Saturday, October 22, 2011
Developer
Production
Staging QA
Build Time
Operations
10 Minutes 1-2 Hours
Configuration Data
Saturday, October 22, 2011
Developer
Production
Staging QA
Build Time
Operations
10 Minutes 1-2 Hours
Configuration Data
Saturday, October 22, 2011
Developer
Production
Staging QA
Build Time
Operations
10 Minutes 1-2 Hours
Configuration Data
Saturday, October 22, 2011
Developer
Production
Staging QA
Build Time
Operations
10 Minutes 1-2 Hours 3 Hours
Configuration Data
Developer Reach
Saturday, October 22, 2011
Developer
Production
Staging QA
Build Time
Operations
10 Minutes 1-2 Hours 3 Hours
Configuration Data
Developer Reach
Saturday, October 22, 2011
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
Infrastructure as Code with Puppet
• Define what needs to be done
• Model your ideal state with simple resources
• Configured State vs. Running State
• Choose your level of commitment
Saturday, October 22, 2011
Resource Abstraction Layer
Saturday, October 22, 2011
Resource Abstraction Layer
Saturday, October 22, 2011
Resource Abstraction Layer
Saturday, October 22, 2011
Resource Abstraction Layer
/usr/bin/yum -y install httpd
Saturday, October 22, 2011
Saturday, October 22, 2011
Bare Machine
Provisioning
Base Install
Configure
Assigned Role
Maintenance
Puppet’s Task
Saturday, October 22, 2011
Puppet Resources
service { 'httpd': ensure => running, enable => true, hasstatus => true, hasrestart => true,}
Saturday, October 22, 2011
Type
Puppet Resources
service { 'httpd': ensure => running, enable => true, hasstatus => true, hasrestart => true,}
Saturday, October 22, 2011
Type Title
Puppet Resources
service { 'httpd': ensure => running, enable => true, hasstatus => true, hasrestart => true,}
Saturday, October 22, 2011
Type Title
Attributes
Puppet Resources
service { 'httpd': ensure => running, enable => true, hasstatus => true, hasrestart => true,}
Saturday, October 22, 2011
Facter
• Describes aspects of your machine - “facts”
• Facts written in Ruby
• Nice library of existing facts
• Custom facts are easy
Saturday, October 22, 2011
garys-mbp:$ facterdomain => puppetlabs.lanfacterversion => 1.5.8fqdn => garys-mbp.puppetlabs.lanhardwaremodel => x86_64hostname => garys-mbpkernel => Darwinmacosx_buildversion => 10K549macosx_productname => Mac OS Xmacosx_productversion => 10.6.8macosx_productversion_major => 10.6macosx_productversion_minor => 8<...>
Facter
Saturday, October 22, 2011
Facter.add("computername") do confine :kernel => :darwin setcode('scutil --get ComputerName'.chomp)end
computername scutil --get ComputerName
Custom Fact
Saturday, October 22, 2011
Facter.add("computername") do confine :kernel => :darwin setcode('scutil --get ComputerName'.chomp)end
computername scutil --get ComputerName
Custom Fact
Saturday, October 22, 2011
Facter.add("computername") do confine :kernel => :darwin setcode('scutil --get ComputerName'.chomp)end
computername scutil --get ComputerName
Fact name
Custom Fact
Saturday, October 22, 2011
Facter.add("computername") do confine :kernel => :darwin setcode('scutil --get ComputerName'.chomp)end
computername scutil --get ComputerName
Command to Execute
Fact name
Custom Fact
Saturday, October 22, 2011
Facter.add("computername") do confine :kernel => :darwin setcode('scutil --get ComputerName'.chomp)end
computername scutil --get ComputerName
Command to Execute
Fact name
Custom Fact
Saturday, October 22, 2011
Custom Fact
ENV.each do |key,val| Facter.add("env_#{key}") do setcode do val end endend
Saturday, October 22, 2011
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
Data Separation Examples
Saturday, October 22, 2011
Node Inheritancenode common { $dnsserver = '8.8.8.8' $searchdomain = 'puppetlabs.vm'}
node devops inherits common { $dnsserver = '10.13.1.3'}
node 'agent.puppetlabs.vm' inherits devops { file { '/etc/resolv.conf': content => "search ${searchdomain}\n nameserver ${dnsserver}\n", }}
Saturday, October 22, 2011
Data Class in Moduleclass 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
Extlookup
dnsserver, 8.8.8.8searchdomain, puppetlabs.vm
dnsserver, 10.13.1.2
common.csv devops.csv
$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
External Node Classifier
---classes: - dnsparameters: searchdomain : ‘puppetlabs.vm’ dnsserver : ‘10.13.1.2’
Saturday, October 22, 2011
Hiera
• Hierarchal data lookup system
• Structured data backend
• YAML, JSON, and current Puppet state
• http://bit.ly/hieradata
Saturday, October 22, 2011
Saturday, October 22, 2011
Global Defaults
Saturday, October 22, 2011
Global Defaults
Environment
Saturday, October 22, 2011
Global Defaults
Environment
Role
Saturday, October 22, 2011
Global Defaults
Environment
Role
Saturday, October 22, 2011
Global Defaults
Environment
Role
Saturday, October 22, 2011
Global Defaults
Environment
Role
Resultant Data Configuration
Saturday, October 22, 2011
Saturday, October 22, 2011
Global Defaults
Saturday, October 22, 2011
Global Defaults
---ntpserver : time.puppetlabs.compuppetserver : puppet.puppetlabs.comenvironment: production
Saturday, October 22, 2011
Global Defaults
---ntpserver: time.puppetlabs.compuppetserver: puppet.puppetlabs.comenvironment: production
Saturday, October 22, 2011
Global Defaults
Environment
---ntpserver: time.puppetlabs.compuppetserver: puppet.puppetlabs.comenvironment: production
Saturday, October 22, 2011
Global Defaults
Environment
---stompserver : stomp-qa.puppetlabs.compuppetserver : puppet-qa.puppetlabs.comenvironment: qa
---ntpserver: time.puppetlabs.compuppetserver: puppet.puppetlabs.comenvironment: production
Saturday, October 22, 2011
Global Defaults
Environment
---ntpserver: time.puppetlabs.com
stompserver: stomp-qa.puppetlabs.comenvironment: qapuppetserver: puppet-qa.puppetlabs.com
Saturday, October 22, 2011
Global Defaults
Environment
Role
---ntpserver: time.puppetlabs.com
stompserver: stomp-qa.puppetlabs.comenvironment: qapuppetserver: puppet-qa.puppetlabs.com
Saturday, October 22, 2011
Global Defaults
Environment
Role
---storeconfigs: true
---ntpserver: time.puppetlabs.com
stompserver: stomp-qa.puppetlabs.comenvironment: qapuppetserver: puppet-qa.puppetlabs.com
Saturday, October 22, 2011
Global Defaults
Environment
Role
---ntpserver: time.puppetlabs.com
stompserver: stomp-qa.puppetlabs.comenvironment: qa
storeconfigs: true
puppetserver: puppet-qa.puppetlabs.com
Saturday, October 22, 2011
DEMO TIME
Saturday, October 22, 2011
Devops Survey
• http://bit.ly/devopssurvey
Saturday, October 22, 2011
Code is online
https://github.com/glarizza/puppet-datademo
Saturday, October 22, 2011
Gary Larizza
• Twitter : @glarizza
• Email: [email protected]
• Web: http://www.puppetlabs.com
Saturday, October 22, 2011