
ich habe die Aufgabe bekommen, ein Hiera-Puppet-Skript zu implementieren, um sites_enabled für Nginx zu verwalten.
Hier ist mein Puppet-Skript:
common.yaml
---
classes:
- nginx
nginx:
enabled:
abc.com
xyz.com
disabled:
test.com
test2.com
init.pp
class nginx{
create_resources("site_enabled", hiera("nginx"), {})
}
define site_enabled($name){
file { '/etc/nginx/sites_enabled/${name}':
ensure => 'link',
target => '/etc/nginx/site_available/${name}',
}
}
Aber bei der Ausführung von Puppet ist folgender Fehler aufgetreten:
Fehler: Katalog konnte nicht vom Remote-Server abgerufen werden: Fehler 400 auf dem SERVER: String kann unter /etc/puppet/modules/nginx/manifests/init.pp:7 auf Knoten XX nicht in Integer konvertiert werden.
Als ich versuchte, Hiera über die Befehlszeile abzufragen:
$ hier nginx
{"aktiviert"=>["abc.com", "xyz.com"]}
Ich weiß, dass ich irgendwo einen Fehler gemacht habe. Bitte korrigieren Sie mich. Ich verstehe nicht ganz, wie Hiera mit Array-Daten abfragt und verarbeitet. Bitte zeigen Sie mir, wenn möglich, ein nützliches Dokument.
Vielen Dank.
Antwort1
Ihre Fragen sind sehr ähnlichProbleme beim Erstellen von Hiera-Hashes für create_resources, auf die es eine Antwort gibt. Ich werde hier eine Zusammenfassung geben.
Entsprechend derDokumentation für create_resourcesmuss der Hash die Form haben {title => {parameters} }
. Sie sollten Ihre Hiera-Daten bearbeiten, um die Parameter festzulegen. Da es keine gibt, könnte es meiner Meinung nach einfach so aussehen:
common.yaml
---
classes:
- nginx
nginx::enabled:
abc.com: {}
xyz.com: {}
nginx::disabled:
test.com: {}
test2.com: {}
Als nächstes müssen Sie die richtigen Daten aus Hiera laden. Sie möchten nginx::enabled
nicht allenginx
init.pp
class nginx{
create_resources("site_enabled", hiera("nginx::enabled"))
}
define site_enabled($name){
file { '/etc/nginx/sites_enabled/${name}':
ensure => 'link',
target => '/etc/nginx/site_available/${name}',
}
}
Antwort2
Danke, Sciunus, für deine schnelle Antwort.
Darf ich diese Frage stellen? Ich möchte meine YAML-Daten in folgendem Format erstellen:
nginx:
enabled: abc.com xyz.com disabled: test.com test2.com
ich möchte das Format NICHT so machen:
nginx::aktiviert:
abc.com: {} xyz.com: {}
nginx::deaktiviert:
test.com: {} test2.com: {}
Wie kann ich dafür sorgen, dass mein Puppet-Skript wie erwartet funktioniert? Ich habe auch das Hiera-Dokument gelesen und weiß, dass es auch drei Arten von Nachschlagedaten unterstützt: Hiera, Hiera_Hash und Hiera_Array. Aber ich konnte es nicht wie erwartet zum Laufen bringen, obwohl ich mein YAML-Dateiformat oben verwendet habe.
Entschuldigung, ich bin bei Hiera noch ganz neu.
Danke im Voraus.