Puppet Module selbst schreiben

Das Erzeugen selbst geschriebener Puppet Module, und damit wiederverwendbarem Code, ist simpel zu realisieren. Im folgenden Beispiel soll ein Modul namens "role" erzeugt werden, das grundlegende Definitionen für Collectd und NTP enthält.

Dieses Modul wird am Ende nur noch in den Manifesten referenziert. Somit kann einem System z.B. die Rolle eines NTP- Servers zugewiesen werden, wobei die Konfiguration einmalig im Modul "role" festgelegt wird.


Damit der aufgeführte Code funktioniert müssen folgende Puppet Module incl. Abhängigkeiten installiert sein:
puppet-collectd
puppetlabs-ntp

Neues Modul- Skeleton anlegen
# puppet module generate role


Nach Ausführen des Befehls wurde automatisch ein neues Verzeichnis
/etc/puppetlabs/code/environments/production/modules/role
angelegt.

Im Unterverzeichnis manifests muss die Datei init.pp anpasst und folgender Code eingefügt werden:
# START collectd
class role::collectd {
  class { '::collectd':
    purge        => true,
    recurse      => true,
    purge_config => true,
    fqdnlookup   => true,
  }
  class { 'collectd::plugin::cpu': }
  class { 'collectd::plugin::disk': }
  class { 'collectd::plugin::memory': }
  class { 'collectd::plugin::load': }
  class { 'collectd::plugin::users': }
  class { 'collectd::plugin::swap':
    reportbydevice => false,
    reportbytes    => true
  }
  class { 'collectd::plugin::interface':
    interfaces     => ['lo'],
    ignoreselected => true
  }
  class { 'collectd::plugin::network':
    servers => { '172.16.20.170' => {
      'port' => '25826'
      }
    }
  }
}

# collectd plugin for openvpn
class role::collectd::openvpn {
  class { 'collectd::plugin::openvpn':
    collectindividualusers => false,
    collectusercount       => true,
  }
}

# collectd plugin for mysql
class role::collectd::mysql {
  collectd::plugin::mysql::database { 'mysql':
    host        => 'localhost',
    username    => 'dbcheffe',
    password    => 'saugeheim',
    port        => 3306,
    masterstats => true,
  }
}
# ENDE collectd

# START ntp for ntp server
class role::ntp {
  class { '::ntp':
    restrict => [
        'default kod nomodify notrap nopeer noquery',
        '-6 default kod nomodify notrap nopeer noquery',
        '-6 ::1',
    ],
    servers  => [
      '0.pool.ntp.org',
      '1.pool.ntp.org',
      '2.pool.ntp.org',
      '3.pool.ntp.org',
    ]
  }
}
# ENDE ntp
Um das neue selbst, erstellte Puppet Modul letztendlich zu benutzen, können die definierten Klassen nun in den Host- Manifesten referenziert werden.

Beispiel:
node 'ntpserver1.rs.de' {
  include role::ntp
  include role::collectd
}

node 'dbserver1.rs.de' {
  include role::collectd
  include role::collectd::mysql
}

node 'vpnserver1.rs.de' {
  include role::collectd
  include role::collectd::openvpn
}