chef - 将属性哈希传递给资源

时间:2013-07-01 12:19:02

标签: ruby chef chef-recipe knife chef-solo

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

是否存在实现类似内容的本地方式? 谢谢你,罗斯。

2 个答案:

答案 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,则可能。更一般地说,我很想知道想要这样做的原因,因为我相信它会让你的食谱更难理解。