Como forçar ações em recursos “atualizados” no Chef?

4

No código a seguir, eu crio um serviço que gostaria de iniciar somente após implantar os arquivos de que ele depende e reiniciá-lo sempre que esses arquivos forem alterados. Esta receita muito básica não funciona como eu esperava:

supervisor_service "test-service" do
    command "/bin/cat"
    autostart false
    action :enable
end

cookbook_file "/tmp/test.txt" do
  source "test.txt"
  notifies :restart, 'supervisor_service[test-service]'
end

No final da corrida, o cliente-chefe registra apenas:

  • supervisor_service[test-service] action restart (up to date)

... e o serviço não é executado. Um manual sudo supervisorctl restart test-service funciona bem.

No que me diz respeito, uma ação de reinicialização é uma solicitação para que o recurso mude de estado (ativado - > iniciado), qual é a maneira correta de expressar isso ao Chef?

EDIT : achei que valeria a pena acrescentar que o uso do: modificador imediato faz com que a ação seja executada corretamente. No entanto, na prática, eu tenho vários arquivos que podem desencadear uma reinicialização, e eu preciso que todos eles sejam atualizados antes de reiniciar (exatamente o comportamento: o atraso é destinado a fornecer).

    
por MattJ 02.05.2013 / 14:30

1 resposta

1

Estou usando o Chef 10.14.4 e recebo os mesmos problemas que você. Qual versão você está usando?

A notificação aparece no arquivo de log, como se estivesse prestes a executar a ação: restart no provedor supervisor_service:

INFO: cookbook_file[/tmp/test.txt] sending restart action to supervisor_service[test-service] (delayed)
INFO: Processing supervisor_service[test-service] action restart (temp::default line 16)

mas depois nós simplesmente conseguimos:

INFO: Chef Run complete in 14.302624 seconds

Nesse meio tempo, o melhor que consegui trabalhar foi:

supervisor_service "test-service" do
    command "/bin/cat"
    autostart false
    action :enable
end

execute "restart test-service" do
    command "supervisorctl restart test-service"
    user "root"
    action :nothing
end

cookbook_file "/tmp/test.txt" do
    source "test.txt"
    notifies :run, "execute[restart test-service]"
end

que é essencialmente o mesmo código que deve ser executado, mas não o faz.

Como isso funciona bem, mas notificar o supervisor_service não, pode-se apenas supor que existe um bug dentro de este arquivo no livro de instruções do supervisor (v0.4.0).

    
por 08.05.2013 / 00:51

Tags