1

我创建了一本厨师食谱,它对其他食谱有很多依赖。我现在的主要问题是其他食谱中的食谱是按随机顺序执行的。如果我在 vagrant 文件中指定这些配方的执行,例如:

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"

一切正常,但我希望在配方中包含此规范,以便用户只需要包含默认配方并以正确的顺序安装所需的一切。

我该如何解决这个问题?我应该使用角色吗?如果可以在食谱中指定角色,我不会从厨师文档中得到它。

4

1 回答 1

1

我想不是所有的食谱都可以安装在干净的机器上。但他们应该是。如果某个配方“A”有一些先决条件,那么您应该使用include_recipe.

在你的情况下,我猜gitlab::gitlab_install需要gitlab::gitolite_prereqgitlab::python_tools_prereq。这意味着您应该添加到您的cookbooks/gitlab/recipes/gitlab_install.rb

incude_recipe 'gitlab::gitolite_prereq'
incude_recipe 'gitlab::python_tools_prereq'

您还可以通过这种方式包含其他食谱中的食谱。例如ohai需要rvm::system。添加到cookbooks/ohai/recipes/default.rb

incude_recipe 'rvm::system'

并添加到cookbooks/ohai/metadata.rb

depends 'rvm'

这样,您就不必以某种确切的顺序编写所有配方,也不必编写所有依赖项,它们将自动安装。

于 2012-09-29T08:58:08.243 回答