Que medidas podem ser tomadas para herdar e substituir algumas partes de um livro de receitas do Chef?

9

Com mais de 3200 livros de receitas disponíveis no supermercado Chef, muitas vezes já existe um livro de receitas que cobre a necessidade que preciso resolver.

Quase toda vez que há alguma alteração necessária em um modelo, variável ou recurso em um livro de receitas existente.

Quais são as etapas para substituir e / ou melhorar os livros de receitas existentes? Sem digitar o código e manter a capacidade de obter atualizações de versão no futuro.

Evgeny
fonte
1
A maioria dos livros de receitas possui um certo número de atributos que podem ser simplesmente configurados durante a criação de um livro de receitas de invólucro. Você geralmente não precisa "substituir" nada para fazer os ajustes esperados.
filhotes

Respostas:

13

Existem muitas especificidades, mas o padrão geral que usamos é "quebrar e estender". A idéia geral é criar um livro de receitas que dependa do livro de receitas da comunidade, geralmente chamado mycompany_originalthing, e depois fazer receitas include_recipe 'originalthing::whatever'naquilo que chama, mas com mais itens adicionados antes / depois ou com chamadas para coisas como edit_resourcealterar recursos. Evite edit_resourcequando possível, pois isso leva ao código quebradiço, mas existe se você precisar. Você também pode usar livros de receitas de invólucro para definir atributos, subclasse ou agrupar recursos personalizados, etc.

Para o caso específico de "Preciso ajustar um modelo em uma receita da comunidade", seria assim:

include_recipe 'original::whatever'

edit_resource!(:template, '/path/to/something') do
  source 'mytemplate.erb'
  cookbook 'mycompany_original'
end

Você pode encontrar mais detalhes edit_resourcee amigos em https://coderanger.net/rewind/

Com os livros de receitas baseados em recursos personalizados em vez de receitas, as coisas podem ficar mais complexas, mas as especificidades dependem muito de como exatamente o livro de receitas que você está estendendo está escrito.

coderanger
fonte
Esse é o padrão que seguimos e geralmente funciona até que o manual de receitas da comunidade fique muito difícil e seja mais fácil reescrevê-lo do zero.
Travis Thompson
Ótimo! Nem sabia que eles mudaram a velha coisa de rebobinar buggy para algo que faz parte do Chef.
precisa
Desculpe perguntar, mas seu nome de usuário também está incluído no link que você mencionou ... O que me faz pensar se você tem alguma afiliação com esse link. Em caso afirmativo, você está familiarizado com as políticas de SE sobre a inclusão de uma "divulgação" apropriada sobre esse assunto (a ser incluído em sua resposta também)?
Pierre.Vriens
1
@ Pierre.Vriens no contexto do mundo Chef, meu blog é aproximadamente equivalente aos documentos oficiais. Verifique minha história sobre isso, se você quer confirmação :)
coderanger
(neste caso eu não link para os documentos oficiais, porque eles contêm erros de sintaxe para esta API)
coderanger