Chef cron_d 资源操作未考虑条件

Chef cron_d resource action not considering conditions

我使用厨师客户端 12.21.12 定义了如下食谱

cron_d 'cookbooks_report' do
  action ((node.roles.include?('dev') && node.tags.include?('dev-env'))? :create : :delete
  minute '0'
  hour '0'
  weekday '1'
  command .....
end

有条件的操作 - 这没有按预期工作。

  action ((node.roles.include?('dev') && node.tags.include?('dev-env'))? :create : :delete

action 是否支持 cron_d 资源中的条件? - 看起来支持,参考我的评论。

我是否需要使用 not_if 或 if_only 来应用该条件? - 不需要这个。

两者之间有什么显着差异吗 node.roles.include?('value')node['role'].include?('value')?

如何查看哪一个在此处有效?

看起来问题是我的本地开发使用了 chef-client 14 和 运行 chef-client 12 版本的节点。

node.roles.include('value') -> 食谱中的 chef-client 14 抛出了语法错误。因此更新为 node['roles'].include('value') 这已成功推送到 chef infra 服务器。

但节点 chef-client 版本 12 无法解析它并始终假定为真。

下面是带有节点 ['role'].include('value').

的 Chef 12 客户端
 * cron_d[demo-cron] action create
    * file[demo-cron legacy named cron.d file] action delete (skipped due to only_if)
    * template[/etc/cron.d/demo-cron] action create
      - create new file /etc/cron.d/demo-cron
      - update content in file /etc/cron.d/demo-cron from none to 15e86f

所以我在我的食谱中更新了 node.roles?include('value') 并将其推送到 chef-server 降低了我的 chef-client 版本。然后这就成功了。