Chef-cliente não atualiza um livro de receitas do servidor

9

Eu tenho um livro de receitas do chef (para apache2). Falha ao trabalhar em um nó. Então, eu estou tentando ajustá-lo e atualizá-lo, mas o nó não parece baixar a nova versão. Consegui fazer o upload de tudo para o servidor chef da minha máquina local knife upload ., com êxito, e imprimi que ele carregou os bits do apache2 que eu mudei.

Quando eu executo manualmente (como root) chef-clientno nó, posso vê-lo entrando em contato com o servidor, obtendo a lista de execuções, etc. No entanto, os arquivos de receita /var/cache/chef/cookbooks/apache2são os antigos. E a receita falha (porque não possui as alterações que fiz).

Como faço para que o cliente chef no nó use a nova versão atualizada do livro de receitas apache2? Preciso aumentar o número da versão no livro de receitas (ainda não o fiz)?

chef-client -l debug resultado:

[2015-01-30T10:51:31+01:00] DEBUG: Synchronizing cookbook apache2
[2015-01-30T10:51:31+01:00] DEBUG: Not storing cookbooks/apache2/recipes/mod_ldap.rb, as the cache is up to date.
[2015-01-30T10:51:31+01:00] DEBUG: Not storing cookbooks/apache2/recipes/mod_xsendfile.rb, as the cache is up to date.
[2015-01-30T10:51:31+01:00] DEBUG: Not storing cookbooks/apache2/recipes/mod_auth_openid.rb, as the cache is up to date.
[2015-01-30T10:51:31+01:00] DEBUG: Not storing cookbooks/apache2/recipes/mod_setenvif.rb, as the cache is up to date.
[2015-01-30T10:51:31+01:00] DEBUG: Not storing cookbooks/apache2/recipes/mod_python.rb, as the cache is up to date.
[2015-01-30T10:51:31+01:00] DEBUG: Not storing cookbooks/apache2/recipes/mod_authz_host.rb, as the cache is up to date.
[2015-01-30T10:51:31+01:00] DEBUG: Not storing cookbooks/apache2/recipes/mod_proxy_ajp.rb, as the cache is up to date.
[2015-01-30T10:51:31+01:00] DEBUG: Not storing cookbooks/apache2/recipes/mod_expires.rb, as the cache is up to date.
(lots of this for all files)

Eu sou novo no chef, por isso posso ter cometido um erro de iniciante.

Rory
fonte
Vá para a interface da web chef-servidor e verifique se as alterações no livro de receitas estão lá.
Draco Ater
1
Certifique-se de que você correu knife cookbook upload <cookbook_name>. Se isso não resolver, tente adicionar a versão e, em seguida, executar knife cookbook list <cookbook_name>para garantir que você está realmente fazendo o upload corretamente. Como alternativa, execute knife cookbook download(em outro diretório) para selecionar o que o servidor acha que é o código certo.
Tejay Cardon

Respostas:

6

Posso pensar em algumas coisas que podem ajudá-lo.

  1. Verifique se a versão do livro de receitas que você está carregando é a versão mais recente

    Um problema comum com a versão do livro de receitas é que você pode modificar a versão 1.0.0 do livro de culinária localmente e fazer o upload, mas o Chef Server já possui a versão 1.0.1 do livro de receitas. Nesse caso, os Chef Clients normalmente recuperam a versão mais recente (a menos que seja dito o contrário) e suas alterações nunca serão sincronizadas com o cache local.

    Você pode ver todas as versões atuais do livro de receitas no Chef Server via: knife cookbook show apache2

    Uma solução para isso é a que você mencionou - aumente o número da sua versão além do que existe no Chef Server, ou seja, 1.0.2 e faça o upload.

    Outro método é remover quaisquer outros livros de receitas apache2 do Chef Server e recarregar novamente o que você deseja. Isso não precisa de nenhuma atualização de número de versão, e o resultado final é que o Chef Server terá um único livro de receitas apache2.

  2. Valide que suas alterações estão realmente chegando ao Chef Server

    Usando knife cookbook show apache2 <cookbook version> recipes default.rb Substituir versão, caminho e nome do arquivo - por exemplo, se você deseja visualizar um modelo chamado foo.erb:knife cookbook show apache2 0.1.0 templates foo.erb

    Este comando solicitará o arquivo do Chef Server e exibirá a saída no seu terminal. Essa é uma maneira simples de determinar se as alterações feitas estão sendo carregadas knife cookbook upload.

Além disso, se isso não ajudar, a adição de detalhes de knifeversão, chef-serverversão, chef-clientversão e também um log de depuração knife cookbook upload apache2 -VVseria útil na depuração adicional.

Mike Fiedler
fonte
1
Muito obrigado por esta resposta ... me levou a ver que tínhamos restrições no livro de receitas em nosso ambiente de produção, não em nossos environment / production.rb, mas definido por berkshelf! Eu nem sabia que poderia fazer isso. De qualquer forma, depois de reenviar nosso ambiente production.rb, um novo chef pegou nosso último livro de receitas de aplicativos.
Colin Curtin
2

Primeiro, depure todas as versões dos livros de receitas no servidor e verifique a versão do livro de receitas que o cliente está baixando. se for antigo, verifique se o servidor possui uma versão atualizada. se também for sim, acesse a interface do servidor do chef e verifique env. você pode configurar um ambiente no qual a restrição de livros de receitas é especificada. Atualize a versão por lá e ela começará a funcionar novamente.

zedfauji
fonte
1

Outra causa disso pode ser que nem todas as dependências do livro de receitas estão presentes no chef-server. Eu me deparei com isso agora, e a nova versão do meu livro de receitas estava aparecendo, knife cookbooks listmas meu cliente não estava usando a nova versão. Após alguma depuração, descobri que o Berkshelf, nem o faca, carregou a nova dependência do meu livro de receitas. Após o upload, o cliente começou a usar a versão mais recente.

Michael Grubb
fonte
Certifique-se de que você correu faca livro de receitas de upload <cookbook_name>
Net Runner