使用厨师时,我只想在满足某个条件的情况下执行一系列资源。目前,我必须单独为每个资源添加not_if
防护。有没有办法用一个not_if后卫包含多个资源,如下所示:
wrap_resources do
service 'my-service'
package 'my-package'
not_if certain_condition
end
而且我不想使用那个令人讨厌的通知!
答案 0 :(得分:2)
编译时条件的简单解决方案:
if !certain_condition
service 'my-service'
package 'my-package'
end
配方允许使用纯红宝石,您可以使用简单的if块跳过在配方中定义这些资源。
根据您的示例,您正在寻找LWRP或来自厨师12.5 custom_resource
语法几乎相同,LWRP使用两个文件(资源和提供者),其中custom_resource只使用一个。
这背后的想法是创建一个新的资源,它将在收敛时进行一些测试,然后在需要时运行它的内部资源。 LWRP / custom_resource内部资源在单独的上下文中运行。
即:
my_cookbook /资源/ wrapper.rb
property :name, RubyType, default: 'value'
default_action: run
action :run do
service 'my-service'
package 'my-package'
end
my_cookbook /食谱/ default.rb
my_cookbook_wrapper 'service and package' do
not_if lazy { certain_condition }
end
请注意,如果您在食谱名称中使用-
,则此类字符不允许用于Ruby类,如果找到,则替换为_
。
答案 1 :(得分:0)
您还可以执行以下操作:
unless certain_condition
service 'my-service'
package 'my-package'
end
这样您就不需要使用否定语句。让它更清洁一点!