agile deployments with puppet

91
Agile Deployments with Puppet Gary Larizza Puppet Labs @glarizza Saturday, October 22, 2011

Upload: puppet-labs

Post on 03-Jun-2015

3.179 views

Category:

Technology


3 download

DESCRIPTION

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

TRANSCRIPT

Page 1: Agile Deployments with Puppet

Agile Deploymentswith Puppet

Gary LarizzaPuppet Labs

@glarizza

Saturday, October 22, 2011

Page 2: Agile Deployments with Puppet

Agile Deploymentswith Puppet

Gary LarizzaPuppet Labs

@glarizza

http://bit.ly/garydevops

Saturday, October 22, 2011

Page 4: Agile Deployments with Puppet

Example of ‘poor

deployment’

Saturday, October 22, 2011

Page 5: Agile Deployments with Puppet

Saturday, October 22, 2011

Page 6: Agile Deployments with Puppet

Developer

Operations

Saturday, October 22, 2011

Page 7: Agile Deployments with Puppet

Developer

Operations

Saturday, October 22, 2011

Page 8: Agile Deployments with Puppet

Developer

Production

Operations

Saturday, October 22, 2011

Page 9: Agile Deployments with Puppet

Developer

Production

Staging

Operations

Saturday, October 22, 2011

Page 10: Agile Deployments with Puppet

Developer

Production

Staging

Operations

Saturday, October 22, 2011

Page 11: Agile Deployments with Puppet

Developer

Production

Staging

Operations

Saturday, October 22, 2011

Page 12: Agile Deployments with Puppet

Developer

Production

Staging

Operations

Saturday, October 22, 2011

Page 13: Agile Deployments with Puppet

Developer

Production

Staging

Build Time

Operations

Day(s)

Saturday, October 22, 2011

Page 14: Agile Deployments with Puppet

Developer

Production

Staging QA

Build Time

Operations

Day(s)

Saturday, October 22, 2011

Page 15: Agile Deployments with Puppet

Developer

Production

Staging QA

Build Time

Operations

Day(s)

Saturday, October 22, 2011

Page 16: Agile Deployments with Puppet

Developer

Production

Staging QA

Build Time

Operations

Day(s)

Saturday, October 22, 2011

Page 17: Agile Deployments with Puppet

Developer

Production

Staging QA

Build Time

Operations

Day(s) Week(s)

Saturday, October 22, 2011

Page 18: Agile Deployments with Puppet

Developer

Production

Staging QA

Build Time

Operations

Day(s) Week(s)

Saturday, October 22, 2011

Page 19: Agile Deployments with Puppet

Developer

Production

Staging QA

UK

Build Time

Operations

Day(s) Week(s)

Saturday, October 22, 2011

Page 20: Agile Deployments with Puppet

Developer

Production

Staging QA

UK

Build Time

Operations

Day(s) Week(s)

Saturday, October 22, 2011

Page 21: Agile Deployments with Puppet

Developer

Production

Staging QA

UK

China

Build Time

Operations

Day(s) Week(s)

Saturday, October 22, 2011

Page 22: Agile Deployments with Puppet

Developer

Production

Staging QA

UK

China

Build Time

Operations

Day(s) Week(s)

Saturday, October 22, 2011

Page 23: Agile Deployments with Puppet

Developer

Production

Staging QA

UK

China

Canada

Build Time

Operations

Day(s) Week(s)

Saturday, October 22, 2011

Page 24: Agile Deployments with Puppet

Developer

Production

Staging QA

UK

China

Canada

Build Time

Operations

Day(s) Week(s)

Saturday, October 22, 2011

Page 25: Agile Deployments with Puppet

Developer

Production

Staging QA

UK

China

Canada

Build Time

Operations

Day(s) Week(s) ???

Saturday, October 22, 2011

Page 26: Agile Deployments with Puppet

Rampinationhttp://bit.ly/pconfkeynote

Saturday, October 22, 2011

Page 27: Agile Deployments with Puppet

Example of ‘Agile’

Saturday, October 22, 2011

Page 28: Agile Deployments with Puppet

Saturday, October 22, 2011

Page 29: Agile Deployments with Puppet

Developer

Operations

Saturday, October 22, 2011

Page 30: Agile Deployments with Puppet

Developer

Production

Operations

Saturday, October 22, 2011

Page 31: Agile Deployments with Puppet

Developer

Production

Operations

Configuration Data

Saturday, October 22, 2011

Page 32: Agile Deployments with Puppet

Developer

Production

Operations

Configuration Data

Saturday, October 22, 2011

Page 33: Agile Deployments with Puppet

Developer

Production

Operations

Configuration Data

Saturday, October 22, 2011

Page 34: Agile Deployments with Puppet

Developer

Production

Operations

Configuration Data

Saturday, October 22, 2011

Page 35: Agile Deployments with Puppet

Developer

Production

StagingOperations

Configuration Data

Saturday, October 22, 2011

Page 36: Agile Deployments with Puppet

Developer

Production

Staging

Build Time

Operations

10 Minutes

Configuration Data

Saturday, October 22, 2011

Page 37: Agile Deployments with Puppet

Developer

Production

Staging

Build Time

Operations

10 Minutes

Configuration Data

Saturday, October 22, 2011

Page 38: Agile Deployments with Puppet

Developer

Production

Staging

Build Time

Operations

10 Minutes

Configuration Data

Saturday, October 22, 2011

Page 39: Agile Deployments with Puppet

Developer

Production

Staging QA

Build Time

Operations

10 Minutes 1-2 Hours

Configuration Data

Saturday, October 22, 2011

Page 40: Agile Deployments with Puppet

Developer

Production

Staging QA

Build Time

Operations

10 Minutes 1-2 Hours

Configuration Data

Saturday, October 22, 2011

Page 41: Agile Deployments with Puppet

Developer

Production

Staging QA

Build Time

Operations

10 Minutes 1-2 Hours

Configuration Data

Saturday, October 22, 2011

Page 42: Agile Deployments with Puppet

Developer

Production

Staging QA

Build Time

Operations

10 Minutes 1-2 Hours 3 Hours

Configuration Data

Developer Reach

Saturday, October 22, 2011

Page 43: Agile Deployments with Puppet

Developer

Production

Staging QA

Build Time

Operations

10 Minutes 1-2 Hours 3 Hours

Configuration Data

Developer Reach

Saturday, October 22, 2011

Page 44: Agile Deployments with Puppet

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

Page 45: Agile Deployments with Puppet

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

Page 46: Agile Deployments with Puppet

Resource Abstraction Layer

Saturday, October 22, 2011

Page 47: Agile Deployments with Puppet

Resource Abstraction Layer

Saturday, October 22, 2011

Page 48: Agile Deployments with Puppet

Resource Abstraction Layer

Saturday, October 22, 2011

Page 49: Agile Deployments with Puppet

Resource Abstraction Layer

/usr/bin/yum -y install httpd

Saturday, October 22, 2011

Page 50: Agile Deployments with Puppet

Saturday, October 22, 2011

Page 51: Agile Deployments with Puppet

Bare Machine

Provisioning

Base Install

Configure

Assigned Role

Maintenance

Puppet’s Task

Saturday, October 22, 2011

Page 52: Agile Deployments with Puppet

Puppet Resources

service { 'httpd':  ensure  => running,  enable   => true, hasstatus => true,  hasrestart => true,}

Saturday, October 22, 2011

Page 53: Agile Deployments with Puppet

Type

Puppet Resources

service { 'httpd':  ensure  => running,  enable   => true, hasstatus => true,  hasrestart => true,}

Saturday, October 22, 2011

Page 54: Agile Deployments with Puppet

Type Title

Puppet Resources

service { 'httpd':  ensure  => running,  enable   => true, hasstatus => true,  hasrestart => true,}

Saturday, October 22, 2011

Page 55: Agile Deployments with Puppet

Type Title

Attributes

Puppet Resources

service { 'httpd':  ensure  => running,  enable   => true, hasstatus => true,  hasrestart => true,}

Saturday, October 22, 2011

Page 56: Agile Deployments with Puppet

Facter

• Describes aspects of your machine - “facts”

• Facts written in Ruby

• Nice library of existing facts

• Custom facts are easy

Saturday, October 22, 2011

Page 57: Agile Deployments with Puppet

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

Page 58: Agile Deployments with Puppet

Facter.add("computername") do  confine :kernel => :darwin  setcode('scutil --get ComputerName'.chomp)end

computername     scutil --get ComputerName

Custom Fact

Saturday, October 22, 2011

Page 59: Agile Deployments with Puppet

Facter.add("computername") do  confine :kernel => :darwin  setcode('scutil --get ComputerName'.chomp)end

computername     scutil --get ComputerName

Custom Fact

Saturday, October 22, 2011

Page 60: Agile Deployments with Puppet

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

Page 61: Agile Deployments with Puppet

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

Page 62: Agile Deployments with Puppet

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

Page 63: Agile Deployments with Puppet

Custom Fact

ENV.each do |key,val| Facter.add("env_#{key}") do   setcode do val end endend

Saturday, October 22, 2011

Page 64: Agile Deployments with Puppet

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

Page 65: Agile Deployments with Puppet

Data Separation Examples

Saturday, October 22, 2011

Page 66: Agile Deployments with Puppet

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

Page 67: Agile Deployments with Puppet

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

Page 68: Agile Deployments with Puppet

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

Page 69: Agile Deployments with Puppet

External Node Classifier

---classes: - dnsparameters: searchdomain : ‘puppetlabs.vm’ dnsserver : ‘10.13.1.2’

Saturday, October 22, 2011

Page 70: Agile Deployments with Puppet

Hiera

• Hierarchal data lookup system

• Structured data backend

• YAML, JSON, and current Puppet state

• http://bit.ly/hieradata

Saturday, October 22, 2011

Page 71: Agile Deployments with Puppet

Saturday, October 22, 2011

Page 72: Agile Deployments with Puppet

Global Defaults

Saturday, October 22, 2011

Page 73: Agile Deployments with Puppet

Global Defaults

Environment

Saturday, October 22, 2011

Page 74: Agile Deployments with Puppet

Global Defaults

Environment

Role

Saturday, October 22, 2011

Page 75: Agile Deployments with Puppet

Global Defaults

Environment

Role

Saturday, October 22, 2011

Page 76: Agile Deployments with Puppet

Global Defaults

Environment

Role

Saturday, October 22, 2011

Page 77: Agile Deployments with Puppet

Global Defaults

Environment

Role

Resultant Data Configuration

Saturday, October 22, 2011

Page 78: Agile Deployments with Puppet

Saturday, October 22, 2011

Page 79: Agile Deployments with Puppet

Global Defaults

Saturday, October 22, 2011

Page 80: Agile Deployments with Puppet

Global Defaults

---ntpserver : time.puppetlabs.compuppetserver : puppet.puppetlabs.comenvironment: production

Saturday, October 22, 2011

Page 81: Agile Deployments with Puppet

Global Defaults

---ntpserver: time.puppetlabs.compuppetserver: puppet.puppetlabs.comenvironment: production

Saturday, October 22, 2011

Page 82: Agile Deployments with Puppet

Global Defaults

Environment

---ntpserver: time.puppetlabs.compuppetserver: puppet.puppetlabs.comenvironment: production

Saturday, October 22, 2011

Page 83: Agile Deployments with Puppet

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

Page 84: Agile Deployments with Puppet

Global Defaults

Environment

---ntpserver: time.puppetlabs.com

stompserver: stomp-qa.puppetlabs.comenvironment: qapuppetserver: puppet-qa.puppetlabs.com

Saturday, October 22, 2011

Page 85: Agile Deployments with Puppet

Global Defaults

Environment

Role

---ntpserver: time.puppetlabs.com

stompserver: stomp-qa.puppetlabs.comenvironment: qapuppetserver: puppet-qa.puppetlabs.com

Saturday, October 22, 2011

Page 86: Agile Deployments with Puppet

Global Defaults

Environment

Role

---storeconfigs: true

---ntpserver: time.puppetlabs.com

stompserver: stomp-qa.puppetlabs.comenvironment: qapuppetserver: puppet-qa.puppetlabs.com

Saturday, October 22, 2011

Page 87: Agile Deployments with Puppet

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

Page 88: Agile Deployments with Puppet

DEMO TIME

Saturday, October 22, 2011

Page 89: Agile Deployments with Puppet

Devops Survey

• http://bit.ly/devopssurvey

Saturday, October 22, 2011

Page 90: Agile Deployments with Puppet

Code is online

https://github.com/glarizza/puppet-datademo

Saturday, October 22, 2011

Page 91: Agile Deployments with Puppet

Gary Larizza

• Twitter : @glarizza

• Email: [email protected]

• Web: http://www.puppetlabs.com

Saturday, October 22, 2011