提问人:Keith 提问时间:11/2/2023 更新时间:11/2/2023 访问量:45
Ruby “if file not found do” 在脚本的顶部
Ruby "if file not found do" at the top of the script
问:
我有一些 rubys 文件,我正在尝试减少重复代码。下面是一个更大的文件的片段,其中包含大量重复代码。是否可以将 添加到该部分,这样我就不必在每次注册表更改下单独列出它?类似的东西if node['platform_version'] =~ /10.0.14393/
not_if { ::File.exist?('C:/programdata/habitat/chef-base/files/missing_GPO_entries_from_patching.flg') }
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
答:
2赞
spickermann
11/2/2023
#1
你是这个意思吗?
if node['platform_version'] =~ /10.0.14393/ && !File.exist?('C:/programdata/habitat/chef-base/files/missing_GPO_entries_from_patching.flg')
# ...
end
1赞
seshadri_c
11/2/2023
#2
可以在同一资源块中同时使用和条件。资源将根据这两个条件进行更新。not_if
only_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'
评论
/10.0.14393/
.
\.
node['platform_version'].include?('10.0.14393')