livro de receitas do chef com funções incorporadas
Pergunta
Eu criei um livro de receitas do chef, que tem muitas dependências de outros livros de receitas.Meu principal problema agora é que as receitas de outros livros de receitas são executadas em ordem aleatória.Se eu especificar a execução dessas receitas no arquivo vagrant como:
chef.add_recipe "gitlab::core_prereq"
chef.add_recipe "postfix"
chef.add_recipe "gitlab::users_prereq"
chef.add_recipe "rvm::vagrant"
chef.add_recipe "rvm::system"
chef.add_recipe "ohai"
chef.add_recipe "nginx"
chef.add_recipe "gitlab::python_tools_prereq"
chef.add_recipe "gitlab::gitolite_prereq"
chef.add_recipe "gitlab::gitlab_install"
Tudo funciona bem, mas eu gostaria de ter essa especificação na receita, para que o usuário só precise incluir a receita padrão e instalar tudo o que precisa na ordem certa.
Como posso resolver isso?Devo usar uma função?Não entendi isso nos documentos do chef, se a função puder ser especificada em uma receita.
Solução
Acho que nem todas as suas receitas podem ser instaladas em uma máquina limpa.Mas deveriam ser.Se alguma receita "A" tiver alguns pré-requisitos, você deverá adicionar as receitas necessárias à receita "A" usando include_recipe
.
No seu caso eu acho que gitlab::gitlab_install requer gitlab::gitolite_prereq e gitlab::python_tools_prereq.Isso significa que você deve adicionar ao seu cookbooks/gitlab/recipes/gitlab_install.rb
:
incude_recipe 'gitlab::gitolite_prereq'
incude_recipe 'gitlab::python_tools_prereq'
Você também pode incluir receitas de outros livros de receitas dessa forma.Por exemplo oi requer rvm::sistema.adicionar à cookbooks/ohai/recipes/default.rb
:
incude_recipe 'rvm::system'
e adicione a cookbooks/ohai/metadata.rb
:
depends 'rvm'
Dessa forma você não terá que escrever todas as receitas em uma ordem exata e não precisará escrever todas as dependências, elas serão instaladas automaticamente.