agile deployments with puppet

Post on 03-Jun-2015

3.179 Views

Category:

Technology

3 Downloads

Preview:

Click to see full reader

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

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

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: gary@puppetlabs.com

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

Saturday, October 22, 2011

top related