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-client
no 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/apache2
sã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.
knife cookbook upload <cookbook_name>
. Se isso não resolver, tente adicionar a versão e, em seguida, executarknife cookbook list <cookbook_name>
para garantir que você está realmente fazendo o upload corretamente. Como alternativa, executeknife cookbook download
(em outro diretório) para selecionar o que o servidor acha que é o código certo.Respostas:
Posso pensar em algumas coisas que podem ajudá-lo.
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.
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
knife
versão,chef-server
versão,chef-client
versão e também um log de depuraçãoknife cookbook upload apache2 -VV
seria útil na depuração adicional.fonte
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.
fonte
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 list
mas 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.fonte