/ / Como usar uma classe de um módulo imediatamente após a instalação com o Puppet? - vagrant, fantoche, vagrantfile

Como usar uma classe de um módulo imediatamente após instalá-lo com o Puppet? - vagabundo, fantoche, vagrantfile

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 № 1

Nã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:

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.