Puppet External Node Classifier

Mit Hilfe von Puppet – einem Open Source Configuration Management System – ist es möglich Clients, Server und virtuelle Maschinen effizient zu installieren, verwalten und zu administrieren. Systeme, die von Puppet verwaltet werden, werden über sogenannte “Node-Definitionen”  in Puppet bekannt gemacht und erhalten hierüber ihre Konfiguration in Form von angefertigten Modulen, Klassen und Ressourcen.

node beispielserver.domain.de {
  include beispielklasse
}

Reguläre Ausdrücke werden ebenfalls unterstützt, um z.B. alle “beispielserver123.domain.de” zusammenzufassen.

node /beispielserver\d+.domain.de/ {
  include beispielklasse
}

In manchen Fällen kann es jedoch auch sinnvoll sein, seine Hosts aus externen Quellen (LDAP, MySQL, usw.) zu beziehen. Zum Beispiel mit einer im Unternehmen bereits existierende CMDB. Puppet bietet mit “External Node Classifier” (ENC) die Möglichkeit, externe Quellen abzufragen. Um ENC zu aktivieren, muss die Puppetkonfigurationsdatei puppet.conf um zwei Zeilen angepasst werden.

[master]
node_terminus = exec
external_nodes = /usr/local/bin/puppet_node_classifier

Anschließend wird Puppet seine Hosts nicht mehr in seiner statischen site.pp suchen, sondern übergibt den anfragenden Hostname an das Skript unter dem angegebenen Pfad. Das Skript kann ebenfalls wie Puppet in Ruby geschrieben sein oder in einer anderen Skript- oder Programmiersprache die YAML unterstützten, z.B Perl, C, PHP u.v.m.
Die Ausgabe des Skripts an stdout in YAML formatiert sieht wie folgt aus und entspricht der Node-Definition im erst genannten Beispiel:

---
classes:
- beispielklasse
...

Außerdem muss das Skript als Return-Status “0” zurückgeben, damit Puppet die Katalogzuweisung erfolgreich durchführen kann und der Host entsprechend der Anweisungen konfiguriert werden kann.

Sebastian Saemann
Sebastian Saemann
Head of Managed Services

Sepp kam von einem großen deutschen Hostingprovider zu NETWAYS, weil ihm dort zu langweilig war. Bei uns kann er sich nun besser verwirklichen, denn er leitet zusammen mit Martin das Managed Services Team. Wenn er nicht gerade Server in MCollective einbindet, versucht er mit seinem Motorrad einen neuen Geschwindigkeitsrekord aufzustellen.