只有当特定食谱中的食谱不存在时才会运行的配方条件

时间:2016-09-07 14:09:55

标签: ruby chef

如果没有来自名为" frenchblog"的食谱中的食谱,我希望在我的食谱中有一个条件块。在该节点的运行列表中。

我找到了以下link:建议使用node.run_list.recipe?("frenchblog::default")。只有这对于特定的食谱而不是整本食谱都有效,而且我找不到匹配的方法是针对正则表达式(如/frenchblog/),因为它不是字符串而且我可以& #39; t将其转换为一个。

如何在食谱代码中测试食谱中是否存在食谱?无论如何将node.run_list中的对象转换为字符串,以便将它们与正则表达式匹配?

2 个答案:

答案 0 :(得分:0)

这是一个非常奇怪的请求,你很有可能做的事情不应该是:node["recipes"].any? {|r| r.start_with?("frenchblog") }

答案 1 :(得分:0)

node.run_list方法返回一个数组,你可以使用所有ruby函数来过滤它并检查存在。

应该采取以下措施:

node.run_list.select { |entry| entry[/frenchblog::/] }.length == 0

这听起来像是一件非常奇怪的事情,并且在一天结束时它可能很脆弱。