Samenvatting Puppet Training

Puppet master

runs on the central server. It is responsable for:

  • authenticating agent connections
  • signing certificates
  • serving a compiled catalog to the agent
  • serving files
  • processing posted reports
  • Draait niet op AIX, OS X, Solaris of Windows
  • Draait op een jvm voor verbeterde prestatie door uitschaling
  • Voor de installatie van puppet enterprise staat hier de documentatie: http://docs.puppetlabs.com/pe/latest/install_basic.html

    puppet agent

    draait op alle gemanaged nodes. puppet agent is verantwoordelijke voor:

  • het opzetten van een veilige en geauthenticeerde verbinding met de puppet master
  • versturen van informatie over de huidige status
  • handhaven en ontvangen van configuratie status (catalog)
  • ontvangen van elk benodigd bestand
  • De agent ondersteund
  • Linux (Rhel, Debian en verschillende andere distributies)
  • Windows
  • Solaris
  • Mac OS X
  • AIX
  • Handige command line argumenten

    --test
    --no-daemonize
    --verbose
    --onetime
    --ignorecache
    --no-usecacheonfailure
    --detailed-exitcodes
    --show_diff
    --no-splay
    --noop
    --debug
    --environment
    --configprint
    andere mogelijke interessante mogelijkheden
    --tags Conditionally apply parts of the catalog based on tags
    --genconfig Generate a starting config file. Mostly useful for Open Source users setting up their infrastructure for the first time
    --trace Generate full stack traces on errors which can be useful for debugging
    --waitforcert How long the agent should wait for its certificate to be signed before giving up. Useful during Agent provisioning.

    Voorbeeld Configuratie

    [main]
    certname             = master.puppetlabs.vm
    vardir               = /var/opt/lib/pe-puppet
    logdir               = /var/log/pe-puppet
    rundir               = /var/run/pe-puppet
    basemodulepath       = /etc/puppetlabs/puppet/modules:/opt/puppet/share/puppet/modules
    environmentpath      = /etc/puppetlabs/puppet/environments
    server               = master.puppetlabs.vm
    user                 = pe-puppet
    group                = pe-puppet
    archive_files        = true
    archive_files_server = master.puppetlabs.vm
    module_groups        = base+pe_only
    dns_alt_names        = puppet
    environment_timeout  = 0

    [agent]
    report               = true
    classfile            = $vardir/classes.txt
    localconfig          = $vardir/localconfig
    graph                = true
    pluginsync           = true
    environment          = production

    [master]
    node_terminus        = classifier
    ca_server            = master.puppetlabs.vm
    reports              = console,puppetdb
    storeconfigs         = true
    storeconfigs_backend = puppetdb
    certname             = master.puppetlabs.vm
    server               = master.puppetlabs.vm
    always_casch_featers = true

    De secties corresponderen met de run mode, de main sectie is van toepassing in alle run modi, maar master, agent en user zijn op de gelijknamige modi van toepassing. Overeenkomstig zal een node waar een agent draait geen master sectie hebben.


    Iedere configuratie setting in puppet.conf heeft een overeenkomstig commandline commando. Volgorde van oplossen:

    command line > run mode > main > puppet defaults.

    Dit betekend at een setting in [agent] een setting in [main] zal overschrijven wanneer puppet agent -t wordt gedraait, maar dat een optie die wordt meegegeven op de command line beide overschrijft.


    Puppet gebruikt factor om informatie over de host te verzamelen. Het uitvoeren van het factor commando leverd een lijst met sleutel waarden paren op.


    Puppet Resource

    Een commandline tool om puppet resources op het systeem te inspecteren, heeft een directe interactie met de Resource Abstraction Layer (RAL) en retouneert de puppet code representatie van de huidige status van de resource


    Het Puppet resource commando accepteerd twee argumenten, 1. , 2.

    vb.:

    puppet resource user elvis

    ...
    user { 'elvis':
    ensure => absent,
    }

    het uitvoeren van het resource commando met alleen het resource type leverd de huidige status van alle resources van een bepaald type

    vb.:

    puppet resource user

    ....
    user { 'vcsa':
    ensure => present,
    uid => '69',
    gid => '69',
    shell => '/sbin/nologin',
    comment => 'virtual console memory owner',
    home => '/dev',
    }
    user { 'willywonka':
    ensure => present,
    uid => '1006',
    gid => '1008',
    shell => '/bin/bash',
    home => '/home/willywonka',
    }

    GIT mini turorail

    git status - geeft de status van de werk directory
    git add - voegd de gewijzigde code toe aan een commit
    git commit - voegd een set wijzigingen toe aan de (eigen) repository
    git push - voegd de wijzigingen toe aan de remote repository

    Git Development Workflow
    git pull origin master
    edit validate test
    git add
    git commit
    git push origin master
    test on development infrastructure
    andere te gebruiken git commando's
    git diff
    git log
    git show
    git blame
    git branch & git checkout

    resources
    http://git-scm.com/book
    http://try.github.com/


    Puppet Way

    vb:

    class sysadmin {

    user { 'elmo':
    ensure => present,
    groups => ['sysadmin','web','dbadmin'],
    managehome => true,
    }

    group { 'sysadmin':
    ensure => present,
    }
    }

    Resources are managed in terms of attributes Instruct puppet to manage a package:

    package { 'openssh':
    ensure => present,
    }

    Resource abstraction layer
    TypeFilePackageServiceUser
    ProviderPosixAptRedhatUseradd
    WindowsYumLaunchedldap
    GemsSMFNetinfo
    Apt-getDebian
    RPMWindows
    Msi
    Windows

    Providers for the package type:

    ls /opt/puppet/lib/ruby/[...]/puppet/providers/package
    aix.rbfink.rbopkg.rbports.rbwindows
    appdmg.rbfreebsd.rbpacman.rbportupgrade.rbwindows.rb
    apple.rbgem.rbpip.rbrpm.rbyumhelper.py
    aptitude.rbhpux.rbpkgdmg.rbrug.rbyumhelper.pyc
    apt.rbmacports.rbpkgin.rbsunfreeware.rbyumhelper.pyo
    aptrpm.rbmsi.rbpkg.rbsun.rbyum.rb
    blastwave.rbnim.rbpkgutil.rbup2date.rbaypper.rb
    dpkg.rbopenbsd.rbportage.rburpmi.rb

    Notes
    Some packages types can retrieve their own package files, while others cannot. For those package formats that cannot retrieve their own package files, you can use the source parameter to point to the correct file or URI.

    # Using the Windows provider
    package { 'mysql':
    ensure => present,
    source => '//corpserver/installers/mysql-5.5.16-winx64.msi',
    provider => windows,
    }

    # Using the RPM provider
    package { 'mysql':
    ensure => present,
    source => 'http://internal.mycorp.net/packages/redhat/6/mysql-5.5.16x86_64.rpm',
    provider => rpm,
    }

    http://docs.puppetlabs.com/references/latest/type.html#package

    Puppet Classes

    Classes definieeren een verzameling van resources die als 1 enkele eenheid worden gemanaged.
    Classe definities worden bewaart in een manifest, het init.pp file hieronder is een voorbeeld van zo'n betand, geschreven in de puppet dsl.
    Hieronder zijn de package, file en service individuele puppet resources, samengevoegd om 1 enkele classe te vormen.

    v.b.

    # /etc/puppetlabs/puppet/environments/production/modules/ssh/manifest/init.pp

    class ssh {

    package { 'openssh':
    ensure => present,
    }
    file { '/etc/ssh/sshd_config':
    ensure => file,
    owner => 'root',
    group => 'root',
    mode => '0644',
    require => Package['openssh'],
    source => 'puppet:///modules/ssh/sshd_config',
    }

    service { 'sshd':
    ensure => running,
    enable => true
    require => File['/etc/ssh/sshd_config'],
    }
    }

    Modules

    Modules zijn directories die de configuratie bevatten. Ze zijn ontworpen om alle gerelateerde componenten die bij een enkele configuratie beheren te bevatten.


    Het is een van te voren gedefinieerde structuur waardoor de volgende zaken mogelijk worden

    Defining vs Declaring

    define:

    to specify the contents and behavior of a class. Defining a class doesn't automatically include it in a configuration; it simply makes is available to be declared.

    declare:

    To direct Puppet to include or instantiate a given class. To declare classes, use the include function. This tells Puppet to evaluate the class and manage all the resources declared within it.

    Als je een class bouwd zoals hierboven de ssh class, definieer je hem
    Om hem te kunnen gebruiken kan hij als volgd worden gedeclareert

    vb:

    include ssh

    Het declareren van een puppet class instrueert puppet de classe af te dwingen. Declaration Testing, kan door een include statement op te nemen in het init.pp bestand.

    v.b.

    # /etc/puppetlabs/puppet/environments/production/modules/ssh/examples/init.pp

    include ssh

    The puppet apply Executable

    Compiles puppet manifest into a resource catalog
    Uses the Resource Abstraction Layer to simulate or enforce the catalog locally

    In agent/master puppet arrangements, agent nodes send their facts to the master and toe master compliles the catalog using theis facts.
    When using puppet apply, local facts are used to build the catalog.
    When using puppet apply, remember to apply against files in the tests directory, not in de manifest directory.
    Files in the manifest directory contain the resource definitions, but to implement, defined resources need to be declared and the files in the tests directory contain the declaration, which will actually initiate action.
    There is no harm in running puppet apply against files in the manifest direcotry, but this wil op apply any changes.
    Running puppet apply against files in the test directory can be used as an ad hoc verification or proof of concept to see how the module will manage the system once implemented.

    Applying a Smoke test

    One-off manifest enforcement
    Validate your code
    Enforce a class locally one time only
    Temporary changes that may be overridden on the next agent run.
    puppet apply compiles a manifest file en enforces it immediatly.
    vb.

    puppet apply examples/init.pp

    --noop mode simulates without enforcing

    vb.


    puppet apply --noop examples/init.pp

    individual resources may also be placed in noop mode vb.


    package { 'kernel':
    ensure => latest,
    noop => true,
    }

    Puppet Describe geeft een omschrijving van alle te gebruieken resources en welke atributen er per resource beschikbaar zijn en wat ze bekekenen.