A maneira de interromper a execução de uma receita (por exemplo, devido a alguma condição) é usar uma instrução 'return'. Uma discussão completa aparece na resposta do jtimberman a uma pergunta paralela ao StackOverflow .
Existe uma maneira de retornar da receita do Chef sem levantar uma exceção?
Digamos que eu tenha uma receita longa. Eu quero adicionar um bloco ruby ao seu início, que irá verificar alguma condição (por exemplo, presença de diretório) e parar o processamento this receita (mas continuar a executar o resto do run_list) sem levantar uma exceção se a condição for bem sucedida .
A execução condicional (only_if / not_if) não resolve o problema porque tenho que adicionar a condição a todas as chamadas de recurso na receita, embora possa haver muitas delas.
Há um comentário no wiki do Opscode, onde o comentarista pergunta sobre o mesmo, mas sem resposta.
A maneira de interromper a execução de uma receita (por exemplo, devido a alguma condição) é usar uma instrução 'return'. Uma discussão completa aparece na resposta do jtimberman a uma pergunta paralela ao StackOverflow .
Eu dividiria essa receita em duas partes e usaria include_recipe
dentro de uma instrução if. Por exemplo, em cookbooks/foo/default.rb
:
some_condition = File.exists?("/etc/whatever") # Your specific check here
if some_condition
include_recipe "foo::conditional_bit"
end
Coloque sua receita condicional em cookbooks/foo/recipes/conditional_bit.rb
e adicione recipe[foo]
à lista de execução do nó apropriado.
Note que a ordem de execução será ligeiramente diferente se você tivesse especificado um bloco de rubi. A condição será verificada durante a fase "compilar" da execução chef-cliente, e não na fase "executar". Consulte a página Anatomia de um Chef Run para obter detalhes.