2013-07-01 48 views
3

廚師擁有許多資源\提供者\定義,其中每個屬性都可以設置。例如,see this和this廚師 - 將屬性散列傳遞給資源

通過考察幾個定義,它是夾板的特定資源\供應商\定義的,屬性打包成由PARAM變量指向一個哈希值。

我想知道是否有能力使用資源\供應商\定義沒有解壓縮散列。這裏是一個僞代碼或我的意圖:

directory "/tmp/folder" do 
    owner "root" 
    group "root" 
    mode 0755 
    action :create 
end 

有一樣東西實現一個土生土長的方式:如下寫它的

attr = { :name => "/tmp/folder", :owner => "root", :group => "root", :mode => 0755, :action => :create } 
directory attr 

呢? 謝謝你,羅斯。

回答

1

通過檢查很少的定義,它是指定特定資源的屬性\提供者\定義被打包到由param變量指向的哈希中。

這僅適用於definitions

對於資源,通用屬性(retries/actions/etc)是Chef::Resource類(所有資源的超類)中屬性和方法的混合。對於資源特定的屬性,它們通常被定義爲相關資源上的方法。在LWRP的情況下,廚師將在幕後生成一個類,並將每個屬性添加爲該類的方法。

我想知道是否有能力使用資源\供應商\定義沒有解壓哈希。

廚師::資源類有一個json_create方法,所以假設你將你的散列轉換爲JSON,這可能是可能的。更一般地說,我很好奇想要這樣做的原因,因爲我相信這會讓你的食譜難以理解。

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

+0

感謝,完美地解決了剛纔我有一個問題。 – keen