Chef 用单个 not_if 保护多个资源
Chef guard multiple resources with single not_if
使用 chef 时,我只想在满足特定条件时执行一系列资源。目前,我必须分别向每个资源添加 not_if
守卫。有没有办法像这样用一个 not_if 守卫将多个资源包装在里面:
wrap_resources do
service 'my-service'
package 'my-package'
not_if certain_condition
end
而且我不想使用那个讨厌的通知!
编译时条件的简单解决方案:
if !certain_condition
service 'my-service'
package 'my-package'
end
配方允许纯 ruby,您可以使用简单的 if 块跳过在配方中定义这些资源。
根据您的示例,您正在寻找 LWRP 或 chef 12.5 custom_resource
语法几乎相同,LWRP 使用两个文件(资源和提供者),而 custom_resource 只使用一个。
这背后的想法是创建一个新资源,它将在收敛时进行一些测试,然后 运行 如果需要,它是内部资源。 LWRP/custom_resource 内部资源在单独的上下文中 运行。
即:
my_cookbook/resources/wrapper.rb
property :name, RubyType, default: 'value'
default_action: run
action :run do
service 'my-service'
package 'my-package'
end
my_cookbook/recipes/default.rb
my_cookbook_wrapper 'service and package' do
not_if lazy { certain_condition }
end
请注意,如果您在食谱名称中使用 -
,则 Ruby 类 不允许使用此字符,如果找到,将替换为 _
。
您还可以执行以下操作:
unless certain_condition
service 'my-service'
package 'my-package'
end
这样你就不需要使用否定语句了。让它更干净一点!
使用 chef 时,我只想在满足特定条件时执行一系列资源。目前,我必须分别向每个资源添加 not_if
守卫。有没有办法像这样用一个 not_if 守卫将多个资源包装在里面:
wrap_resources do
service 'my-service'
package 'my-package'
not_if certain_condition
end
而且我不想使用那个讨厌的通知!
编译时条件的简单解决方案:
if !certain_condition
service 'my-service'
package 'my-package'
end
配方允许纯 ruby,您可以使用简单的 if 块跳过在配方中定义这些资源。
根据您的示例,您正在寻找 LWRP 或 chef 12.5 custom_resource
语法几乎相同,LWRP 使用两个文件(资源和提供者),而 custom_resource 只使用一个。
这背后的想法是创建一个新资源,它将在收敛时进行一些测试,然后 运行 如果需要,它是内部资源。 LWRP/custom_resource 内部资源在单独的上下文中 运行。
即:
my_cookbook/resources/wrapper.rb
property :name, RubyType, default: 'value'
default_action: run
action :run do
service 'my-service'
package 'my-package'
end
my_cookbook/recipes/default.rb
my_cookbook_wrapper 'service and package' do
not_if lazy { certain_condition }
end
请注意,如果您在食谱名称中使用 -
,则 Ruby 类 不允许使用此字符,如果找到,将替换为 _
。
您还可以执行以下操作:
unless certain_condition
service 'my-service'
package 'my-package'
end
这样你就不需要使用否定语句了。让它更干净一点!