我创建了一本厨师食谱,它与其他食谱有许多相关性。我现在的主要问题是来自其他食谱的食谱是以随机顺序执行的。如果我在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"
一切正常,但我希望在配方中有这个规范,以便用户只需要包含默认配方并按正确顺序安装所需的一切。
我该如何解决这个问题?我应该使用角色吗?如果可以在食谱中指定角色,我不会从厨师文档中获取它。
答案 0 :(得分:1)
我猜你的所有配方都不能安装在干净的机器上。但他们应该。如果某些食谱“A”有一些先决条件,那么您应该使用include_recipe
将所需的食谱添加到食谱“A”中。
在你的情况下,我猜 gitlab :: gitlab_install 需要 gitlab :: gitolite_prereq 和 gitlab :: 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'
这样您就不必按照一定的顺序编写所有配方,并且不必编写所有依赖项,它们将自动安装。