SlideShare une entreprise Scribd logo
1  sur  85
Puppet for
    Dummies
    ZendCon - October 2011
    Santa Clara - United States




http://joind.in/3781
Who am I?


   Joshua Thijssen
   Senior Software Engineer @ Enrise (Netherlands)


   Development in PHP, Python, Perl, C, Java,
   and system & DB admin.


   Blog:    http://www.adayinthelifeof.nl
   Email:   joshua@enrise.com
   Twitter: @jaytaph




http://www.flickr.com/photos/akrabat/5422369749/in/photostream/
The question of the day
The question of the day




  What is puppet and why should I care?
Why use puppet?




 “People are finally figuring out puppet
 and how it gets you to the pub by 4pm.

 Note that I’ve been at this pub since
 2pm.”
                                 - Jorge Castro
Why use puppet?
What is puppet?




     Puppet is a (not necessarily the)
    solution for the following problem:

 How do we setup, manage, synchronize,
  and upgrade our internal and external
            infrastructure?
What is puppet?




   But isn’t that a sysadmin problem??
What is puppet?




                  Short answer:
What is puppet?




                  Short answer:

                     NO
How do we manage our infrastructure?
How do we manage our infrastructure?




 ‣ Solution 1: We don’t,
How do we manage our infrastructure?




 ‣ Solution 1: We don’t,
 ‣ Solution 2: We outsource,
How do we manage our infrastructure?




 ‣ Solution 1: We don’t,
 ‣ Solution 2: We outsource,
 ‣ Solution 3: We automate the process.
How do we manage our infrastructure? (1)
How do we manage our infrastructure? (1)


 ‣ It’s not funny: you find it more often
   than not. Especially inside small
   development companies.
How do we manage our infrastructure? (1)


 ‣ It’s not funny: you find it more often
   than not. Especially inside small
   development companies.
 ‣ Internal sysadmin, but he’s too busy
   with development to do sysadmin.
How do we manage our infrastructure? (1)


 ‣ It’s not funny: you find it more often
   than not. Especially inside small
   development companies.
 ‣ Internal sysadmin, but he’s too busy
   with development to do sysadmin.
 ‣ We only act on escalation
How do we manage our infrastructure? (1)


 ‣ It’s not funny: you find it more often
   than not. Especially inside small
   development companies.
 ‣ Internal sysadmin, but he’s too busy
   with development to do sysadmin.
 ‣ We only act on escalation
 ‣ reactive, not proactive
How do we manage our infrastructure? (2)
How do we manage our infrastructure? (2)



 ‣ Expensive $LA’s.
How do we manage our infrastructure? (2)



 ‣ Expensive $LA’s.
 ‣ What about INTERNAL servers like
   your development systems and
   infrastructure?
How do we manage our infrastructure? (2)



 ‣ Expensive $LA’s.
 ‣ What about INTERNAL servers like
   your development systems and
   infrastructure?
 ‣ Fight between stability and agility.
How do we manage our infrastructure? (2)



 ‣ Expensive $LA’s.
 ‣ What about INTERNAL servers like
   your development systems and
   infrastructure?
 ‣ Fight between stability and agility.
 ‣ Does your hosting company decide
   on whether you can use PHP5.3???
How do we manage our infrastructure? (3)
How do we manage our infrastructure? (3)




 ‣ We are in charge.
How do we manage our infrastructure? (3)




 ‣ We are in charge.
 ‣ Dedicated package repositories,
   tools, etc,..
How do we manage our infrastructure? (3)




 ‣ We are in charge.
 ‣ Dedicated package repositories,
   tools, etc,..
 ‣ Use: cfEngine, chef, puppet.
How do we manage our infrastructure? (3)




 ‣ We are in charge.
 ‣ Dedicated package repositories,
   tools, etc,..
 ‣ Use: cfEngine, chef, puppet.
 ‣ It’s actually not that hard.
What is puppet?


  ‣ Open source configuration
    management tool.
  ‣ Written in Ruby
  ‣ Open source
    https://github.com/puppetlabs
  ‣ Commercial version available
    (puppet enterprise)
What is puppet?




                                                       ¹
             ‣ Don’t tell HOW to do stuff.
             ‣ Tell WHAT to do.




¹ It’s not actually true, but good enough for now...
Architectural overview
Architectural overview




                     Puppet
Architectural overview



                              Puppet
         Puppet CA
                              Master

                     https

                     Puppet
                     Agent
Architectural overview



                              Puppet
         Puppet CA
                              Master

                     https

     Puppet          Puppet            Puppet
     Agent           Agent             Agent
Puppet structure




  ‣ Puppet master (puppetmasterd)
  ‣ Puppet cert (puppetca)
  ‣ Puppet agent (puppetd)
  ‣ Facter
Puppet master (puppetmasterd)




  ‣ Central server
  ‣ File & configuration server
  ‣ REST over HTTPS interface
Puppet cert (puppet CA)




 ‣ Certificate signing server
 ‣ Creates, signs, checks x509 certificates
 ‣ So you don’t have to worry about it
Puppet cert (puppet CA)



Check all systems that have connected to our CA server

root@puppetmaster:~# puppet cert --list --all
+ puppetmaster.noxlogic.local
(74:A7:C8:27:72:0D:C1:DD:B8:71:0D:4F:37:69:3D:0C)
puppetnode1.noxlogic.local
(09:9D:1E:01:D0:A7:BA:FB:8C:F4:2D:96:78:34:54:44)
Puppet cert (puppet CA)



                   Let’s sign our first node

root@puppetmaster:~# puppet cert --sign puppetnode1.noxlogic.local
....

root@puppetmaster:~# puppet cert --list --all
+ puppetmaster.noxlogic.local
(74:A7:C8:27:72:0D:C1:DD:B8:71:0D:4F:37:69:3D:0C)
+ puppetnode1.noxlogic.local
(CC:50:49:98:1D:F9:06:36:0E:6E:31:F5:27:D8:50:D8)
Puppet agent (puppetd)




  ‣ Runs on every node that will be
    managed by puppet.
  ‣ Calls the puppet master every 30
    minutes with system information.
  ‣ Receives and executes a catalog.
Facter




   ‣ Runs on nodes to gather system
     information.
   ‣ Returns $variables to be used in
     configuration.
Facter (1)


[root@puppetnode1 ~]# facter --puppet
architecture => x86_64
fqdn => puppetnode1.noxlogic.local
interfaces => eth1,eth2,lo
ipaddress_eth1 => 192.168.1.114
ipaddress_eth2 => 192.168.56.200
kernel => Linux
kernelmajversion => 2.6
operatingsystem => CentOS
operatingsystemrelease => 6.0
processor0 => Intel(R) Core(TM)2 Duo CPU             T7500   @ 2.20GHz
puppetversion => 2.6.9




‣ A simple list with info (also useable in your own tools)
Facter (2)



      ‣ You can add your own facts:
         ‣ project name
         ‣ master / slave database server
         ‣ zend server
         ‣ directadmin / plesk


‣ Very simple to add new facts (in ruby, that is)
Facter (3)


      zendstudio.rb:

      Facter.add(“Zendserver”) do
        confine :kernel => :linux
        setcode do
          if FileTest.exists?(“/usr/local/zend/bin”)
            “true”
          else
            “false”
          end
        end
      end




‣ Crude, but effective enough for us
How does it work




                    Check cert

   Master           Return facts     Client
                   Returns catalog
Puppet manifests



  ‣ Manifests are puppet definitions
  ‣ <filename>.pp
  ‣ Puppet DSL
  ‣ De-cla-ra-tive language
  ‣ Version your manifests! (git/svn)
Puppet manifests



   package { “mc” :
     ensure => present,
   }

   file { “/home/jaytaph/secret-ingredient.txt” :
     ensure => present,
     mode => 0600,
     user => ‘jaytaph’,
     group => ‘noxlogic’,
     source => “puppet:///secret.txt”,
   }
Puppet manifests




      package { “httpd” :
        ensure => present,
      }

      service { “httpd”:
        running => true,
        enable => true,
        require => Package[“httpd”],
      }




‣ Spot the problem....
Puppet manifests


     Centos / Redhat
     service: httpd
     package: httpd
     config: /etc/httpd/conf/httpd.conf
     vhosts: /etc/httpd/conf.d/*.conf

     Debian / Ubuntu
     service: apache2
     package: apache2
     config: /etc/apache2/httpd.conf
     vhosts: /etc/apache2/sites-available


‣ Different distributions, different names
Puppet manifests




      service { “apache”:
        case $operatingsystem {
          centos, redhat { $apache = “httpd” }
          debian, ubuntu { $apache = “apache2” }
          default : { fail(‘I don’t know this OS/distro’) }
        }

         name => $apache,
         running => true,
     }




‣ $operatingsystem is a FACT
Puppet manifests



  /etc/puppet/manifests/site.pp:
  node default {
    $def_packages = [ “mc”, “strace”, “sysstat” ]
    package { $def_packages :
      ensure => latest,
    }
  }




‣ “Main” manifest
Puppet manifests



   node ‘web.noxlogic.local’ {
     package { “httpd” :
       ensure => latest,
     }
   }
   node ‘db.noxlogic.local’ {
     package { “mysql-server” :
       ensure => installed,
     }
   }




‣ Defining nodes
Puppet manifests


 node basenode {
   user { “jaytaph” :
     ensure => present,
     gid => 1000,
     uid => 1000,
     home => “/home/jaytaph”,
     shell => “/bin/sh”,
     password => “supersecrethashedpassword”,
   }
 }

 node *.noxlogic.local inherits basenode {
   ...
 }
Puppet manifests
Puppet manifests


   class webserver {
     service { “apache”:
       ensure => running,
       require => Package[“httpd”],
    }
    package { “apache” :
       ensure => installed,
    }




   }
Puppet manifests


   class webserver {
     service { “apache”:
       ensure => running,
       require => Package[“httpd”],
    }
    package { “apache” :
       ensure => installed,
    }
       file { “vhost_$hostname” :
         path => “/etc/httpd/conf/10-vhost.conf”,
         content => template(“vhost.template.erb”),
         notify => Service[“httpd”],
       }
   }
Puppet manifests


 vhost.template.erb
       <virtualHost <%= ipaddress %>:80>
         ServerName <%= webserver_name %>
         ServerAlias <%= webserver_alias %>
         DocumentRoot <%= webserver_docroot %>
      </virtualHost>




‣ ERB Templates can use custom variables and facts
Puppet manifests


 node “web01.noxlogic.local” inherits base {
   $webserver_name = “web01.noxlogic.local”
   $webserver_alias = “www.noxlogic.local”
   $webserver_docroot = “/var/www/web01”
   import webserver
 }
 node “web02.noxlogic.local” inherits base {
   $webserver_name = “web02.noxlogic.local”
   $webserver_alias = “crm.noxlogic.local”
   $webserver_docroot = “/var/www/web02”
   import webserver
 }
What can puppet manage



     ‣ Almost everything.
     ‣ standard 48 different resource types
     ‣ Ranging from “file” to “cron” to
       “ssh_key” to “user” to “selinux”.
     ‣ Can control your Cisco routers and
       windows machines too (sortakinda)


‣ http://docs.puppetlabs.com/references/stable/type.html
Puppet modules




  ‣ A puppet module is a collection of
    resources, classes, templates.
  ‣ Used for easy distribution and
    code-reuse.
  ‣ Self-contained, run out-of-the-box
Puppet modules



  ‣ puppetforge / github
  ‣ Create your own (and share!).
  ‣ Use the ones from puppet
    enterprise edition.
  ‣ Use the standard layout / best
    practices
Puppet modules
 MODULE_PATH/
 └──downcased_module_name/
    ├──files/
    ├──manifests/
    │ ├──init.pp
    │ └──foo.pp
    ├──lib/
    │ ├──puppet/
    │ │ ├──parser/
    │ │ │ └──functions/
    │ │ ├──provider/
    │ │ └──type/
    │ └──facter/
    ├──templates/
    ├──tests
    │ ├──init.pp
    │ └──foo.pp
    └──README
Puppet modules
 class ntp::install {
     package{"ntpd":
         ensure => latest
     }
 }
 class ntp::config {
     File{
         require => Class["ntp::install"],
         notify => Class["ntp::service"],
         owner    => "root",
         group    => "root",
         mode     => 644
     }
     file{"/etc/ntp.conf":
              source => "puppet:///ntp/ntp.conf";
           "/etc/ntp/step-tickers":
              source => "puppet:///ntp/step-tickers";
     }
 }
 class ntp::service {
     service{"ntp":
         ensure => running,
         enable => true,
         require => Class["ntp::config"],
     }
 }
 class ntp {
     include ntp::install, ntp::config, ntp::service
 }
Test your modules




  ‣ (Unit)test your modules
  ‣ Test them with:
    puppet apply --noop
  ‣ More advanced testing: cucumber /
    cucumber-puppet (BDD)
External Node Configuration (1)




  ‣ Split modules and nodes
  ‣ Nodes should be classes - params
    only (best case scenario?)
  ‣ Nodes can be configured through
    YAML
External Node Configuration (2)


node1.enrise.local.yaml
---
classes:
 - base
parameters:
 puppetserver: puppet.enrise.local
External Node Configuration (2)


node1.enrise.local.yaml
---
classes:
 - base
parameters:
 puppetserver: puppet.enrise.local


                         node node1.enrise.local {
                           $puppetserver = ‘puppet.enrise.local’
                           include base
                         }
External Node Configuration (3)



Puppet doesn’t care how you create YAML files.
    ‣ Ruby, PHP, Python, Perl, Pony,
      shellscript.
    ‣ REST, SOAP, XMLRPC.
    ‣ Use a database backend.
    ‣ Or use LDAP instead of YAML.
Confusing puppet things
Confusing puppet things



 ‣ Puppet went from v0.25 to v2.6.
 ‣ REST interface since 2.6. XMLRPC
   before that.
 ‣ One binary to rule them all (puppet).
 ‣ Puppet v2.7 switched from GPLv2 to
   apache2.0 license.
Confusing puppet things




 ‣ --test does not mean dry-run!
   (--noop does).
 ‣ It’s not object oriented. (puppet
   class != php class)
 ‣ It’s a declarative language.
Puppet dashboard




http://media.techtarget.com/digitalguide/images/Misc/puppetDashboard.gif
Live demo | MCollective?
MCollective




‣ Puppet agent “calls” the master every 30
  minutes.
‣ But what about realtime command & control?
‣ “Puppet kick”... (meh)
‣ MCollective (Marionette Collective)
MCollective



     ‣ Which systems running a database
       and have 16GB or less?
     ‣ Which systems are using <50% of
       available memory?
     ‣ Restart all apache services in
       timezone GMT+5.


‣ How do we handle large number of nodes?
MCollective



      Client           Middleware          Node
                                           MCollective
                                            Server




                                           MCollective
        Client             ACTIVEMQ
                                            Server




                                           MCollective
                                            Server
  Collective

‣ Middleware takes care of distribution,
‣ queued, broadcast etc..
MCollective




      ‣ The collective

http://docs.puppetlabs.com/mcollective/reference/basic/subcollectives.html
MCollective


$ mc-facts operatingsystem
Report for fact: operatingsystem

     CentOS         found 3 times
     Debian         found 14 times
     Solaris        found 4 times


$ mc-facts -W operatingsystem=Centos operatingsystemrelease
Report for fact: operatingsystemrelease

     6.0           found 1 times
     5.6           found 2 times




‣ Filter out nodes based on facts
MCollective - cool stuff



   ‣ Display all running processes
   ‣ Run or deploy software
   ‣ Restart services
   ‣ Start puppet agent
   ‣ Upgrade your systems
Recap




        -ETOOMUCHINFO

           Let’s recap
Recap (1)



 ‣ Configuration management tool.
 ‣ Focusses on “what” instead of “how”.
 ‣ Scales from 1 to 100K+ systems.
 ‣ Uses descriptive manifests.
 ‣ Can use external node configurations.
Recap (2)




 ‣ Useful for sysadmins and developers.
 ‣ Keeps your infrastructure in sync.
 ‣ Keeps your infrastructure versioned.
 ‣ MCollective controls your hosts
   based on facts, not names.
Any questions?




http://farm1.static.flickr.com/73/163450213_18478d3aa6_d.jpg
‣ THANK YOU FOR YOUR ATTENTION

Contenu connexe

Tendances

How to Develop Puppet Modules: From Source to the Forge With Zero Clicks
How to Develop Puppet Modules: From Source to the Forge With Zero ClicksHow to Develop Puppet Modules: From Source to the Forge With Zero Clicks
How to Develop Puppet Modules: From Source to the Forge With Zero ClicksCarlos Sanchez
 
Chef Conf 2015: Package Management & Chef
Chef Conf 2015: Package Management & ChefChef Conf 2015: Package Management & Chef
Chef Conf 2015: Package Management & Chefice799
 
Puppet for Java developers - JavaZone NO 2012
Puppet for Java developers - JavaZone NO 2012Puppet for Java developers - JavaZone NO 2012
Puppet for Java developers - JavaZone NO 2012Carlos Sanchez
 
Augeas, swiss knife resources for your puppet tree
Augeas, swiss knife resources for your puppet treeAugeas, swiss knife resources for your puppet tree
Augeas, swiss knife resources for your puppet treeJulien Pivotto
 
Puppet Camp LA 2/19/2015
Puppet Camp LA 2/19/2015Puppet Camp LA 2/19/2015
Puppet Camp LA 2/19/2015ice799
 
PuppetCamp SEA 1 - Using Vagrant, Puppet, Testing & Hadoop
PuppetCamp SEA 1 - Using Vagrant, Puppet, Testing & HadoopPuppetCamp SEA 1 - Using Vagrant, Puppet, Testing & Hadoop
PuppetCamp SEA 1 - Using Vagrant, Puppet, Testing & HadoopWalter Heck
 
DevOps(4) : Ansible(2) - (MOSG)
DevOps(4) : Ansible(2) - (MOSG)DevOps(4) : Ansible(2) - (MOSG)
DevOps(4) : Ansible(2) - (MOSG)Soshi Nemoto
 
PuppetCamp SEA 1 - Use of Puppet
PuppetCamp SEA 1 - Use of PuppetPuppetCamp SEA 1 - Use of Puppet
PuppetCamp SEA 1 - Use of PuppetWalter Heck
 
Adventures in infrastructure as code
Adventures in infrastructure as codeAdventures in infrastructure as code
Adventures in infrastructure as codeJulian Simpson
 
Developing cacheable PHP applications - Confoo 2018
Developing cacheable PHP applications - Confoo 2018Developing cacheable PHP applications - Confoo 2018
Developing cacheable PHP applications - Confoo 2018Thijs Feryn
 
The DOM is a Mess @ Yahoo
The DOM is a Mess @ YahooThe DOM is a Mess @ Yahoo
The DOM is a Mess @ Yahoojeresig
 
연구자 및 교육자를 위한 계산 및 분석 플랫폼 설계 - PyCon KR 2015
연구자 및 교육자를 위한 계산 및 분석 플랫폼 설계 - PyCon KR 2015연구자 및 교육자를 위한 계산 및 분석 플랫폼 설계 - PyCon KR 2015
연구자 및 교육자를 위한 계산 및 분석 플랫폼 설계 - PyCon KR 2015Jeongkyu Shin
 
PECL Picks - Extensions to make your life better
PECL Picks - Extensions to make your life betterPECL Picks - Extensions to make your life better
PECL Picks - Extensions to make your life betterZendCon
 
Puppet at Opera Sofware - PuppetCamp Oslo 2013
Puppet at Opera Sofware - PuppetCamp Oslo 2013Puppet at Opera Sofware - PuppetCamp Oslo 2013
Puppet at Opera Sofware - PuppetCamp Oslo 2013Cosimo Streppone
 
JavaScript & HTML5 - Brave New World
JavaScript & HTML5 - Brave New WorldJavaScript & HTML5 - Brave New World
JavaScript & HTML5 - Brave New WorldRobert Nyman
 
Py conkr 20150829_docker-python
Py conkr 20150829_docker-pythonPy conkr 20150829_docker-python
Py conkr 20150829_docker-pythonEric Ahn
 
Continuous Delivery with Maven, Puppet and Tomcat - ApacheCon NA 2013
Continuous Delivery with Maven, Puppet and Tomcat - ApacheCon NA 2013Continuous Delivery with Maven, Puppet and Tomcat - ApacheCon NA 2013
Continuous Delivery with Maven, Puppet and Tomcat - ApacheCon NA 2013Carlos Sanchez
 
Original slides from Ryan Dahl's NodeJs intro talk
Original slides from Ryan Dahl's NodeJs intro talkOriginal slides from Ryan Dahl's NodeJs intro talk
Original slides from Ryan Dahl's NodeJs intro talkAarti Parikh
 
Asynchronous PHP and Real-time Messaging
Asynchronous PHP and Real-time MessagingAsynchronous PHP and Real-time Messaging
Asynchronous PHP and Real-time MessagingSteve Rhoades
 
Google Back To Front: From Gears to App Engine and Beyond
Google Back To Front: From Gears to App Engine and BeyondGoogle Back To Front: From Gears to App Engine and Beyond
Google Back To Front: From Gears to App Engine and Beyonddion
 

Tendances (20)

How to Develop Puppet Modules: From Source to the Forge With Zero Clicks
How to Develop Puppet Modules: From Source to the Forge With Zero ClicksHow to Develop Puppet Modules: From Source to the Forge With Zero Clicks
How to Develop Puppet Modules: From Source to the Forge With Zero Clicks
 
Chef Conf 2015: Package Management & Chef
Chef Conf 2015: Package Management & ChefChef Conf 2015: Package Management & Chef
Chef Conf 2015: Package Management & Chef
 
Puppet for Java developers - JavaZone NO 2012
Puppet for Java developers - JavaZone NO 2012Puppet for Java developers - JavaZone NO 2012
Puppet for Java developers - JavaZone NO 2012
 
Augeas, swiss knife resources for your puppet tree
Augeas, swiss knife resources for your puppet treeAugeas, swiss knife resources for your puppet tree
Augeas, swiss knife resources for your puppet tree
 
Puppet Camp LA 2/19/2015
Puppet Camp LA 2/19/2015Puppet Camp LA 2/19/2015
Puppet Camp LA 2/19/2015
 
PuppetCamp SEA 1 - Using Vagrant, Puppet, Testing & Hadoop
PuppetCamp SEA 1 - Using Vagrant, Puppet, Testing & HadoopPuppetCamp SEA 1 - Using Vagrant, Puppet, Testing & Hadoop
PuppetCamp SEA 1 - Using Vagrant, Puppet, Testing & Hadoop
 
DevOps(4) : Ansible(2) - (MOSG)
DevOps(4) : Ansible(2) - (MOSG)DevOps(4) : Ansible(2) - (MOSG)
DevOps(4) : Ansible(2) - (MOSG)
 
PuppetCamp SEA 1 - Use of Puppet
PuppetCamp SEA 1 - Use of PuppetPuppetCamp SEA 1 - Use of Puppet
PuppetCamp SEA 1 - Use of Puppet
 
Adventures in infrastructure as code
Adventures in infrastructure as codeAdventures in infrastructure as code
Adventures in infrastructure as code
 
Developing cacheable PHP applications - Confoo 2018
Developing cacheable PHP applications - Confoo 2018Developing cacheable PHP applications - Confoo 2018
Developing cacheable PHP applications - Confoo 2018
 
The DOM is a Mess @ Yahoo
The DOM is a Mess @ YahooThe DOM is a Mess @ Yahoo
The DOM is a Mess @ Yahoo
 
연구자 및 교육자를 위한 계산 및 분석 플랫폼 설계 - PyCon KR 2015
연구자 및 교육자를 위한 계산 및 분석 플랫폼 설계 - PyCon KR 2015연구자 및 교육자를 위한 계산 및 분석 플랫폼 설계 - PyCon KR 2015
연구자 및 교육자를 위한 계산 및 분석 플랫폼 설계 - PyCon KR 2015
 
PECL Picks - Extensions to make your life better
PECL Picks - Extensions to make your life betterPECL Picks - Extensions to make your life better
PECL Picks - Extensions to make your life better
 
Puppet at Opera Sofware - PuppetCamp Oslo 2013
Puppet at Opera Sofware - PuppetCamp Oslo 2013Puppet at Opera Sofware - PuppetCamp Oslo 2013
Puppet at Opera Sofware - PuppetCamp Oslo 2013
 
JavaScript & HTML5 - Brave New World
JavaScript & HTML5 - Brave New WorldJavaScript & HTML5 - Brave New World
JavaScript & HTML5 - Brave New World
 
Py conkr 20150829_docker-python
Py conkr 20150829_docker-pythonPy conkr 20150829_docker-python
Py conkr 20150829_docker-python
 
Continuous Delivery with Maven, Puppet and Tomcat - ApacheCon NA 2013
Continuous Delivery with Maven, Puppet and Tomcat - ApacheCon NA 2013Continuous Delivery with Maven, Puppet and Tomcat - ApacheCon NA 2013
Continuous Delivery with Maven, Puppet and Tomcat - ApacheCon NA 2013
 
Original slides from Ryan Dahl's NodeJs intro talk
Original slides from Ryan Dahl's NodeJs intro talkOriginal slides from Ryan Dahl's NodeJs intro talk
Original slides from Ryan Dahl's NodeJs intro talk
 
Asynchronous PHP and Real-time Messaging
Asynchronous PHP and Real-time MessagingAsynchronous PHP and Real-time Messaging
Asynchronous PHP and Real-time Messaging
 
Google Back To Front: From Gears to App Engine and Beyond
Google Back To Front: From Gears to App Engine and BeyondGoogle Back To Front: From Gears to App Engine and Beyond
Google Back To Front: From Gears to App Engine and Beyond
 

En vedette

Representation state transfer and some other important stuff
Representation state transfer and some other important stuffRepresentation state transfer and some other important stuff
Representation state transfer and some other important stuffJoshua Thijssen
 
Deploying and maintaining your software with RPM/APT
Deploying and maintaining your software with RPM/APTDeploying and maintaining your software with RPM/APT
Deploying and maintaining your software with RPM/APTJoshua Thijssen
 
Alice & bob public key cryptography 101 - uncon dpc
Alice & bob  public key cryptography 101 - uncon dpcAlice & bob  public key cryptography 101 - uncon dpc
Alice & bob public key cryptography 101 - uncon dpcJoshua Thijssen
 
15 protips for mysql users
15 protips for mysql users15 protips for mysql users
15 protips for mysql usersJoshua Thijssen
 
PFZ WorkshopDay Linux - Advanced
PFZ WorkshopDay Linux - AdvancedPFZ WorkshopDay Linux - Advanced
PFZ WorkshopDay Linux - AdvancedJoshua Thijssen
 
PFZ WorkshopDay Linux - Basic
PFZ WorkshopDay Linux - BasicPFZ WorkshopDay Linux - Basic
PFZ WorkshopDay Linux - BasicJoshua Thijssen
 
15 protips for mysql users pfz
15 protips for mysql users   pfz15 protips for mysql users   pfz
15 protips for mysql users pfzJoshua Thijssen
 
Alice & bob public key cryptography 101
Alice & bob  public key cryptography 101Alice & bob  public key cryptography 101
Alice & bob public key cryptography 101Joshua Thijssen
 
Alice & bob public key cryptography 101
Alice & bob  public key cryptography 101Alice & bob  public key cryptography 101
Alice & bob public key cryptography 101Joshua Thijssen
 
Puppet for dummies - ZendCon 2011 Edition
Puppet for dummies - ZendCon 2011 EditionPuppet for dummies - ZendCon 2011 Edition
Puppet for dummies - ZendCon 2011 EditionJoshua Thijssen
 
Unix command-line tools
Unix command-line toolsUnix command-line tools
Unix command-line toolsEric Wilson
 
Sed & awk the dynamic duo
Sed & awk   the dynamic duoSed & awk   the dynamic duo
Sed & awk the dynamic duoJoshua Thijssen
 

En vedette (18)

Representation state transfer and some other important stuff
Representation state transfer and some other important stuffRepresentation state transfer and some other important stuff
Representation state transfer and some other important stuff
 
Workshop unittesting
Workshop unittestingWorkshop unittesting
Workshop unittesting
 
Moved 301
Moved 301Moved 301
Moved 301
 
Deploying and maintaining your software with RPM/APT
Deploying and maintaining your software with RPM/APTDeploying and maintaining your software with RPM/APT
Deploying and maintaining your software with RPM/APT
 
Alice & bob public key cryptography 101 - uncon dpc
Alice & bob  public key cryptography 101 - uncon dpcAlice & bob  public key cryptography 101 - uncon dpc
Alice & bob public key cryptography 101 - uncon dpc
 
15 protips for mysql users
15 protips for mysql users15 protips for mysql users
15 protips for mysql users
 
PFZ WorkshopDay Linux - Advanced
PFZ WorkshopDay Linux - AdvancedPFZ WorkshopDay Linux - Advanced
PFZ WorkshopDay Linux - Advanced
 
PFZ WorkshopDay Linux - Basic
PFZ WorkshopDay Linux - BasicPFZ WorkshopDay Linux - Basic
PFZ WorkshopDay Linux - Basic
 
15 protips for mysql users pfz
15 protips for mysql users   pfz15 protips for mysql users   pfz
15 protips for mysql users pfz
 
Alice & bob public key cryptography 101
Alice & bob  public key cryptography 101Alice & bob  public key cryptography 101
Alice & bob public key cryptography 101
 
Cipher block modes
Cipher block modesCipher block modes
Cipher block modes
 
Awk programming
Awk programming Awk programming
Awk programming
 
Czzawk
CzzawkCzzawk
Czzawk
 
Alice & bob public key cryptography 101
Alice & bob  public key cryptography 101Alice & bob  public key cryptography 101
Alice & bob public key cryptography 101
 
Naive Bayes
Naive Bayes Naive Bayes
Naive Bayes
 
Puppet for dummies - ZendCon 2011 Edition
Puppet for dummies - ZendCon 2011 EditionPuppet for dummies - ZendCon 2011 Edition
Puppet for dummies - ZendCon 2011 Edition
 
Unix command-line tools
Unix command-line toolsUnix command-line tools
Unix command-line tools
 
Sed & awk the dynamic duo
Sed & awk   the dynamic duoSed & awk   the dynamic duo
Sed & awk the dynamic duo
 

Similaire à Puppet for dummies - PHPBenelux UG edition

Puppet for Sys Admins
Puppet for Sys AdminsPuppet for Sys Admins
Puppet for Sys AdminsPuppet
 
Getting started with puppet and vagrant (1)
Getting started with puppet and vagrant (1)Getting started with puppet and vagrant (1)
Getting started with puppet and vagrant (1)Puppet
 
Puppet for SysAdmins
Puppet for SysAdminsPuppet for SysAdmins
Puppet for SysAdminsPuppet
 
Using Puppet in Small Infrastructures
Using Puppet in Small InfrastructuresUsing Puppet in Small Infrastructures
Using Puppet in Small InfrastructuresRachel Andrew
 
V mware
V mwareV mware
V mwaredvmug1
 
Puppet Primer, Robbie Jerrom, Solution Architect VMware
Puppet Primer, Robbie Jerrom, Solution Architect VMwarePuppet Primer, Robbie Jerrom, Solution Architect VMware
Puppet Primer, Robbie Jerrom, Solution Architect VMwaresubtitle
 
Puppet at Bazaarvoice
Puppet at BazaarvoicePuppet at Bazaarvoice
Puppet at BazaarvoicePuppet
 
How I hack on puppet modules
How I hack on puppet modulesHow I hack on puppet modules
How I hack on puppet modulesKris Buytaert
 
Harmonious Development: Via Vagrant and Puppet
Harmonious Development: Via Vagrant and PuppetHarmonious Development: Via Vagrant and Puppet
Harmonious Development: Via Vagrant and PuppetAchieve Internet
 
Using Puppet - Real World Configuration Management
Using Puppet - Real World Configuration ManagementUsing Puppet - Real World Configuration Management
Using Puppet - Real World Configuration ManagementJames Turnbull
 
Puppet: Eclipsecon ALM 2013
Puppet: Eclipsecon ALM 2013Puppet: Eclipsecon ALM 2013
Puppet: Eclipsecon ALM 2013grim_radical
 
Adopt DevOps philosophy on your Symfony projects (Symfony Live 2011)
Adopt DevOps philosophy on your Symfony projects (Symfony Live 2011)Adopt DevOps philosophy on your Symfony projects (Symfony Live 2011)
Adopt DevOps philosophy on your Symfony projects (Symfony Live 2011)Fabrice Bernhard
 
PuppetCamp SEA 1 - Use of Puppet
PuppetCamp SEA 1 - Use of PuppetPuppetCamp SEA 1 - Use of Puppet
PuppetCamp SEA 1 - Use of PuppetOlinData
 
From Dev to DevOps - Codemotion ES 2012
From Dev to DevOps - Codemotion ES 2012From Dev to DevOps - Codemotion ES 2012
From Dev to DevOps - Codemotion ES 2012Carlos Sanchez
 
Puppet at janrain
Puppet at janrainPuppet at janrain
Puppet at janrainPuppet
 
Puppet atbazaarvoice
Puppet atbazaarvoicePuppet atbazaarvoice
Puppet atbazaarvoiceDave Barcelo
 
Dependencies Managers in C/C++. Using stdcpp 2014
Dependencies Managers in C/C++. Using stdcpp 2014Dependencies Managers in C/C++. Using stdcpp 2014
Dependencies Managers in C/C++. Using stdcpp 2014biicode
 
Rapid scaling in_the_cloud_with_puppet
Rapid scaling in_the_cloud_with_puppetRapid scaling in_the_cloud_with_puppet
Rapid scaling in_the_cloud_with_puppetCarl Caum
 

Similaire à Puppet for dummies - PHPBenelux UG edition (20)

Puppet for Sys Admins
Puppet for Sys AdminsPuppet for Sys Admins
Puppet for Sys Admins
 
Getting started with puppet and vagrant (1)
Getting started with puppet and vagrant (1)Getting started with puppet and vagrant (1)
Getting started with puppet and vagrant (1)
 
Puppet for SysAdmins
Puppet for SysAdminsPuppet for SysAdmins
Puppet for SysAdmins
 
Using Puppet in Small Infrastructures
Using Puppet in Small InfrastructuresUsing Puppet in Small Infrastructures
Using Puppet in Small Infrastructures
 
V mware
V mwareV mware
V mware
 
Puppet Primer, Robbie Jerrom, Solution Architect VMware
Puppet Primer, Robbie Jerrom, Solution Architect VMwarePuppet Primer, Robbie Jerrom, Solution Architect VMware
Puppet Primer, Robbie Jerrom, Solution Architect VMware
 
Puppet at Bazaarvoice
Puppet at BazaarvoicePuppet at Bazaarvoice
Puppet at Bazaarvoice
 
How I hack on puppet modules
How I hack on puppet modulesHow I hack on puppet modules
How I hack on puppet modules
 
Harmonious Development: Via Vagrant and Puppet
Harmonious Development: Via Vagrant and PuppetHarmonious Development: Via Vagrant and Puppet
Harmonious Development: Via Vagrant and Puppet
 
Using Puppet - Real World Configuration Management
Using Puppet - Real World Configuration ManagementUsing Puppet - Real World Configuration Management
Using Puppet - Real World Configuration Management
 
Puppet: Eclipsecon ALM 2013
Puppet: Eclipsecon ALM 2013Puppet: Eclipsecon ALM 2013
Puppet: Eclipsecon ALM 2013
 
Adopt DevOps philosophy on your Symfony projects (Symfony Live 2011)
Adopt DevOps philosophy on your Symfony projects (Symfony Live 2011)Adopt DevOps philosophy on your Symfony projects (Symfony Live 2011)
Adopt DevOps philosophy on your Symfony projects (Symfony Live 2011)
 
PuppetCamp SEA 1 - Use of Puppet
PuppetCamp SEA 1 - Use of PuppetPuppetCamp SEA 1 - Use of Puppet
PuppetCamp SEA 1 - Use of Puppet
 
From Dev to DevOps - Codemotion ES 2012
From Dev to DevOps - Codemotion ES 2012From Dev to DevOps - Codemotion ES 2012
From Dev to DevOps - Codemotion ES 2012
 
Puppet at janrain
Puppet at janrainPuppet at janrain
Puppet at janrain
 
Puppet atbazaarvoice
Puppet atbazaarvoicePuppet atbazaarvoice
Puppet atbazaarvoice
 
Dependencies Managers in C/C++. Using stdcpp 2014
Dependencies Managers in C/C++. Using stdcpp 2014Dependencies Managers in C/C++. Using stdcpp 2014
Dependencies Managers in C/C++. Using stdcpp 2014
 
One-Man Ops
One-Man OpsOne-Man Ops
One-Man Ops
 
Rapid scaling in_the_cloud_with_puppet
Rapid scaling in_the_cloud_with_puppetRapid scaling in_the_cloud_with_puppet
Rapid scaling in_the_cloud_with_puppet
 
Beyond Puppet
Beyond PuppetBeyond Puppet
Beyond Puppet
 

Dernier

Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demoHarshalMandlekar2
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxLoriGlavin3
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxLoriGlavin3
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...Wes McKinney
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality AssuranceInflectra
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rick Flair
 
Generative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfGenerative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfIngrid Airi González
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentPim van der Noll
 
Manual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditManual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditSkynet Technologies
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Farhan Tariq
 
A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI AgeCprime
 
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfpanagenda
 

Dernier (20)

Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demo
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...
 
Generative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfGenerative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdf
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
 
Manual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditManual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance Audit
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...
 
A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI Age
 
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
 

Puppet for dummies - PHPBenelux UG edition

  • 1. Puppet for Dummies ZendCon - October 2011 Santa Clara - United States http://joind.in/3781
  • 2. Who am I? Joshua Thijssen Senior Software Engineer @ Enrise (Netherlands) Development in PHP, Python, Perl, C, Java, and system & DB admin. Blog: http://www.adayinthelifeof.nl Email: joshua@enrise.com Twitter: @jaytaph http://www.flickr.com/photos/akrabat/5422369749/in/photostream/
  • 3. The question of the day
  • 4. The question of the day What is puppet and why should I care?
  • 5. Why use puppet? “People are finally figuring out puppet and how it gets you to the pub by 4pm. Note that I’ve been at this pub since 2pm.” - Jorge Castro
  • 7. What is puppet? Puppet is a (not necessarily the) solution for the following problem: How do we setup, manage, synchronize, and upgrade our internal and external infrastructure?
  • 8. What is puppet? But isn’t that a sysadmin problem??
  • 9. What is puppet? Short answer:
  • 10. What is puppet? Short answer: NO
  • 11. How do we manage our infrastructure?
  • 12. How do we manage our infrastructure? ‣ Solution 1: We don’t,
  • 13. How do we manage our infrastructure? ‣ Solution 1: We don’t, ‣ Solution 2: We outsource,
  • 14. How do we manage our infrastructure? ‣ Solution 1: We don’t, ‣ Solution 2: We outsource, ‣ Solution 3: We automate the process.
  • 15. How do we manage our infrastructure? (1)
  • 16. How do we manage our infrastructure? (1) ‣ It’s not funny: you find it more often than not. Especially inside small development companies.
  • 17. How do we manage our infrastructure? (1) ‣ It’s not funny: you find it more often than not. Especially inside small development companies. ‣ Internal sysadmin, but he’s too busy with development to do sysadmin.
  • 18. How do we manage our infrastructure? (1) ‣ It’s not funny: you find it more often than not. Especially inside small development companies. ‣ Internal sysadmin, but he’s too busy with development to do sysadmin. ‣ We only act on escalation
  • 19. How do we manage our infrastructure? (1) ‣ It’s not funny: you find it more often than not. Especially inside small development companies. ‣ Internal sysadmin, but he’s too busy with development to do sysadmin. ‣ We only act on escalation ‣ reactive, not proactive
  • 20. How do we manage our infrastructure? (2)
  • 21. How do we manage our infrastructure? (2) ‣ Expensive $LA’s.
  • 22. How do we manage our infrastructure? (2) ‣ Expensive $LA’s. ‣ What about INTERNAL servers like your development systems and infrastructure?
  • 23. How do we manage our infrastructure? (2) ‣ Expensive $LA’s. ‣ What about INTERNAL servers like your development systems and infrastructure? ‣ Fight between stability and agility.
  • 24. How do we manage our infrastructure? (2) ‣ Expensive $LA’s. ‣ What about INTERNAL servers like your development systems and infrastructure? ‣ Fight between stability and agility. ‣ Does your hosting company decide on whether you can use PHP5.3???
  • 25. How do we manage our infrastructure? (3)
  • 26. How do we manage our infrastructure? (3) ‣ We are in charge.
  • 27. How do we manage our infrastructure? (3) ‣ We are in charge. ‣ Dedicated package repositories, tools, etc,..
  • 28. How do we manage our infrastructure? (3) ‣ We are in charge. ‣ Dedicated package repositories, tools, etc,.. ‣ Use: cfEngine, chef, puppet.
  • 29. How do we manage our infrastructure? (3) ‣ We are in charge. ‣ Dedicated package repositories, tools, etc,.. ‣ Use: cfEngine, chef, puppet. ‣ It’s actually not that hard.
  • 30. What is puppet? ‣ Open source configuration management tool. ‣ Written in Ruby ‣ Open source https://github.com/puppetlabs ‣ Commercial version available (puppet enterprise)
  • 31. What is puppet? ¹ ‣ Don’t tell HOW to do stuff. ‣ Tell WHAT to do. ¹ It’s not actually true, but good enough for now...
  • 34. Architectural overview Puppet Puppet CA Master https Puppet Agent
  • 35. Architectural overview Puppet Puppet CA Master https Puppet Puppet Puppet Agent Agent Agent
  • 36. Puppet structure ‣ Puppet master (puppetmasterd) ‣ Puppet cert (puppetca) ‣ Puppet agent (puppetd) ‣ Facter
  • 37. Puppet master (puppetmasterd) ‣ Central server ‣ File & configuration server ‣ REST over HTTPS interface
  • 38. Puppet cert (puppet CA) ‣ Certificate signing server ‣ Creates, signs, checks x509 certificates ‣ So you don’t have to worry about it
  • 39. Puppet cert (puppet CA) Check all systems that have connected to our CA server root@puppetmaster:~# puppet cert --list --all + puppetmaster.noxlogic.local (74:A7:C8:27:72:0D:C1:DD:B8:71:0D:4F:37:69:3D:0C) puppetnode1.noxlogic.local (09:9D:1E:01:D0:A7:BA:FB:8C:F4:2D:96:78:34:54:44)
  • 40. Puppet cert (puppet CA) Let’s sign our first node root@puppetmaster:~# puppet cert --sign puppetnode1.noxlogic.local .... root@puppetmaster:~# puppet cert --list --all + puppetmaster.noxlogic.local (74:A7:C8:27:72:0D:C1:DD:B8:71:0D:4F:37:69:3D:0C) + puppetnode1.noxlogic.local (CC:50:49:98:1D:F9:06:36:0E:6E:31:F5:27:D8:50:D8)
  • 41. Puppet agent (puppetd) ‣ Runs on every node that will be managed by puppet. ‣ Calls the puppet master every 30 minutes with system information. ‣ Receives and executes a catalog.
  • 42. Facter ‣ Runs on nodes to gather system information. ‣ Returns $variables to be used in configuration.
  • 43. Facter (1) [root@puppetnode1 ~]# facter --puppet architecture => x86_64 fqdn => puppetnode1.noxlogic.local interfaces => eth1,eth2,lo ipaddress_eth1 => 192.168.1.114 ipaddress_eth2 => 192.168.56.200 kernel => Linux kernelmajversion => 2.6 operatingsystem => CentOS operatingsystemrelease => 6.0 processor0 => Intel(R) Core(TM)2 Duo CPU T7500 @ 2.20GHz puppetversion => 2.6.9 ‣ A simple list with info (also useable in your own tools)
  • 44. Facter (2) ‣ You can add your own facts: ‣ project name ‣ master / slave database server ‣ zend server ‣ directadmin / plesk ‣ Very simple to add new facts (in ruby, that is)
  • 45. Facter (3) zendstudio.rb: Facter.add(“Zendserver”) do confine :kernel => :linux setcode do if FileTest.exists?(“/usr/local/zend/bin”) “true” else “false” end end end ‣ Crude, but effective enough for us
  • 46. How does it work Check cert Master Return facts Client Returns catalog
  • 47. Puppet manifests ‣ Manifests are puppet definitions ‣ <filename>.pp ‣ Puppet DSL ‣ De-cla-ra-tive language ‣ Version your manifests! (git/svn)
  • 48. Puppet manifests package { “mc” : ensure => present, } file { “/home/jaytaph/secret-ingredient.txt” : ensure => present, mode => 0600, user => ‘jaytaph’, group => ‘noxlogic’, source => “puppet:///secret.txt”, }
  • 49. Puppet manifests package { “httpd” : ensure => present, } service { “httpd”: running => true, enable => true, require => Package[“httpd”], } ‣ Spot the problem....
  • 50. Puppet manifests Centos / Redhat service: httpd package: httpd config: /etc/httpd/conf/httpd.conf vhosts: /etc/httpd/conf.d/*.conf Debian / Ubuntu service: apache2 package: apache2 config: /etc/apache2/httpd.conf vhosts: /etc/apache2/sites-available ‣ Different distributions, different names
  • 51. Puppet manifests service { “apache”: case $operatingsystem { centos, redhat { $apache = “httpd” } debian, ubuntu { $apache = “apache2” } default : { fail(‘I don’t know this OS/distro’) } } name => $apache, running => true, } ‣ $operatingsystem is a FACT
  • 52. Puppet manifests /etc/puppet/manifests/site.pp: node default { $def_packages = [ “mc”, “strace”, “sysstat” ] package { $def_packages : ensure => latest, } } ‣ “Main” manifest
  • 53. Puppet manifests node ‘web.noxlogic.local’ { package { “httpd” : ensure => latest, } } node ‘db.noxlogic.local’ { package { “mysql-server” : ensure => installed, } } ‣ Defining nodes
  • 54. Puppet manifests node basenode { user { “jaytaph” : ensure => present, gid => 1000, uid => 1000, home => “/home/jaytaph”, shell => “/bin/sh”, password => “supersecrethashedpassword”, } } node *.noxlogic.local inherits basenode { ... }
  • 56. Puppet manifests class webserver { service { “apache”: ensure => running, require => Package[“httpd”], } package { “apache” : ensure => installed, } }
  • 57. Puppet manifests class webserver { service { “apache”: ensure => running, require => Package[“httpd”], } package { “apache” : ensure => installed, } file { “vhost_$hostname” : path => “/etc/httpd/conf/10-vhost.conf”, content => template(“vhost.template.erb”), notify => Service[“httpd”], } }
  • 58. Puppet manifests vhost.template.erb <virtualHost <%= ipaddress %>:80> ServerName <%= webserver_name %> ServerAlias <%= webserver_alias %> DocumentRoot <%= webserver_docroot %> </virtualHost> ‣ ERB Templates can use custom variables and facts
  • 59. Puppet manifests node “web01.noxlogic.local” inherits base { $webserver_name = “web01.noxlogic.local” $webserver_alias = “www.noxlogic.local” $webserver_docroot = “/var/www/web01” import webserver } node “web02.noxlogic.local” inherits base { $webserver_name = “web02.noxlogic.local” $webserver_alias = “crm.noxlogic.local” $webserver_docroot = “/var/www/web02” import webserver }
  • 60. What can puppet manage ‣ Almost everything. ‣ standard 48 different resource types ‣ Ranging from “file” to “cron” to “ssh_key” to “user” to “selinux”. ‣ Can control your Cisco routers and windows machines too (sortakinda) ‣ http://docs.puppetlabs.com/references/stable/type.html
  • 61. Puppet modules ‣ A puppet module is a collection of resources, classes, templates. ‣ Used for easy distribution and code-reuse. ‣ Self-contained, run out-of-the-box
  • 62. Puppet modules ‣ puppetforge / github ‣ Create your own (and share!). ‣ Use the ones from puppet enterprise edition. ‣ Use the standard layout / best practices
  • 63. Puppet modules MODULE_PATH/ └──downcased_module_name/ ├──files/ ├──manifests/ │ ├──init.pp │ └──foo.pp ├──lib/ │ ├──puppet/ │ │ ├──parser/ │ │ │ └──functions/ │ │ ├──provider/ │ │ └──type/ │ └──facter/ ├──templates/ ├──tests │ ├──init.pp │ └──foo.pp └──README
  • 64. Puppet modules class ntp::install { package{"ntpd": ensure => latest } } class ntp::config { File{ require => Class["ntp::install"], notify => Class["ntp::service"], owner => "root", group => "root", mode => 644 } file{"/etc/ntp.conf": source => "puppet:///ntp/ntp.conf"; "/etc/ntp/step-tickers": source => "puppet:///ntp/step-tickers"; } } class ntp::service { service{"ntp": ensure => running, enable => true, require => Class["ntp::config"], } } class ntp { include ntp::install, ntp::config, ntp::service }
  • 65. Test your modules ‣ (Unit)test your modules ‣ Test them with: puppet apply --noop ‣ More advanced testing: cucumber / cucumber-puppet (BDD)
  • 66. External Node Configuration (1) ‣ Split modules and nodes ‣ Nodes should be classes - params only (best case scenario?) ‣ Nodes can be configured through YAML
  • 67. External Node Configuration (2) node1.enrise.local.yaml --- classes: - base parameters: puppetserver: puppet.enrise.local
  • 68. External Node Configuration (2) node1.enrise.local.yaml --- classes: - base parameters: puppetserver: puppet.enrise.local node node1.enrise.local { $puppetserver = ‘puppet.enrise.local’ include base }
  • 69. External Node Configuration (3) Puppet doesn’t care how you create YAML files. ‣ Ruby, PHP, Python, Perl, Pony, shellscript. ‣ REST, SOAP, XMLRPC. ‣ Use a database backend. ‣ Or use LDAP instead of YAML.
  • 71. Confusing puppet things ‣ Puppet went from v0.25 to v2.6. ‣ REST interface since 2.6. XMLRPC before that. ‣ One binary to rule them all (puppet). ‣ Puppet v2.7 switched from GPLv2 to apache2.0 license.
  • 72. Confusing puppet things ‣ --test does not mean dry-run! (--noop does). ‣ It’s not object oriented. (puppet class != php class) ‣ It’s a declarative language.
  • 74. Live demo | MCollective?
  • 75. MCollective ‣ Puppet agent “calls” the master every 30 minutes. ‣ But what about realtime command & control? ‣ “Puppet kick”... (meh) ‣ MCollective (Marionette Collective)
  • 76. MCollective ‣ Which systems running a database and have 16GB or less? ‣ Which systems are using <50% of available memory? ‣ Restart all apache services in timezone GMT+5. ‣ How do we handle large number of nodes?
  • 77. MCollective Client Middleware Node MCollective Server MCollective Client ACTIVEMQ Server MCollective Server Collective ‣ Middleware takes care of distribution, ‣ queued, broadcast etc..
  • 78. MCollective ‣ The collective http://docs.puppetlabs.com/mcollective/reference/basic/subcollectives.html
  • 79. MCollective $ mc-facts operatingsystem Report for fact: operatingsystem CentOS found 3 times Debian found 14 times Solaris found 4 times $ mc-facts -W operatingsystem=Centos operatingsystemrelease Report for fact: operatingsystemrelease 6.0 found 1 times 5.6 found 2 times ‣ Filter out nodes based on facts
  • 80. MCollective - cool stuff ‣ Display all running processes ‣ Run or deploy software ‣ Restart services ‣ Start puppet agent ‣ Upgrade your systems
  • 81. Recap -ETOOMUCHINFO Let’s recap
  • 82. Recap (1) ‣ Configuration management tool. ‣ Focusses on “what” instead of “how”. ‣ Scales from 1 to 100K+ systems. ‣ Uses descriptive manifests. ‣ Can use external node configurations.
  • 83. Recap (2) ‣ Useful for sysadmins and developers. ‣ Keeps your infrastructure in sync. ‣ Keeps your infrastructure versioned. ‣ MCollective controls your hosts based on facts, not names.
  • 85. ‣ THANK YOU FOR YOUR ATTENTION

Notes de l'éditeur

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n
  46. \n
  47. \n
  48. \n
  49. \n
  50. \n
  51. \n
  52. \n
  53. \n
  54. \n
  55. \n
  56. \n
  57. \n
  58. \n
  59. \n
  60. \n
  61. \n
  62. \n
  63. \n
  64. \n
  65. \n
  66. \n
  67. \n
  68. \n
  69. \n
  70. \n
  71. \n
  72. \n
  73. \n
  74. \n
  75. \n
  76. \n
  77. \n
  78. \n
  79. \n
  80. \n
  81. \n
  82. \n
  83. \n
  84. \n
  85. \n
  86. \n
  87. \n
  88. \n
  89. \n
  90. \n
  91. \n
  92. \n
  93. \n
  94. \n
  95. \n