3

chef 有许多资源\提供者\定义,每一个都有可以设置的属性。例如,看到this 和this

通过检查一些定义,可以明确为特定资源\提供者\定义提供的属性被打包到param变量指向的散列中。

我想知道是否有能力在不解压缩散列的情况下使用资源\提供者\定义。这是一个伪代码或我的意图:

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

有没有实现类似目标的本地方法?谢谢你,罗斯。

4

2 回答 2

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

于 2015-05-28T15:41:42.563 回答
1

通过检查一些定义,可以明确为特定资源\提供者\定义提供的属性被打包到 param 变量指向的散列中。

这仅适用于定义

在资源的情况下,公共属性(重试/操作/等)是Chef::Resource类(所有资源的超类)中的属性和方法的混合。对于资源特定属性,它们通常被定义为相关资源的方法。对于 LWRP,Chef 将在幕后生成一个类,并将每个属性作为方法添加到该类。

我想知道是否有能力在不解压缩散列的情况下使用资源\提供者\定义。

Chef::Resource 类有一个json_create方法,因此假设您将散列转换为 JSON 是可能的。更一般地说,我很好奇想要这样做的原因,因为我相信它会让你的食谱更难理解。

于 2013-07-01T13:43:54.843 回答