Chef infra 在chef custom resource中,如何指定键值对是必需的
在chef中编写自定义资源时,我们定义属性、它们的类型、它们的默认值以及它们是否必须指定,例如Chef infra 在chef custom resource中,如何指定键值对是必需的,chef-infra,lwrp,Chef Infra,Lwrp,在chef中编写自定义资源时,我们定义属性、它们的类型、它们的默认值以及它们是否必须指定,例如 属性:plugin,种类:String,必需:true 属性:after\u plugin,kind\u of:String,required:false,:default=>'pam\u unix.so' 假设我需要取一个散列式的属性 attribute:after,kind\u of:Hash,required:false,:default=>{search\u interface=>nil,:
属性:plugin,种类:String,必需:true
属性:after\u plugin,kind\u of:String,required:false,:default=>'pam\u unix.so'
假设我需要取一个散列式的属性
attribute:after,kind\u of:Hash,required:false,:default=>{search\u interface=>nil,:search\u control=>nil,:search\u plugin=>nil}
这里我提到了required:false
,这意味着用户不必提供散列
我需要指定,如果给定了哈希,那么:search\u接口
是必需的
如何实现这一点?在定义属性(现在命名为属性)时,可以定义用于验证用户输入的回调
有关示例,请参见
在你的情况下,你可以写:
attribute :after, kind_of: Hash, required: false,
:default => {:search_interface => nil, :search_control => nil, :search_plugin => nil},
:callbacks => {
"Must contain search interface" => proc { |v|
v.has_key?(:search_interface)
}
}
}