在厨师自定义资源中如何指定键值对是必需的
In chef custom resource how to specify that a key value pair is mandatory
在 chef 中编写自定义资源时,我们定义了属性、它们的类型、它们的默认值以及是否必须指定它们,例如
attribute :plugin, kind_of: String, required: true
attribute :after_plugin, kind_of: String, required: false, :default => 'pam_unix.so'
假设我需要获取一个类似于哈希的属性
attribute :after, kind_of: Hash, required: false, :default => {:search_interface => nil, :search_control => nil, :search_plugin => nil}
这里我提到了required: false
,这意味着用户不需要提供哈希。
我需要指定,如果给出哈希,则 :search_interface
是必需的
我怎样才能做到这一点?
定义属性(现在命名为 属性)时,您可以定义验证用户输入的回调。
在你的情况下,你可以这样写:
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)
}
}
}
在 chef 中编写自定义资源时,我们定义了属性、它们的类型、它们的默认值以及是否必须指定它们,例如
attribute :plugin, kind_of: String, required: true
attribute :after_plugin, kind_of: String, required: false, :default => 'pam_unix.so'
假设我需要获取一个类似于哈希的属性
attribute :after, kind_of: Hash, required: false, :default => {:search_interface => nil, :search_control => nil, :search_plugin => nil}
这里我提到了required: false
,这意味着用户不需要提供哈希。
我需要指定,如果给出哈希,则 :search_interface
是必需的
我怎样才能做到这一点?
定义属性(现在命名为 属性)时,您可以定义验证用户输入的回调。
在你的情况下,你可以这样写:
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)
}
}
}