题
我创建了一个厨师食谱,它与其他食谱有很多依赖关系。我现在的主要问题是,来自其他食谱的食谱是以随机顺序执行的。如果我在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_prereq 和 gitlab::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'
这样,您就不必以某种确切的顺序编写所有配方,并且您不必编写所有依赖项,它们将自动安装。
不隶属于 StackOverflow