Puppet: Update Debian Wheezy auf puppetlabs Pakete

Ich habe auf allen meinen Servern puppet auf die Version von puppetlabs aktualisiert. Dafür habe ich folgende Schritte durchgeführt:

  1. Herunterladen der puppetlabs-release-wheezy.deb von apt.puppetlabs.com und Installation auf dem Node:
    cd /tmp
    wget http://apt.puppetlabs.com/puppetlabs-release-wheezy.deb
    dpkg -i puppetlabs-release-wheezy.deb
    aptitude update && aptitude safe-upgrade
  2. Auf dem puppetmaster musste ich noch ein aptitude dist-upgrade durchfühhren
  3. Ich hatte das Paket libaugeas-ruby1.8 installiert was zu Problemen führte. Deswegen:
    aptitude install libaugeas-ruby && aptitude purge libaugeas-ruby1.8
  4. Die Einstellung templatedir in der puppet.conf ist deprecated und führt zu entsprechenden Warnungen wenn der agent läuft. Mit dem folgenden Snippet in meinem basics Modul habe ich es entfernt:
      augeas { 'puppet.conf':
        context => '/files/etc/puppet/puppet.conf',
        changes => [
          'rm main/templatedir',
        ],
        notify  => Service['puppet'],
      }
  5. Das Monitoring des Puppetmasters wie in dem verlinkten Blogeintrag beschrieben schlug mit einem HTTP 403 fehl. Die Ursache lag in einer Änderung der Syntax in der auth.conf. Dort muss nun anstatt allow 1.2.3.4 ein allow_ip 1.2.3.4 stehen.

Puppet: Konfigurationsdateien manipulieren mit Augeas

Ich stand vor der Frage, wie ich auf allen puppet Nodes die /etc/puppet/puppet.conf editiere. Dabei sollten zwei Eintraege sichergestellt sein:

  1. In der [main] Sektion soll pluginsync=true stehen
  2. In der [agent] Sektion soll report=true stehen

Kurz habe ich ueberlegt ob ich die Datei selbst ueber puppet verteilen soll. Dann wurde ich aber auf Augeas gestossen. Augeas ist ein Tool, das ueber sogenannte Linsen (lenses) verschiedene Konfigurationsdateien in einer baum-Struktur darstellen und bearbeiten kann. Puppet hat Augeas ueber die Ruby Language Bindings bereits integriert. Es ist also problemlos moeglich damit die puppet.conf zu editieren. Hier meine Loesung aus der Klasse:

  augeas { 'puppet.conf':
    context => '/files/etc/puppet/puppet.conf',
    changes => [
      'set main/pluginsync true',
      'set agent/report true',
    ],
    notify  => Service['puppet'],
  }
 
  service { 'puppet':
    ensure  => 'running',
  }

und so sieht es aus wenn es denn durchlaeuft:

notice: Augeas[puppet.conf](provider=augeas): 
--- /etc/puppet/puppet.conf	2014-05-23 20:30:48.000000000 +0200
+++ /etc/puppet/puppet.conf.augnew	2014-05-23 20:30:54.000000000 +0200
@@ -8,9 +8,12 @@
 prerun_command=/etc/puppet/etckeeper-commit-pre
 postrun_command=/etc/puppet/etckeeper-commit-post
 
+pluginsync=true
 [master]
 # These are needed when the puppetmaster is run by passenger
 # and can safely be removed if webrick is used.
 ssl_client_header = SSL_CLIENT_S_DN 
 ssl_client_verify_header = SSL_CLIENT_VERIFY
 
+[agent]
+report=true
 
notice: /Stage[main]/Basics/Augeas[puppet.conf]/returns: executed successfully
info: /Stage[main]/Basics/Augeas[puppet.conf]: Scheduling refresh of Service[puppet]
notice: /Stage[main]/Basics/Service[puppet]: Triggered 'refresh' from 1 events

Weitere Moeglichkeiten wie immer in der entsprechenden Puppet Type Reference.