Ruby脚本顶部的“if file not found do”

rvpgvaaj  于 2023-11-18  发布在  Ruby
关注(0)|答案(2)|浏览(103)

我有几个rubys文件,我试图减少重复代码。下面是一个更大文件片段,包含大量重复代码。是否可以将not_if { ::File.exist?('C:/programdata/habitat/chef-base/files/missing_GPO_entries_from_patching.flg') }添加到if node['platform_version'] =~ /10.0.14393/部分,这样我就不必在每一个注册表更改下单独列出它?沿着if node = this and flg file not found, then

# If OS is 2016
if node['platform_version'] =~ /10.0.14393/
  registry_key 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\DataCollection' do
    values [
      { name: 'AllowTelemetry', type: :dword, data: 0x00000000 },
    ]
    action :create_if_missing
    not_if { ::File.exist?('C:/programdata/habitat/chef-base/files/missing_GPO_entries_from_patching.flg') }
  end
end

字符串

6ojccjat

6ojccjat1#

你是说像这样吗

if node['platform_version'] =~ /10.0.14393/ && !File.exist?('C:/programdata/habitat/chef-base/files/missing_GPO_entries_from_patching.flg')
  # ...
end

字符串

lg40wkob

lg40wkob2#

在同一个资源块中可以同时使用not_ifonly_if条件。资源将根据这两个条件进行更新。
举例来说:

registry_key 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\DataCollection' do
  values [
    { name: 'AllowTelemetry', type: :dword, data: 0x00000000 },
  ]
  action :create_if_missing
  not_if { ::File.exist?('C:/programdata/habitat/chef-base/files/missing_GPO_entries_from_patching.flg') }
  # you can also use .include? method as suggested by Stefan in his comment
  only_if { node['platform_version'] == '10.0.19045' }
end

字符串
由于你有更多的代码需要有条件地运行,一个选择是将它们移动到一个单独的配方中(最简单的),并有条件地调用该配方。例如,你可以创建一个registry.rb,并从default.rb调用它:

  • 示例default.rb*:
include_recipe 'mycookbook::registry' if node['platform_version'] == '10.0.19045'

相关问题