Retorna da receita do Chef sem levantar uma exceção

3

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.

    
por HUB 21.06.2012 / 13:40

2 respostas

2

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 .

    
por 02.10.2013 / 13:55
1

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.

    
por 22.06.2012 / 08:21