如何在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
相关产品推荐
相关产品推荐

