chef有许多资源\ providers \ definitions,每个都有可以设置的属性。例如,see这和this。
通过检查一些定义,可以清楚地将给定的特定资源\ provider \ definition的属性打包到 param 变量指向的哈希中。
我想知道是否有能力在不解包哈希的情况下使用资源\ provider \ definition。这是一个伪代码或我的意图:
attr = { :name => "/tmp/folder", :owner => "root", :group => "root", :mode => 0755, :action => :create }
directory attr
而不是按如下方式编写:
directory "/tmp/folder" do
owner "root"
group "root"
mode 0755
action :create
end
是否存在实现类似内容的本地方式? 谢谢你,罗斯。
答案 0 :(得分:4)
您可以尝试以下
attrs = { .. }
directory "/tmp/folder" do
attrs.each do |method_name, value|
send(method_name, value)
end
end
有关Ruby的更多信息,请发送:http://apidock.com/ruby/Object/send
答案 1 :(得分:1)
通过检查一些定义,可以清楚地将给定的特定资源\ provider \ definition的属性打包到param变量指向的哈希中。
仅适用于definitions。
在资源的情况下,公共属性(重试/动作/等)是Chef::Resource类(所有资源的超类)中的属性和方法的混合。对于资源特定属性,它们通常被定义为相关资源上的方法。在LWRPs的情况下,Chef将在幕后生成一个类,并将每个属性作为方法添加到该类中。
我想知道是否有能力在不解包哈希的情况下使用资源\ provider \ definition。
Chef :: Resource类有一个json_create
方法,所以假设您将哈希转换为JSON,则可能。更一般地说,我很想知道想要这样做的原因,因为我相信它会让你的食谱更难理解。