Je voudrais savoir comment mettre en place :datadir:
dans hiera.yaml
pour une utilisation optimale avec des marionnettes et Vagrant. Actuellement, j'utilise vagrant 1.5.0 avec virtualbox 4.2 sur Ubuntu 13.10 avec un invité Ubuntu 12.04 exécutant la marionnette 3.1.1
J'essaie de mettre en place un environnement similaire à cet article de blog, Puppet Best Practices: Environment specific configs . Plus précisément, mon Vagrantfile contient:
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
Je peux confirmer que hiera_config_path
c'est correct, car j'obtiens une erreur si je supprime hiera.yaml
.
puppet/hiera.yaml
contient:
---
:backends: yaml
:yaml:
:datadir: "manifests/configuration"
:hierarchy:
- "%{::clientcert}"
- "%{::environment}"
- "virtual_%{::is_virtual}"
- common
:logger: console
Et puppet/manifests/configuration/common.yaml
contient en outre :
---
myvar: "test"
Tester cela depuis la ligne de commande:
$ hiera -c hiera.yaml myvar
test
Jusqu'ici tout va bien. Cependant, si j'essaie de tester cela à partir d'un fichier manifeste de marionnettes, la variable est introuvable et j'obtiens une erreur. Exemple de test:
$myvariable = hiera(myvar)
notice("My variable is: ${myvar}")
L'erreur est:
Error: Could not find data item myvar in any Hiera data file and no default supplied at...
Si je ssh dans ma machine via vagrant ssh
, je peux voir que Vagrant monte mon répertoire manifeste dans / tmp / vagrant-puppet-2. Si je modifie le hiera.yaml
fichier et le remplace :datadir:
par le chemin complet /tmp/vagrant-puppet-2/manifests/configuration
, mes manifestes Puppet peuvent accéder à mes données Hiera. Puis-je faire cela avec un chemin relatif, cependant?
hiera.yaml
fichiers, un pour une utilisation avec vagabond et un pour une utilisation avec Puppet (en production)?La
hiera.yaml
spécification avec laquelle je travaille:datadir: /etc/puppet/hiera
et je n'ai pas eu de chance de définir l'--yamldir
option comme certaines des autres réponses spécifiées. Cependant, j'ai réalisé après un certain temps que je pouvais simplement mapper mes hieradonnées à cet emplacement sur le vm invité:Cela fonctionne bien :-)
la source
config.vm.synced_folder("D:/branches/preprod/hieradata", "/etc/puppet/hieradata")
et également spécifiépuppet.hiera_config_path = "D:/branches/preprod/hiera.yaml"
dans les strophes de configuration des marionnettes.C'est ce que je fais dans mes propres expériences de marionnettes.
Mon hiera.yaml minimaliste ressemble à ceci:
Et à des fins d'illustration, ma structure de répertoires sur l'hôte (MacBook) ressemble à ceci:
la source
Votre problème d'origine était /
:datadir
doit être un chemin absolu. Hiera ne vous permet pas de spécifier des chemins relatifs pour le:datadir
. Si vous pensez que cela devrait être autorisé, veuillez soumettre une demande de modification .manifestdir est obsolète . Vous préférerez peut-être utiliser le yamldir à la place. Vous pouvez remplacer ce paramètre lorsque vous réussissez à appliquer la marionnette.
Pour vagabond:
MISE À JOUR : Étant donné que vous devez fournir un chemin absolu (et parce que vagabond), vous devez configurer votre propre dossier partagé afin que vous puissiez être explicite sur son emplacement et ne pas faire d'hypothèses sur un chemin défini vagabond pour l'exécution de marionnettes. Ajoutez ceci à votre
Vagrantfile
:puis changez la première ligne ci-dessus en:
la source
config.vm.synced_folder "puppet/manifests/configuration", "/hieradata"
puppet apply
. Le datadir sera relatif au répertoire courant où Puppet a été exécuté.