Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Agile Deployments with Puppet

glarizza
October 22, 2011

Agile Deployments with Puppet

Presentation given at Camp Devops in Chicago ( http://www.campdevops.com )

glarizza

October 22, 2011
Tweet

Other Decks in Technology

Transcript

  1. DevOps • Culture not tools? • Release Management? • http://slidesha.re/itweapon

    • http://bit.ly/toolsmatter • http://slidesha.re/devopstools Saturday, October 22, 2011
  2. Developer Production Staging QA UK China Canada Build Time Operations

    Day(s) Week(s) ??? Saturday, October 22, 2011
  3. Developer Production Staging QA Build Time Operations 10 Minutes 1-2

    Hours Configuration Data Saturday, October 22, 2011
  4. Developer Production Staging QA Build Time Operations 10 Minutes 1-2

    Hours Configuration Data Saturday, October 22, 2011
  5. Developer Production Staging QA Build Time Operations 10 Minutes 1-2

    Hours Configuration Data Saturday, October 22, 2011
  6. Developer Production Staging QA Build Time Operations 10 Minutes 1-2

    Hours 3 Hours Configuration Data Developer Reach Saturday, October 22, 2011
  7. Developer Production Staging QA Build Time Operations 10 Minutes 1-2

    Hours 3 Hours Configuration Data Developer Reach Saturday, October 22, 2011
  8. 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
  9. 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
  10. Puppet Resources service { 'httpd': ensure => running, enable =>

    true, hasstatus => true, hasrestart => true, } Saturday, October 22, 2011
  11. Type Puppet Resources service { 'httpd': ensure => running, enable

    => true, hasstatus => true, hasrestart => true, } Saturday, October 22, 2011
  12. Type Title Puppet Resources service { 'httpd': ensure => running,

    enable => true, hasstatus => true, hasrestart => true, } Saturday, October 22, 2011
  13. Type Title Attributes Puppet Resources service { 'httpd': ensure =>

    running, enable => true, hasstatus => true, hasrestart => true, } Saturday, October 22, 2011
  14. Facter • Describes aspects of your machine - “facts” •

    Facts written in Ruby • Nice library of existing facts • Custom facts are easy Saturday, October 22, 2011
  15. 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 <...> Facter Saturday, October 22, 2011
  16. Facter.add("computername") do confine :kernel => :darwin setcode('scutil --get ComputerName'.chomp) end

    computername scutil --get ComputerName Custom Fact Saturday, October 22, 2011
  17. Facter.add("computername") do confine :kernel => :darwin setcode('scutil --get ComputerName'.chomp) end

    computername scutil --get ComputerName Custom Fact Saturday, October 22, 2011
  18. 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
  19. 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
  20. 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
  21. 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
  22. Node Inheritance node 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
  23. 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
  24. Extlookup dnsserver, 8.8.8.8 searchdomain, 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
  25. External Node Classifier --- classes: - dns parameters: searchdomain :

    ‘puppetlabs.vm’ dnsserver : ‘10.13.1.2’ Saturday, October 22, 2011
  26. Hiera • Hierarchal data lookup system • Structured data backend

    • YAML, JSON, and current Puppet state • http://bit.ly/hieradata Saturday, October 22, 2011
  27. Global Defaults Environment --- stompserver: stomp-qa.puppetlabs.com puppetserver: puppet-qa.puppetlabs.com environment: qa

    --- ntpserver: time.puppetlabs.com puppetserver: puppet.puppetlabs.com environment: production Saturday, October 22, 2011
  28. Global Defaults Environment Role --- storeconfigs: true --- ntpserver: time.puppetlabs.com

    stompserver: stomp-qa.puppetlabs.com environment: qa puppetserver: puppet-qa.puppetlabs.com Saturday, October 22, 2011
  29. Global Defaults Environment Role --- ntpserver: time.puppetlabs.com stompserver: stomp-qa.puppetlabs.com environment:

    qa storeconfigs: true puppetserver: puppet-qa.puppetlabs.com Saturday, October 22, 2011
  30. Gary Larizza • Twitter: @glarizza • Email: gary@puppetlabs.com • Web:

    http://www.puppetlabs.com Saturday, October 22, 2011