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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top