SlideShare a Scribd company logo
developing sysadmin -
                          sysadmining developers
                           develop your platform and your
                              application management

                                      GUUG Berlin
                                        01.11.2012
                                       Martin Alfke
                               <martin.alfke@buero20.org>

                                        © Martin Alfke - 2012

Freitag, 2. November 12
Agenda

                           puppet environments
                              puppet modules
                             puppet templates
                            puppet and augeas
                           puppet multi master
                          puppet without master


                                 © Martin Alfke - 2012

Freitag, 2. November 12
Environments


                              “admin’s and dev’s cooperate!”




                          Environments - Modules - Templates - Augeas - Master - Masterless
                                                    © Martin Alfke - 2012

Freitag, 2. November 12
Environments
                     •    Split up modules into several repositories

                     •    “production” is default and always there

                     •    Naming is abritrary

                     •    Master needs to know about environments

                     •    Client needs to send environment information




                          Environments - Modules - Templates - Augeas - Master - Masterless
                                                    © Martin Alfke - 2012

Freitag, 2. November 12
Environments
                 •        puppet.conf
                          [master]
                            [test]
                               manifest = /etc/puppet/test/manifests/site.pp
                               modulepath = /etc/puppet/test/modules
                            [mailteam]
                               manifest = /etc/puppet/mail/manifests/site.pp
                               modulepath = /etc/puppet/mail/modules

                          [agent]
                             environment = test


                           Environments - Modules - Templates - Augeas - Master - Masterless
                                                        © Martin Alfke - 2012

Freitag, 2. November 12
Environments
                 •        Each environment may have multiple modulepaths
                          [master]
                            [test]
                               manifest = /etc/puppet/test/manifests/site.pp
                               modulepath = /etc/puppet/test/modules:/data/puppet/team/test/modules
                            [mailteam]
                               manifest = /etc/puppet/mail/manifests/site.pp
                               modulepath = /etc/puppet/mail/modules:/data/puppet/team/core/modules




                           Environments - Modules - Templates - Augeas - Master - Masterless
                                                      © Martin Alfke - 2012

Freitag, 2. November 12
Modules


                              “plug things together simple”




                          Environments - Modules - Templates - Augeas - Master - Masterless
                                                   © Martin Alfke - 2012

Freitag, 2. November 12
Modules
                     •    Difference between modules and classes

                          •   Module:

                              •   strict directory naming for autoloading

                              •   each module has at least one class

                          •   Class:

                              •   available but not applied automatically


                          Environments - Modules - Templates - Augeas - Master - Masterless
                                                    © Martin Alfke - 2012

Freitag, 2. November 12
Modules
                 •        directory structure
                          /etc/puppet/test/modules/    <-- modulepath
                             apache/                   <-- modulename
                             manifests/                <-- manifests path within module
                                 init.pp              <-- initial class fetched from autoloader
                                 server.pp            <-- additional class(es)
                             files/                    <-- directory for module file serving
                             templates/               <-- directory for module templates
                             lib/                     <-- directory for facts or functions
                             tests/                   <-- directory for tests during develop



                            Environments - Modules - Templates - Augeas - Master - Masterless
                                                          © Martin Alfke - 2012

Freitag, 2. November 12
Modules
                 •        class, file and template naming structure
                          /etc/puppet/test/modules/
                             apache/
                             manifests/
                                 init.pp              <-- class apache { ... }
                                 server.pp            <-- class apache::server { ... }
                             files/                    <-- “puppet:///modules/apache/<filename>”
                             templates/               <-- template(‘apache/<filename>’)
                             lib/
                             tests/



                            Environments - Modules - Templates - Augeas - Master - Masterless
                                                         © Martin Alfke - 2012

Freitag, 2. November 12
Modules
                 •        class structure
                          class apache {
                                   package { ‘apache2’: ensure => present, }
                                   file { ‘/etc/apache2/apache2.conf’:
                                      content => template(‘apache/apache2.conf.erb’),
                                   }
                                   file { ‘/etc/apache2/conf.d/charset’:
                                      source => ‘puppet:///modules/apache/charset’,
                                   }
                                   service { ‘apache2’: ensure => running, }
                          }


                            Environments - Modules - Templates - Augeas - Master - Masterless
                                                        © Martin Alfke - 2012

Freitag, 2. November 12
Modules
                 •        use classes
                          node ‘www01.domain.tld’ {
                                 class { ‘apache’: }      <-- old: include apache
                          }




                            Environments - Modules - Templates - Augeas - Master - Masterless
                                                       © Martin Alfke - 2012

Freitag, 2. November 12
Modules
                 •        resources, classes, parameterized classes
                          resource_type { ‘title’:
                                  attribute => value,
                          }

                          class <title> { ... }
                          class <title> ( $variable = value) { ... }

                          class { ‘<title>’: }
                          class { ‘<title>’:
                                    variable => value,
                          }

                             Environments - Modules - Templates - Augeas - Master - Masterless
                                                             © Martin Alfke - 2012

Freitag, 2. November 12
Modules
                 •        using ruby in classes
                          /etc/puppet/test/modules/apache/manifests/init.rb

                          hostclass :apache do
                            package :apache2, :ensure => present
                            package :libapache2-php, :ensure => present
                            service :apache2, :ensure => running
                          end




                            Environments - Modules - Templates - Augeas - Master - Masterless
                                                        © Martin Alfke - 2012

Freitag, 2. November 12
Templates


                                        “code your config”




                          Environments - Modules - Templates - Augeas - Master - Masterless
                                                    © Martin Alfke - 2012

Freitag, 2. November 12
Templates
                     •    Ruby ERB template engine

                     •    Normally requires in-depth configuration review

                     •    Be aware of variable scoping !




                          Environments - Modules - Templates - Augeas - Master - Masterless
                                                    © Martin Alfke - 2012

Freitag, 2. November 12
Templates
                 •        use variables from puppet in templates
                          $ntpserver = ‘10.2.3.4’
                          file { ‘/etc/ntp.conf’:
                                    content => template(‘ntp/ntp.conf.erb’),
                          }

                          # ntp.conf.erb
                          <% if @ntpserver %>                <-- old: if has_variable(‘ntpserver’)
                          server <%= @ntpserver %>           <-- @ syntax is new. uses current scope
                          <% else %>
                          server pool.ntp.org
                          <% end %>

                            Environments - Modules - Templates - Augeas - Master - Masterless
                                                          © Martin Alfke - 2012

Freitag, 2. November 12
Augeas


                                        “clean your lenses”




                          Environments - Modules - Templates - Augeas - Master - Masterless
                                                    © Martin Alfke - 2012

Freitag, 2. November 12
Augeas
                     •    Make changes to single lines

                     •    Do not manage the complete configuration file in
                          puppet




                          Environments - Modules - Templates - Augeas - Master - Masterless
                                                    © Martin Alfke - 2012

Freitag, 2. November 12
Augeas
                 •        augeas uses lenses to split up config files
                          augtool print /files/etc/sysctl.conf
                          augtool set net.ipv4.forward 1

                          augeas { ‘set_ipv4_forward’:
                                   context => ‘/files/etc/sysctl.conf’,
                                   changes => “set net.ipv4.forward 1”,
                          }




                            Environments - Modules - Templates - Augeas - Master - Masterless
                                                          © Martin Alfke - 2012

Freitag, 2. November 12
Augeas
                     •    Attention!

                     •    Not all configuration files are supported !

                     •    Augeas needs key-value pairs

                     •    Within puppet ruby-augeas extension is required




                          Environments - Modules - Templates - Augeas - Master - Masterless
                                                    © Martin Alfke - 2012

Freitag, 2. November 12
Multi Master


                           “no one can serve two masters!”




                          Environments - Modules - Templates - Augeas - Master - Masterless
                                                    © Martin Alfke - 2012

Freitag, 2. November 12
Multi Master
                     •    Load-Balancing with SSL separation

                     •    several Data Center

                     •    do you really have more than 1000
                          nodes?




                          Environments - Modules - Templates - Augeas - Master - Masterless
                                                    © Martin Alfke - 2012

Freitag, 2. November 12
Multi Master
                 •        separate puppet ca and puppet master
                          puppet.conf on puppet ca (single instance)
                          [master]
                              ca = true
                          puppet.conf on puppet master
                          [master]
                              ca = false
                          puppet.conf on agent
                          [agent]
                              ca_server = <puppet ca>
                              server = <puppet master>


                            Environments - Modules - Templates - Augeas - Master - Masterless
                                                        © Martin Alfke - 2012

Freitag, 2. November 12
Multi Master
                 •        use multiple master (without ca)

                          •    apache/nginx and loadbalancing

                          •    ipvsadm




                              Environments - Modules - Templates - Augeas - Master - Masterless
                                                        © Martin Alfke - 2012

Freitag, 2. November 12
Multi Master
                 •        use multiple master (without ca)

                          •    pros:

                               •   file serving handled better

                               •   more masters compile catalogs

                          •    cons:

                               •   single ca only


                              Environments - Modules - Templates - Augeas - Master - Masterless
                                                        © Martin Alfke - 2012

Freitag, 2. November 12
Multi Master
                 •        avoid multiple masters

                          •    use templates !

                               •   templates are generated on the master during
                                   catalog compilation

                               •   files needs to get fetched by the nodes

                          •    use mod_passenger


                              Environments - Modules - Templates - Augeas - Master - Masterless
                                                        © Martin Alfke - 2012

Freitag, 2. November 12
without Master


                                 “you shall have no master”




                          Environments - Modules - Templates - Augeas - Master - Masterless
                                                    © Martin Alfke - 2012

Freitag, 2. November 12
without Master
                     •    Pre-compile catalogs

                     •    Run puppet apply locally




                          Environments - Modules - Templates - Augeas - Master - Masterless
                                                    © Martin Alfke - 2012

Freitag, 2. November 12
without Master
                     •    Very large environment (>15.000 nodes)

                     •    Multiple locations world wide




                          Environments - Modules - Templates - Augeas - Master - Masterless
                                                    © Martin Alfke - 2012

Freitag, 2. November 12
without Master
                     •    Compile catalogs for all nodes on master

                          •   puppet master compile <fqdn>

                     •    Copy catalogs to nodes to execute them

                          •   puppet apply --catalog <catalog file name>




                          Environments - Modules - Templates - Augeas - Master - Masterless
                                                    © Martin Alfke - 2012

Freitag, 2. November 12
without Master
                          •   Pros:

                              •   no dedicated master, catalog compilation may
                                  take place everywhere

                          •   Cons:

                              •   no modules !!

                              •   fileserving has to be done locally (e.g. NFS
                                  mount)

                          Environments - Modules - Templates - Augeas - Master - Masterless
                                                    © Martin Alfke - 2012

Freitag, 2. November 12
developing sysadmin -
                          sysadmining developers

                              Wait ! There is more !



                                      Martin Alfke
                              <martin.alfke@buero20.org>

                                       © Martin Alfke - 2012

Freitag, 2. November 12
ENC and Hiera


                              “data, data, data”




                          ENC and Hiera - Puppet DB - Dashboard
                                       © Martin Alfke - 2012

Freitag, 2. November 12
ENC and Hiera
                     •    External Nodes Classifier

                          •   executable with one parameter (fqdn)

                          •   can be anything

                              •   get info from filesystem: cat $1.yaml

                              •   get info from inventory database




                                     ENC and Hiera - Puppet DB - Dashboard
                                                  © Martin Alfke - 2012

Freitag, 2. November 12
ENC and Hiera
                     •      ENC in puppet
                          /etc/puppet/puppet.conf
                          [master]
                                  node_terminus = exec
                                  external_nodes = /etc/puppet/bin/my_great_enc.exe




                                       ENC and Hiera - Puppet DB - Dashboard
                                                      © Martin Alfke - 2012

Freitag, 2. November 12
ENC and Hiera
                 •        /etc/puppet/bin/my_great_enc.exe www1.domain.tld
                           ---
                           parameters:
                               location: de-ber2
                           classes:
                               ntp:
                                  ntpserver: 10.2.2.2
                               apache:
                               mysql:
                           environment: production



                                       ENC and Hiera - Puppet DB - Dashboard
                                                        © Martin Alfke - 2012

Freitag, 2. November 12
ENC and Hiera
                     •    Hiera - hierarchial data structure

                          •   built in into Puppet 3.x

                          •   add-on in Puppet 2.7.x




                                    ENC and Hiera - Puppet DB - Dashboard
                                                 © Martin Alfke - 2012

Freitag, 2. November 12
ENC and Hiera
                     •      Hiera configuration
                          /etc/puppet/hiera.yaml
                          :hierarchy:
                                   - %{operatingsystem}
                                   - common
                                   - %{datacenter}
                                   - %{serverfunction}
                          :backends:
                                   - yaml
                          :yaml:
                                   :datadir: ‘/etc/puppet/hieradata’


                                          ENC and Hiera - Puppet DB - Dashboard
                                                           © Martin Alfke - 2012

Freitag, 2. November 12
ENC and Hiera
                     •      Hiera data
                          /etc/puppet/hieradata/debian.yaml
                          ---
                          ssh_packages: 	

 - ‘openssh-server’
                                            - ‘openssh-client’
                                            - ‘openssh-blacklist’

                          /etc/puppet/hieradata/centos.yaml
                          ---
                          ssh_packages: - ‘openssh’
                                           - ‘openssh-clients’
                                           - ‘openssh-server’

                                          ENC and Hiera - Puppet DB - Dashboard
                                                           © Martin Alfke - 2012

Freitag, 2. November 12
ENC and Hiera
                     •      Hiera usage
                          /etc/puppet/modules/ssh/manifests/init.pp
                          class ssh {
                                   $ssh_packages = hiera(‘ssh_packages’)
                                   package { “${ssh_packages}”: ensure => present }
                          }




                                        ENC and Hiera - Puppet DB - Dashboard
                                                        © Martin Alfke - 2012

Freitag, 2. November 12
PuppetDB


                                “getting it all”




                          ENC and Hiera - Puppet DB - Dashboard
                                       © Martin Alfke - 2012

Freitag, 2. November 12
PuppetDB
                     •    Used for storeconfigs and exported resources

                     •    Schema for PostgreSQL

                     •    Will get more features soon




                                  ENC and Hiera - Puppet DB - Dashboard
                                               © Martin Alfke - 2012

Freitag, 2. November 12
Dashboard


                          “management needs graphs”




                            ENC and Hiera - Puppet DB - Dashboard
                                         © Martin Alfke - 2012

Freitag, 2. November 12
Dashboard
                     •    Open Source Dashboard is dead end

                     •    PuppetLabs is working on two other tools




                                  ENC and Hiera - Puppet DB - Dashboard
                                               © Martin Alfke - 2012

Freitag, 2. November 12
developing sysadmin -
                          sysadmining developers

                                    Questions?



                                      Martin Alfke
                              <martin.alfke@buero20.org>

                                       © Martin Alfke - 2012

Freitag, 2. November 12

More Related Content

What's hot (17)

PDF
Puppet @ Seat
Alessandro Franceschi
 
PDF
2007 Fsoss Drupal Under The Hood
James Walker
 
PPTX
Puppet Enterprise for the Network
Puppet
 
PDF
Can you upgrade to Puppet 4.x?
Martin Alfke
 
PDF
Anatomy of a reusable module
Alessandro Franceschi
 
PDF
Decoupled Libraries for PHP
Paul Jones
 
KEY
Webinar: Zend framework Getting to grips (ZF1)
Ryan Mauger
 
KEY
Zend framework: Getting to grips (ZF1)
Ryan Mauger
 
PDF
Essential applications management with Tiny Puppet
Alessandro Franceschi
 
PDF
Asset management with Zend Framework 2
Stefano Valle
 
PPT
Download It
webhostingguy
 
KEY
JavaScript Coding with Class
davidwalsh83
 
PDF
CapitalCamp Features
Phase2
 
PDF
5050 dev nation
Arun Gupta
 
PDF
Portland Puppet User Group June 2014: Writing and publishing puppet modules
Puppet
 
PDF
13th Sep, Drupal 7 advanced training by TCS
DrupalMumbai
 
ODP
Java EE 6 = Less Code + More Power (Tutorial) [5th IndicThreads Conference O...
IndicThreads
 
Puppet @ Seat
Alessandro Franceschi
 
2007 Fsoss Drupal Under The Hood
James Walker
 
Puppet Enterprise for the Network
Puppet
 
Can you upgrade to Puppet 4.x?
Martin Alfke
 
Anatomy of a reusable module
Alessandro Franceschi
 
Decoupled Libraries for PHP
Paul Jones
 
Webinar: Zend framework Getting to grips (ZF1)
Ryan Mauger
 
Zend framework: Getting to grips (ZF1)
Ryan Mauger
 
Essential applications management with Tiny Puppet
Alessandro Franceschi
 
Asset management with Zend Framework 2
Stefano Valle
 
Download It
webhostingguy
 
JavaScript Coding with Class
davidwalsh83
 
CapitalCamp Features
Phase2
 
5050 dev nation
Arun Gupta
 
Portland Puppet User Group June 2014: Writing and publishing puppet modules
Puppet
 
13th Sep, Drupal 7 advanced training by TCS
DrupalMumbai
 
Java EE 6 = Less Code + More Power (Tutorial) [5th IndicThreads Conference O...
IndicThreads
 

Similar to developing sysadmin, sysadmining developersGuug devops puppet (20)

PDF
Puppet buero20 presentation
Martin Alfke
 
PDF
Lessons I Learned While Scaling to 5000 Puppet Agents
Puppet
 
PDF
Puppet | Custom Modules & Using the Forge
Aaron Bernstein
 
PDF
Forging Great Modules: Standards, Tools and Patterns - PuppetConf 2013
Puppet
 
PDF
It's code but not as we know: Infrastructure as Code - Patrick Debois
JAX London
 
PDF
Modules of the twenties
Puppet
 
PDF
Greenfield Puppet: Getting it right from the start
David Danzilio
 
PDF
Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (...
Puppet
 
PDF
Puppet Camp Sydney 2015: The (Im)perfect Puppet Module
Puppet
 
PPT
Puppet Module Best Practices - Puppet Camp Silicon Valley
Puppet
 
PDF
Modern Module Development
_morgan
 
PDF
2014-11-11 Multiple Approaches to Managing Puppet Modules @ Puppet Camp Seattle
garrett honeycutt
 
PDF
Developing IT infrastructures with Puppet
Alessandro Franceschi
 
PDF
Automatic Configuration of Your Cloud with Puppet
Puppet
 
PDF
Cloud building talk
bodepd
 
PDF
Puppet Camp Paris 2015: Power of Puppet 4 (Beginner)
Puppet
 
KEY
Puppet101
Puppet
 
PDF
Puppet modules: A Holistic Approach - Geneva
Alessandro Franceschi
 
KEY
modern module development - Ken Barber 2012 Edinburgh Puppet Camp
Puppet
 
PPTX
Virtualization and automation of library software/machines + Puppet
Omar Reygaert
 
Puppet buero20 presentation
Martin Alfke
 
Lessons I Learned While Scaling to 5000 Puppet Agents
Puppet
 
Puppet | Custom Modules & Using the Forge
Aaron Bernstein
 
Forging Great Modules: Standards, Tools and Patterns - PuppetConf 2013
Puppet
 
It's code but not as we know: Infrastructure as Code - Patrick Debois
JAX London
 
Modules of the twenties
Puppet
 
Greenfield Puppet: Getting it right from the start
David Danzilio
 
Puppet Camp Boston 2014: Greenfield Puppet: Getting it right from the start (...
Puppet
 
Puppet Camp Sydney 2015: The (Im)perfect Puppet Module
Puppet
 
Puppet Module Best Practices - Puppet Camp Silicon Valley
Puppet
 
Modern Module Development
_morgan
 
2014-11-11 Multiple Approaches to Managing Puppet Modules @ Puppet Camp Seattle
garrett honeycutt
 
Developing IT infrastructures with Puppet
Alessandro Franceschi
 
Automatic Configuration of Your Cloud with Puppet
Puppet
 
Cloud building talk
bodepd
 
Puppet Camp Paris 2015: Power of Puppet 4 (Beginner)
Puppet
 
Puppet101
Puppet
 
Puppet modules: A Holistic Approach - Geneva
Alessandro Franceschi
 
modern module development - Ken Barber 2012 Edinburgh Puppet Camp
Puppet
 
Virtualization and automation of library software/machines + Puppet
Omar Reygaert
 
Ad

More from Martin Alfke (16)

PDF
CfgMgmtCamp 2023 - Puppet is YAML.pdf
Martin Alfke
 
PDF
HashiTalksDACH-Terraform-Managing training instances in the Cloud
Martin Alfke
 
PDF
PuppetCamp2021-Testing Modules and ControlRepo.pdf
Martin Alfke
 
PDF
Puppet Camp Germany 2020 - Puppet Control Repo and GIT
Martin Alfke
 
PDF
DevOps - How to get technical buy in
Martin Alfke
 
PDF
ADDO 2019 DevOps in a containerized world
Martin Alfke
 
PDF
OpenRheinRuhr 2018 - Ops hates containers! Why?
Martin Alfke
 
PDF
PuppetConf 2016 Moving from Exec to Types and Provides
Martin Alfke
 
PDF
Puppet Camp Paris 2016 Data in Modules
Martin Alfke
 
PDF
Power of Puppet 4
Martin Alfke
 
PDF
Upgrading Puppet CommitterConf Essen 2014
Martin Alfke
 
PDF
GUUG Hamburg OpenNebula
Martin Alfke
 
PDF
Puppet camp london-modulerewritingsmartway
Martin Alfke
 
PDF
One
Martin Alfke
 
PDF
Puppet future parser
Martin Alfke
 
PDF
Gluster fs buero20_presentation
Martin Alfke
 
CfgMgmtCamp 2023 - Puppet is YAML.pdf
Martin Alfke
 
HashiTalksDACH-Terraform-Managing training instances in the Cloud
Martin Alfke
 
PuppetCamp2021-Testing Modules and ControlRepo.pdf
Martin Alfke
 
Puppet Camp Germany 2020 - Puppet Control Repo and GIT
Martin Alfke
 
DevOps - How to get technical buy in
Martin Alfke
 
ADDO 2019 DevOps in a containerized world
Martin Alfke
 
OpenRheinRuhr 2018 - Ops hates containers! Why?
Martin Alfke
 
PuppetConf 2016 Moving from Exec to Types and Provides
Martin Alfke
 
Puppet Camp Paris 2016 Data in Modules
Martin Alfke
 
Power of Puppet 4
Martin Alfke
 
Upgrading Puppet CommitterConf Essen 2014
Martin Alfke
 
GUUG Hamburg OpenNebula
Martin Alfke
 
Puppet camp london-modulerewritingsmartway
Martin Alfke
 
Puppet future parser
Martin Alfke
 
Gluster fs buero20_presentation
Martin Alfke
 
Ad

developing sysadmin, sysadmining developersGuug devops puppet

  • 1. developing sysadmin - sysadmining developers develop your platform and your application management GUUG Berlin 01.11.2012 Martin Alfke <[email protected]> © Martin Alfke - 2012 Freitag, 2. November 12
  • 2. Agenda puppet environments puppet modules puppet templates puppet and augeas puppet multi master puppet without master © Martin Alfke - 2012 Freitag, 2. November 12
  • 3. Environments “admin’s and dev’s cooperate!” Environments - Modules - Templates - Augeas - Master - Masterless © Martin Alfke - 2012 Freitag, 2. November 12
  • 4. Environments • Split up modules into several repositories • “production” is default and always there • Naming is abritrary • Master needs to know about environments • Client needs to send environment information Environments - Modules - Templates - Augeas - Master - Masterless © Martin Alfke - 2012 Freitag, 2. November 12
  • 5. Environments • puppet.conf [master] [test] manifest = /etc/puppet/test/manifests/site.pp modulepath = /etc/puppet/test/modules [mailteam] manifest = /etc/puppet/mail/manifests/site.pp modulepath = /etc/puppet/mail/modules [agent] environment = test Environments - Modules - Templates - Augeas - Master - Masterless © Martin Alfke - 2012 Freitag, 2. November 12
  • 6. Environments • Each environment may have multiple modulepaths [master] [test] manifest = /etc/puppet/test/manifests/site.pp modulepath = /etc/puppet/test/modules:/data/puppet/team/test/modules [mailteam] manifest = /etc/puppet/mail/manifests/site.pp modulepath = /etc/puppet/mail/modules:/data/puppet/team/core/modules Environments - Modules - Templates - Augeas - Master - Masterless © Martin Alfke - 2012 Freitag, 2. November 12
  • 7. Modules “plug things together simple” Environments - Modules - Templates - Augeas - Master - Masterless © Martin Alfke - 2012 Freitag, 2. November 12
  • 8. Modules • Difference between modules and classes • Module: • strict directory naming for autoloading • each module has at least one class • Class: • available but not applied automatically Environments - Modules - Templates - Augeas - Master - Masterless © Martin Alfke - 2012 Freitag, 2. November 12
  • 9. Modules • directory structure /etc/puppet/test/modules/ <-- modulepath apache/ <-- modulename manifests/ <-- manifests path within module init.pp <-- initial class fetched from autoloader server.pp <-- additional class(es) files/ <-- directory for module file serving templates/ <-- directory for module templates lib/ <-- directory for facts or functions tests/ <-- directory for tests during develop Environments - Modules - Templates - Augeas - Master - Masterless © Martin Alfke - 2012 Freitag, 2. November 12
  • 10. Modules • class, file and template naming structure /etc/puppet/test/modules/ apache/ manifests/ init.pp <-- class apache { ... } server.pp <-- class apache::server { ... } files/ <-- “puppet:///modules/apache/<filename>” templates/ <-- template(‘apache/<filename>’) lib/ tests/ Environments - Modules - Templates - Augeas - Master - Masterless © Martin Alfke - 2012 Freitag, 2. November 12
  • 11. Modules • class structure class apache { package { ‘apache2’: ensure => present, } file { ‘/etc/apache2/apache2.conf’: content => template(‘apache/apache2.conf.erb’), } file { ‘/etc/apache2/conf.d/charset’: source => ‘puppet:///modules/apache/charset’, } service { ‘apache2’: ensure => running, } } Environments - Modules - Templates - Augeas - Master - Masterless © Martin Alfke - 2012 Freitag, 2. November 12
  • 12. Modules • use classes node ‘www01.domain.tld’ { class { ‘apache’: } <-- old: include apache } Environments - Modules - Templates - Augeas - Master - Masterless © Martin Alfke - 2012 Freitag, 2. November 12
  • 13. Modules • resources, classes, parameterized classes resource_type { ‘title’: attribute => value, } class <title> { ... } class <title> ( $variable = value) { ... } class { ‘<title>’: } class { ‘<title>’: variable => value, } Environments - Modules - Templates - Augeas - Master - Masterless © Martin Alfke - 2012 Freitag, 2. November 12
  • 14. Modules • using ruby in classes /etc/puppet/test/modules/apache/manifests/init.rb hostclass :apache do package :apache2, :ensure => present package :libapache2-php, :ensure => present service :apache2, :ensure => running end Environments - Modules - Templates - Augeas - Master - Masterless © Martin Alfke - 2012 Freitag, 2. November 12
  • 15. Templates “code your config” Environments - Modules - Templates - Augeas - Master - Masterless © Martin Alfke - 2012 Freitag, 2. November 12
  • 16. Templates • Ruby ERB template engine • Normally requires in-depth configuration review • Be aware of variable scoping ! Environments - Modules - Templates - Augeas - Master - Masterless © Martin Alfke - 2012 Freitag, 2. November 12
  • 17. Templates • use variables from puppet in templates $ntpserver = ‘10.2.3.4’ file { ‘/etc/ntp.conf’: content => template(‘ntp/ntp.conf.erb’), } # ntp.conf.erb <% if @ntpserver %> <-- old: if has_variable(‘ntpserver’) server <%= @ntpserver %> <-- @ syntax is new. uses current scope <% else %> server pool.ntp.org <% end %> Environments - Modules - Templates - Augeas - Master - Masterless © Martin Alfke - 2012 Freitag, 2. November 12
  • 18. Augeas “clean your lenses” Environments - Modules - Templates - Augeas - Master - Masterless © Martin Alfke - 2012 Freitag, 2. November 12
  • 19. Augeas • Make changes to single lines • Do not manage the complete configuration file in puppet Environments - Modules - Templates - Augeas - Master - Masterless © Martin Alfke - 2012 Freitag, 2. November 12
  • 20. Augeas • augeas uses lenses to split up config files augtool print /files/etc/sysctl.conf augtool set net.ipv4.forward 1 augeas { ‘set_ipv4_forward’: context => ‘/files/etc/sysctl.conf’, changes => “set net.ipv4.forward 1”, } Environments - Modules - Templates - Augeas - Master - Masterless © Martin Alfke - 2012 Freitag, 2. November 12
  • 21. Augeas • Attention! • Not all configuration files are supported ! • Augeas needs key-value pairs • Within puppet ruby-augeas extension is required Environments - Modules - Templates - Augeas - Master - Masterless © Martin Alfke - 2012 Freitag, 2. November 12
  • 22. Multi Master “no one can serve two masters!” Environments - Modules - Templates - Augeas - Master - Masterless © Martin Alfke - 2012 Freitag, 2. November 12
  • 23. Multi Master • Load-Balancing with SSL separation • several Data Center • do you really have more than 1000 nodes? Environments - Modules - Templates - Augeas - Master - Masterless © Martin Alfke - 2012 Freitag, 2. November 12
  • 24. Multi Master • separate puppet ca and puppet master puppet.conf on puppet ca (single instance) [master] ca = true puppet.conf on puppet master [master] ca = false puppet.conf on agent [agent] ca_server = <puppet ca> server = <puppet master> Environments - Modules - Templates - Augeas - Master - Masterless © Martin Alfke - 2012 Freitag, 2. November 12
  • 25. Multi Master • use multiple master (without ca) • apache/nginx and loadbalancing • ipvsadm Environments - Modules - Templates - Augeas - Master - Masterless © Martin Alfke - 2012 Freitag, 2. November 12
  • 26. Multi Master • use multiple master (without ca) • pros: • file serving handled better • more masters compile catalogs • cons: • single ca only Environments - Modules - Templates - Augeas - Master - Masterless © Martin Alfke - 2012 Freitag, 2. November 12
  • 27. Multi Master • avoid multiple masters • use templates ! • templates are generated on the master during catalog compilation • files needs to get fetched by the nodes • use mod_passenger Environments - Modules - Templates - Augeas - Master - Masterless © Martin Alfke - 2012 Freitag, 2. November 12
  • 28. without Master “you shall have no master” Environments - Modules - Templates - Augeas - Master - Masterless © Martin Alfke - 2012 Freitag, 2. November 12
  • 29. without Master • Pre-compile catalogs • Run puppet apply locally Environments - Modules - Templates - Augeas - Master - Masterless © Martin Alfke - 2012 Freitag, 2. November 12
  • 30. without Master • Very large environment (>15.000 nodes) • Multiple locations world wide Environments - Modules - Templates - Augeas - Master - Masterless © Martin Alfke - 2012 Freitag, 2. November 12
  • 31. without Master • Compile catalogs for all nodes on master • puppet master compile <fqdn> • Copy catalogs to nodes to execute them • puppet apply --catalog <catalog file name> Environments - Modules - Templates - Augeas - Master - Masterless © Martin Alfke - 2012 Freitag, 2. November 12
  • 32. without Master • Pros: • no dedicated master, catalog compilation may take place everywhere • Cons: • no modules !! • fileserving has to be done locally (e.g. NFS mount) Environments - Modules - Templates - Augeas - Master - Masterless © Martin Alfke - 2012 Freitag, 2. November 12
  • 33. developing sysadmin - sysadmining developers Wait ! There is more ! Martin Alfke <[email protected]> © Martin Alfke - 2012 Freitag, 2. November 12
  • 34. ENC and Hiera “data, data, data” ENC and Hiera - Puppet DB - Dashboard © Martin Alfke - 2012 Freitag, 2. November 12
  • 35. ENC and Hiera • External Nodes Classifier • executable with one parameter (fqdn) • can be anything • get info from filesystem: cat $1.yaml • get info from inventory database ENC and Hiera - Puppet DB - Dashboard © Martin Alfke - 2012 Freitag, 2. November 12
  • 36. ENC and Hiera • ENC in puppet /etc/puppet/puppet.conf [master] node_terminus = exec external_nodes = /etc/puppet/bin/my_great_enc.exe ENC and Hiera - Puppet DB - Dashboard © Martin Alfke - 2012 Freitag, 2. November 12
  • 37. ENC and Hiera • /etc/puppet/bin/my_great_enc.exe www1.domain.tld --- parameters: location: de-ber2 classes: ntp: ntpserver: 10.2.2.2 apache: mysql: environment: production ENC and Hiera - Puppet DB - Dashboard © Martin Alfke - 2012 Freitag, 2. November 12
  • 38. ENC and Hiera • Hiera - hierarchial data structure • built in into Puppet 3.x • add-on in Puppet 2.7.x ENC and Hiera - Puppet DB - Dashboard © Martin Alfke - 2012 Freitag, 2. November 12
  • 39. ENC and Hiera • Hiera configuration /etc/puppet/hiera.yaml :hierarchy: - %{operatingsystem} - common - %{datacenter} - %{serverfunction} :backends: - yaml :yaml: :datadir: ‘/etc/puppet/hieradata’ ENC and Hiera - Puppet DB - Dashboard © Martin Alfke - 2012 Freitag, 2. November 12
  • 40. ENC and Hiera • Hiera data /etc/puppet/hieradata/debian.yaml --- ssh_packages: - ‘openssh-server’ - ‘openssh-client’ - ‘openssh-blacklist’ /etc/puppet/hieradata/centos.yaml --- ssh_packages: - ‘openssh’ - ‘openssh-clients’ - ‘openssh-server’ ENC and Hiera - Puppet DB - Dashboard © Martin Alfke - 2012 Freitag, 2. November 12
  • 41. ENC and Hiera • Hiera usage /etc/puppet/modules/ssh/manifests/init.pp class ssh { $ssh_packages = hiera(‘ssh_packages’) package { “${ssh_packages}”: ensure => present } } ENC and Hiera - Puppet DB - Dashboard © Martin Alfke - 2012 Freitag, 2. November 12
  • 42. PuppetDB “getting it all” ENC and Hiera - Puppet DB - Dashboard © Martin Alfke - 2012 Freitag, 2. November 12
  • 43. PuppetDB • Used for storeconfigs and exported resources • Schema for PostgreSQL • Will get more features soon ENC and Hiera - Puppet DB - Dashboard © Martin Alfke - 2012 Freitag, 2. November 12
  • 44. Dashboard “management needs graphs” ENC and Hiera - Puppet DB - Dashboard © Martin Alfke - 2012 Freitag, 2. November 12
  • 45. Dashboard • Open Source Dashboard is dead end • PuppetLabs is working on two other tools ENC and Hiera - Puppet DB - Dashboard © Martin Alfke - 2012 Freitag, 2. November 12
  • 46. developing sysadmin - sysadmining developers Questions? Martin Alfke <[email protected]> © Martin Alfke - 2012 Freitag, 2. November 12