Ich versuche, mich darum zu kümmern, wie ich von etwas, das ich in meiner großen site.pp-Datei mache, in eine Struktur übergehen kann, die ich in hiera verwenden kann. Beim Lesen der Puppendokumente ist mir nicht klar, wie genau die Hiera-Daten ausgewertet werden und wann sie in das Bild passen. Ich habe kürzlich ein Upgrade von Puppet 2.7.x auf 3.3.x durchgeführt. Dies schließt die Hiera als Teil des Standardpakets ein, daher wollte ich mich endlich damit befassen, da dies mein Setup leichter lesbar / verständlich machen sollte.
Ich verwende zur Unterstützung von Systemen mehrere externe Organisationen. Dies umfasst die Konfiguration von Systemen, die für jede Organisation einzigartig sind. Oben auf meiner site.pp habe ich eine Struktur wie unten. Womit ich Fakten für jede Organisation basierend auf einem regulären Ausdruck festlege, der mit den Clientcert-Fakten übereinstimmt, die so konfiguriert und ausgegeben werden, dass sie jede Organisation zuverlässig identifizieren.
# match organization
case $::clientcert {
/.*example1.org/ :
{ $snmp_ro_community='...'
$snmp_location='Example Org 1'
... }
/.*example2.org/ :
{ $snmp_ro_community='...'
$snmp_location='Example Org 2'
... }
/.*example3.org/ :
{ $snmp_ro_community='...'
$snmp_location='Example Org 3'
... }
/.*example4.org/ :
{ $snmp_ro_community='...'
$snmp_location='Example Org 4'
... }
}
Beim Durchsuchen von Beispielen sehe ich keine Möglichkeit, in meiner hiera.yaml-Datei einen Mustervergleich durchzuführen. Ich vermute, ich muss etwas Offensichtliches vermissen.
Ich möchte mich dabei nicht auf eine benutzerdefinierte Tatsache verlassen. Ich halte mich lieber an das Client-Zertifikat, da ich sicher bin, dass dies die Organisation und das System korrekt identifiziert und mithilfe einer starken Kryptografie bestätigt wurde. Ich möchte die Werte einer Organisation nicht einer anderen Organisation geben.
site.pp
mit einem Hiera-Setup für Ihre Klassen und Klassenparameter koexistieren ?Antworten:
Dazu können Sie eine Hierarchie von YAML-Dateien einrichten. Beginnen wir mit
hiera.yaml
:Für die Ordnerstruktur können Sie jede Tatsache verwenden, die Sie in der Ausgabe von sehen können
facter -y
. Beispielsweise können Sie Hiera-Konfigurationsdateien für jede CPU-Architektur haben. Dann würden Sie Zeile hinzufügenund hiera würde schauen, sagen wir mal rein
arch/amd64.yaml
Um hiera zu debuggen, können Sie Ihre aktuellen Fakten sichern:
Und suchen Sie nach einer Variablen:
Hiera geht alle Regeln durch und versucht, die Variable zu finden:
Für den Abgleich ist
$::clientcert
es möglicherweise eine gute Idee, die Top-Domain in eine separate Tatsache zu extrahieren und dann nur Yaml-Dateien zu haben, fürcert/example1.org.yaml
die etwa Folgendes enthalten wäre:Es ist gut zu wissen, dass Sie auch dann Parameterwerte einrichten können, wenn Sie ein Modul haben, das überhaupt keinen Hiera-Funktionsaufruf enthält:
einige hiera config:
quelle
Ich habe aus einem ähnlichen Grund nach dem gleichen gesucht. und haben festgestellt, dass hiera in github hilfreich jjulien / hiera-regex unterstützt . Als Beispiel aus der Readme-Datei des Projekts selbst: Sie müssen ein neues Backend konfigurieren, das die Gruppierung wie folgt behandelt:
/etc/puppet/hiera.yaml:
/var/lib/hiera/fqdn/fqdn.regex:
Ich sehe jedoch, dass mehrere Puppet-User-Posts und Puppetlabs-Videos davor warnen, Hiera für die Klassifizierung zu verwenden, insbesondere jetzt mit der Veröffentlichung von PE 3.7 mit dem Node Manager.
quelle