Estou experimentando o Puppet usando o Vagrant. Eu sou novo no Puppet.
Estou instalando módulos no meu manifesto Puppet usando a abordagem sugerida em: Posso instalar módulos fantoches através do manifesto fantoches?
Meu default.pp contém algo como:
$dsesterojava = "dsestero-java"
exec { "dsestero-java":
command => "puppet module install ${dsesterojava}",
unless => "puppet module list | grep ${dsesterojava}",
path => ["/usr/bin", "/bin"]
}
include java::java_7
Estou tentando importar um módulo e, em seguida, imediatamente uso as classes definidas nele.
Atualmente, recebo:
Error: Could not find class java::java_7
Se eu comentar a linha de inclusão e a execute novamente. O módulo é instalado. Se eu remover o comentário e executar o provisionamento novamente, ele funcionará.
Existe algum tipo de "frango e ovo"situação aqui. Posso usar um módulo no mesmo manifesto Puppet que o instala?
Como devo resolver isso?
Respostas:
3 para resposta № 1Não, você não pode fazer isso. Quando o seu catálogo é compilado, o Puppet pesquisará nos diretórios apropriados todos os códigos e dados necessários. Desde o java
O módulo não existe até a aplicação do catálogo,a compilação de um catálogo (ocorre antes da aplicação) dependendo da falha. Você está absolutamente lidando com uma situação de "galinha e ovo" aqui. Eu recomendo não usar o código Puppet para instalar o código Puppet.
Como alternativa, a abordagem recomendada para instalar e gerenciar seus módulos Puppet é usar uma destas soluções:
- bibliotecário-fantoche: http://librarian-puppet.com/
- r10k: https://github.com/puppetlabs/r10k
- gerenciador de código (somente PE): https://puppet.com/docs/pe/2017.3/code_management/code_mgr.html
Isso também resolverá o problema dentro do Vagrant se você estiver usando o agent
provisionador e assinando a instância do Vagrant para um Puppet Master.
Se você estiver usando o apply
provisionador dentro do Vagrant, você precisará seguir uma rota diferente. A solução mais simples é usar o shell
provisionador para instalar módulos Puppet via module install
após a instalação do Puppet (a menos que você estejausando uma caixa do Vagrant com o Puppet assado; nesse caso, você provavelmente não está instalando o Puppet nele). Como alternativa, você pode compartilhar um diretório com o host em que seus módulos estão instalados ou instalar o librarian-puppet
ou r10k
gemas na caixa do Vagrant e use-as para instalar no caminho apropriado. Posso entrar em mais detalhes sobre isso, mediante solicitação.