Unsere Webinare erfreuen sich immer größerer Beliebtheit – trotzdem wollen wir es uns nicht nehmen lassen, kurz vorher noch einmal einen Reminder rauszuschicken!
Morgen früh um 10:30 Uhr, werden Markus und ich ein weiteres Puppet Webinar halten – diesmal aber mit dem Thema „Puppet: Aufbau einer Open Source Umgebung“, in dem wir uns näher mit Foreman beschäftigen wollen.
Bei Interesse sollte man sich gleich registrieren! Wer bisherige Webinare verpasst hat und es noch nicht kennt: Einfach in unserem Webinar Archiv vorbeischauen!
Übrigens: Als Vorbereitung empfiehlt es sich, die beiden bisherigen Puppet-Webinare Konfigurationsmanagement mit Puppet und Puppet: Aufbau einer Puppet Enterprise Umgebung anzusehen, um sich einen besseren Überblick über Puppet selbst zu verschaffen.
Wir freuen und schon auf morgen!
NETWAYS Blog
Parametrisierte Klassen mit Foreman
Wenn in den Einstellungen Parametrized_Classes_in_ENC für Puppet auf true gesetzt ist, unterstützt Foreman parametrisierte Klassen. Weitere Grundvoraussetzung ist außerdem das Foreman einen Puppetmaster als Smart Proxy angebunden hat und auf dessen Puppetmodule zugreifen kann.
Somit können die Puppet Klassen vom Puppetmaster importiert werden:
Innerhalb einer Klasse kann Foreman sich bei den Parametern dann über die Klassenvorgabe hinwegsetzen (= „Override“). Wie im folgenden Beispiel anhand der Klasse ntp mit dem Parameter servers gezeigt, empfiehlt es sich entsprechende Standardvorgaben zu setzen:
Ergänzend dazu können für einzelne Hosts über FQDN, Hostgruppe oder anderen Kriterien abweichende Werte festgelegt werden. Foreman bietet dazu an verschiedenen Stellen des Webinterfaces Möglichkeiten dies zu tun.
Nebenan ein exemplarisches Beispiel für geänderte NTP-Server innerhalb der Puppet Klasse.
Hier werden für die Hostgruppen CentOS und Debian abweichende Werte hinterlegt. Bei Systemen die keine Zuordnung zu den beiden Hostgruppen haben, greift die zuvor gesetzte Standardvorgabe.
Wichtig ist zudem das die jeweilige Puppet Klasse den entsprechenden Hosts auch zugewiesen wird. Auch dies kann bei Foreman an verschiedenen Stellen, z.B. direkt im Host oder der Hostgruppe, erfolgen.
Mit parametrisierten Klassen über Foreman ist es somit möglich individuelle Konfigurationen unabhängig von site.pp & Co. zu definieren und diese an zentraler Stelle übersichtlich zu verwalten.
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.