You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Chef Ruby脚本中合并条件以减少重复代码?

解决方案

当然可以,你完全可以把这两个条件合并到外层的判断块中,这样就能避免在每一项注册表修改资源里重复添加not_if条件,实现你想要的「系统版本匹配且指定标识文件不存在时执行后续操作」的逻辑。

修改后的代码如下:

# 仅当系统为Windows Server 2016且标识文件不存在时执行
if node['platform_version'] =~ /10.0.14393/ && !::File.exist?('C:/programdata/habitat/chef-base/files/missing_GPO_entries_from_patching.flg')
  registry_key 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\DataCollection' do
    values [
      { name: 'AllowTelemetry', type: :dword, data: 0x00000000 },
    ]
    action :create_if_missing
  end
end

原理很直接:Chef会先校验外层的if条件,只有当系统版本匹配并且指定文件不存在时,才会加载并执行里面的registry_key资源。所有嵌套在这个if块里的注册表修改操作,都会自动遵循这两个判断逻辑,不用再逐个添加not_if,能有效减少重复代码。

内容的提问来源于stack exchange,提问作者Keith

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 07:37:07