【问题标题】:Chef cron_d resource action not considering conditions厨师 cron_d 资源操作不考虑条件
【发布时间】:2023-03-22 09:32:02
【问题描述】:

我有一个如下定义的食谱,使用厨师客户端 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')?

如何检查哪一个在这里有效?

【问题讨论】:

  • 当属性操作与以下条件`操作一起使用时(“真”==“真”)? :create : :delete` 它正在工作......所以我认为它是 node.roles 和 node.tags 在某些情况下不起作用。
  • node.roles.inclde?('dev') 有错别字,您的答案似乎也可能有错别字,其中include('value') 需要是带有问号的include?('value') 等,因此很难说出您的实际问题是什么是这个 SO 帖子中的印刷错误。
  • 错字是我的错。最终,Chef 客户端版本出现了问题。12.0 客户端的节点很少。

标签: chef-infra


【解决方案1】:

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

配方中的node.roles.include('value') -> 引发了chef-client 14 的语法错误。因此将其更新为node['roles'].include('value') 这已成功推送到chef infra 服务器。

但 node chef-client 版本 12 无法解决它并始终假定为 true。

下面是带有 node['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'),并将其推送到厨师服务器,降低了我的厨师客户端版本。然后就成功了。

【讨论】:

    猜你喜欢
    • 2018-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多