带嵌入式角色的厨师食谱

时间:2012-09-29 08:45:36

标签: chef vagrant role cookbook

我创建了一本厨师食谱,它与其他食谱有许多相关性。我现在的主要问题是来自其他食谱的食谱是以随机顺序执行的。如果我在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"

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

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

1 个答案:

答案 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'

这样您就不必按照一定的顺序编写所有配方,并且不必编写所有依赖项,它们将自动安装。