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

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

我该如何解决这个问题?我应该使用角色吗?如果角色可以在配方中指定,我没有从chef文档中得到它。

有帮助吗?

解决方案

我想不是所有的食谱都可以安装在干净的机器上。但他们应该是。如果某些配方"A"有一些先决条件,那么您应该使用以下方法将所需的配方添加到配方"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'

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

incude_recipe 'rvm::system'

并添加到 cookbooks/ohai/metadata.rb:

depends 'rvm'

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top