2017-12-26 6 views
0

Ich bin neu im Konfigurationsmanagement, nur FYI.Puppet-Iteration von externer Datei

Ich versuche, elasticsearch zu puppen, und möchte eine Master-Liste von elasticsearch Knoten in einer Datei haben (die für mehrere Dinge verwendet werden kann, nicht nur diesen Zweck).

Ich möchte elasticsearch.yml über eine ERB-Vorlage hinzufügen und erweitern Sie die Liste der FDQNs in die discovery.zen.ping.unicast.hosts: [] param.

Zum Beispiel habe ich eine externe Datei namens es_hosts in Modul/Dateien, die enthält:

host1.domain.com 
host2.domain.com 
host3.domain.com 
host4.domain.com 

Dann, wenn die Puppe ERB-Vorlage haben dies in der param baut:

discovery.zen.ping.unicast.hosts: ["host1.domain.com", "host2.domain.com", "host3.domain.com", "host4.domain.com"] 

Ich habe habe ein paar Dinge versucht, aber ich kann meinen Kopf nicht darum wickeln.

Ich würde diese Liste für andere Dinge wie Firewall-Regeln, usw. verwenden, so würde ich gerne eine Master-Liste als Referenz haben, die von meinem Team aktualisiert werden kann.

Danke für jede Hilfe!

Antwort

3

Anstatt eine Liste in einer Datei zu haben, wäre es besser, sie in Hiera zu haben, da das Definieren von Listen und anderen externen Daten genau das ist, wofür Hiera ist.

(Wenn Sie nicht Hiera noch verwendet haben, sollten Sie auf jeden Fall darauf nachlesen.)

So in Hiera würden Sie haben:

--- 
es_hosts: 
- host1.domain.com 
- host2.domain.com 
- host3.domain.com 
- host4.domain.com 

In Ihrem Manifest, Sie von der in lesen würde Hiera mit der hiera Funktion:

$es_hosts = hiera('es_hosts') 

(Beachten Sie, dass anstelle der hiera Funktion, die wir verwenden Puppet Automatic Parameter Lookup-Funktion oft stattdessen Daten in unsere Manifeste von Hier zu lesen a, aber Ihre Anforderung hier - eine Liste von ES-Hosts, die in mehreren Kontexten verwendet werden - schlägt vor, dass diese Liste nicht an eine bestimmte Klasseneingabe gebunden sein soll. Wenn dieser Sinn für Sie nicht gerade jetzt machen, müssen Sie über Parametrisierte Klassen und automatische Parametersuche lernen, aber ansonsten ist es nicht relevant zu dieser Antwort)

schließlich in Ihrem ERB-Vorlage würden Sie haben:.

Achten Sie darauf, dass die Variable $es_hosts aus Ihrem Manifest über eine Ruby-Instanzvariable @es_hosts in Ihrer ERB-Vorlage aufgerufen wird.

Beachten Sie schließlich, dass ein Elasticsearch Puppet-Modul auf dem Puppet Forget here verfügbar ist. Sie können feststellen, dass die Verwendung dieses Moduls besser ist als das Schreiben Ihres eigenen.

+0

Danke Alex. Das hat gut funktioniert. –

Verwandte Themen