Ich würde gerne wissen , wie einzurichten :datadir:
in hiera.yaml
für eine optimale Nutzung mit Puppet und Vagrant. Derzeit verwende ich Vagrant 1.5.0 mit Virtualbox 4.2 unter Ubuntu 13.10 mit einem Ubuntu 12.04-Gast, auf dem Puppet 3.1.1 ausgeführt wird
Ich versuche, eine Umgebung einzurichten, die diesem Blog-Beitrag " Puppet Best Practices: Umgebungsspezifische Konfigurationen" ähnelt . Insbesondere enthält meine Vagrant-Datei:
config.vm.define "servername" do |servername|
servername.vm.box = "precise-puppet-3"
servername.vm.network "private_network", ip: "192.168.213.2",
virtualbox__intnet: "networkname"
# Provision with puppet.
servername.vm.provision :puppet do |puppet|
puppet.hiera_config_path = "puppet/hiera.yaml"
puppet.manifests_path = "puppet/manifests"
puppet.module_path = "puppet/modules"
puppet.manifest_file = "servername.pp"
puppet.facter = {
"vagrant" => "1",
"server" => "servername",
}
end
end
Ich kann bestätigen, dass das hiera_config_path
korrekt ist, da beim Löschen eine Fehlermeldung angezeigt wird hiera.yaml
.
puppet/hiera.yaml
enthält:
---
:backends: yaml
:yaml:
:datadir: "manifests/configuration"
:hierarchy:
- "%{::clientcert}"
- "%{::environment}"
- "virtual_%{::is_virtual}"
- common
:logger: console
Und puppet/manifests/configuration/common.yaml
enthält außerdem:
---
myvar: "test"
Testen Sie dies über die Befehlszeile:
$ hiera -c hiera.yaml myvar
test
So weit, ist es gut. Wenn ich jedoch versuche, dies aus einer Puppet-Manifestdatei heraus zu testen, kann die Variable nicht gefunden werden, und es wird eine Fehlermeldung angezeigt. Beispieltest:
$myvariable = hiera(myvar)
notice("My variable is: ${myvar}")
Der Fehler ist:
Error: Could not find data item myvar in any Hiera data file and no default supplied at...
Wenn ich über ssh in meinen Computer ssh vagrant ssh
, kann ich sehen, dass Vagrant mein Manifest-Verzeichnis unter / tmp / vagrant-puppet-2 bereitstellt. Wenn ich die hiera.yaml
Datei bearbeite und durch :datadir:
den vollständigen Pfad ersetze /tmp/vagrant-puppet-2/manifests/configuration
, können meine Puppet-Manifeste auf meine Hiera-Daten zugreifen. Kann ich dies jedoch mit einem relativen Pfad tun?
hiera.yaml
Dateien benötige , eine für die Verwendung mit Vagrant und eine für die Verwendung mit Puppet (in der Produktion)?Das, mit dem
hiera.yaml
ich arbeite, spezifiziert:datadir: /etc/puppet/hiera
und ich hatte kein Glück, die--yamldir
Option als einige der anderen angegebenen Antworten festzulegen. Nach einer Weile wurde mir jedoch klar, dass ich meine Hieradaten einfach diesem Ort auf der Gast-VM zuordnen konnte:Das funktioniert gut :-)
quelle
config.vm.synced_folder("D:/branches/preprod/hieradata", "/etc/puppet/hieradata")
und auchpuppet.hiera_config_path = "D:/branches/preprod/hiera.yaml"
in den Strophen der Puppenkonfiguration angegeben .Das mache ich in meinen eigenen Marionettenexperimenten.
Meine minimalistische hiera.yaml sieht so aus:
Zur Veranschaulichung sieht meine Verzeichnisstruktur auf dem Host (MacBook) folgendermaßen aus:
quelle
Ihr ursprüngliches Problem war / ist, dass
:datadir
dies ein absoluter Weg sein muss. In Hiera können Sie keine relativen Pfade für die angeben:datadir
. Wenn Sie der Meinung sind, dass dies zulässig sein sollte, senden Sie bitte einen Antrag auf Änderung .manifestdir ist veraltet . Möglicherweise bevorzugen Sie stattdessen Yamldir . Sie können diese Einstellung überschreiben, wenn Sie die Puppenanwendung bestehen.
Für Landstreicher:
UPDATE : Da Sie einen absoluten Pfad angeben müssen (und weil vagrant), sollten Sie Ihren eigenen freigegebenen Ordner einrichten, damit Sie explizit angeben können, wo er sich befindet, und keine Annahmen über einen vagrant festgelegten Pfad für die Puppenausführung treffen. Fügen Sie dies zu Ihrem hinzu
Vagrantfile
:und ändern Sie dann die erste Zeile oben in:
quelle
config.vm.synced_folder "puppet/manifests/configuration", "/hieradata"
puppet apply
. Das Datenverzeichnis ist relativ zum aktuellen Verzeichnis, in dem Puppet ausgeführt wurde.