如何编写资源集合依赖项

时间:2015-11-23 07:36:26

标签: chef

在食谱nginx中,我使用service资源。

service 'nginx' do
  supports status: true, restart: true, reload: true
  action [:enable, :start]
end

在另一个食谱foo中,使用了notifies :reload, 'service[nginx]'

当我运行这两个食谱或仅运行nginx时,它运行正常。 但是当foo中只有run_list时,它会失败并显示错误service[nginx] cannot be found in the resource collection.

目前,当我只想运行foo时,我正在使用此命令。

knife solo cook my_server --override-runlist "nginx,foo`

我已将depends 'nginx'添加到foo/metadate.rb,但它无法解决问题。

如何指定这样的依赖?

1 个答案:

答案 0 :(得分:4)

您需要元数据中的dependsinclude_recipe 'nginx'顶部的foo/recipes/default.rb。您不能只运行recipe[foo::default],因为它在该服务资源上存在硬件。

这将是一个很好的例子,说明为什么覆盖运行列表有点难以处理,并且在编写复杂代码时会出现故障。另一个选择会有点复杂,在foo配方中检查资源是否存在于集合中并创建一个存根(如果不存在则),但这超出了我想要描述的范围如果你不太了解厨师的内部。