Ok, parece que me deparei com dois problemas diferentes. O maior problema era que, embora eu tivesse um módulo que eu criei chamado "hieraconfig" que copiava meus arquivos hiera.yaml e common.json pré-criados para / etc / puppet, o módulo jboss que chama hiera estava sendo executado primeiro (embora eu incluísse depois de hieraconfig em manifesto - veja abaixo). Eu tentei corrigir isso para avaliar hierasetup primeiro no manifesto site.pp, mas ele ainda executava o módulo jboss primeiro:
stage { 'pre':
before => Stage['main']
}
# add the hierasetup module to the new 'pre' run stage
class { 'hierasetup':
stage => 'pre'
}
include ::hierasetup
include ::jboss
Não tenho correção atual para isso. Mas pelo menos eu sei que parte da falha foi que /etc/puppet/hiera.yaml e /etc/puppet/hieradata/common.json nem estavam presentes na VM quando o hiera estava sendo chamado pelo módulo jboss, já que o hierasetup não tinha corrido ainda. Eu fiz este trabalho temporariamente usando o provisionador de script do Vagrant em vez do fantoche para copiar os arquivos para mim.
O segundo problema foi que porque eu pensei que esses arquivos estavam presentes o tempo todo eu fiquei bastante confuso sobre o que "puppet.hiera_config_path" deveria fazer. Através de várias tentativas de tentativa e erro, aqui está o que descobri:
-
puppet.manifests_path , puppet.modules_path e puppet.hiera_config_path aponta apenas para caminhos na máquina host (em meu caso no OSX). Não se engane em pensar, se você usar caminhos relativos, que é relativo à montagem / vagrant na VM, e não melhor em relação ao diretório que contém o seu Vagrantfile no máquina host (embora isso é obviamente o que é montado para /vagabundo).
-
Cada uma dessas variáveis _path , SE e SOMENTE, se forem realmente no Vagrantfile (caso contrário, os diretórios de fantoches padrão serão pesquisado), fará com que o Vagrant copie os módulos, manifestos e hiera config para subdiretórios sob / tmp / vagrant-puppet [-X] (com -X possivelmente sendo um sufixo numérico adicional como / tmp / vagrant-puppet-1) e diga ao fantoche para olhar em / tmp para eles.
Se você já tem arquivos de fantoches na VM que deseja use mas defina as variáveis _path então o comando puppet do Vagrant é não vai encontrá-los, porque redireciona o boneco para / tmp / vagrant-puppet [-X] quando você os define. Você não pode mudar isso destino na VM, embora a saída "vagrant up" notifique você onde eles estão sendo mapeados assim:
padrão: / tmp / vagrant-puppet-1 / manifests = > / Users // vm_stuff / vagrant-fresh / puppet_files / manifests
padrão: / tmp / vagrant-puppet-1 / modules-0 = > / Users // vm_stuff / vagrant-fresh / puppet_files / modules
O caminho após o = > arrow é o diretório de origem em seu host máquina que você especificou com as variáveis _path no Vagrantfile. O caminho antes do = > arrow é a localização na VM onde o conteúdo do diretório de origem será copiado.
Se você preferir que o Vagrant tenha um visual fantoche em default diretórios para arquivos que você já colocou na VM (que você não precisa ser copiado pelo Vagrant para você em / tmp) então não especifique qualquer variável _path no Vagrant. Alternadamente, se nem o locais padrão ou a localização / tmp são satisfatórios você pode substituir completamente o comportamento padrão do Vagrant explicitamente especificando onde procurar cada um com as puppet.options variável, assim:
puppet.options="--hiera_config = / caminho / para / hiera.yaml --modulepath '/ path / to / modules / --manifestdir / path / to / manifests / "
Se algo falhar e você tiver definido --verbose & & --debug como parte do arquivo puppet.options (possivelmente ele será mostrado sem o conjunto também) você receberá um erro mostrando o comando puppet enviado via ssh para a VM guest, assim:
The following SSH command responded with a non-zero exit status.
Vagrant assumes that this means the command failed!
puppet apply --verbose --debug --modulepath '/tmp/vagrant-puppet-1/modules-0:/etc/puppet/modules' --manifestdir /tmp/vagrant-puppet-1/manifests --hiera_config=/tmp/vagrant-puppet-1/hiera.yaml --detailed-exitcodes /tmp/vagrant-puppet-1/manifests/site.pp || [ $? -eq 2 ]
Desde que --hiera_config esteja apontando para o local / arquivo correto neste comando, ele deve ler sua configuração sem problemas. Eu tive um problema temporariamente (antes que eu descobrisse que /etc/puppet/hieradata/common.json não estava presente na VM) para onde ele iria ler o hiera.yaml mas depois falhava porque o common.json estava ausente.
Tudo dito e feito embora hiera olha em locais muito específicos, dependendo se você definir " puppet.hiera_config_path " ou não, a menos que você substituir manualmente o puppet.options.