1
有沒有一種方法可以從廚師圖書館裏訪問new_resource
屬性(在libraries/default.rb
)?廚師 - 從圖書館訪問new_resource
我目前的解決辦法是:
在libraries/default.rb
module Libraries
def init(resource)
@@server_name = resource.server_name
@@server_type = resource.server_type
@@script = get_script_path
...
end
def get_script_path
if @@server_type == 'admin'
script = 'admin_cntl.sh'
path = '/admin_server/bin'
elsif @@server_type == 'managed'
script = 'managed_cntl.sh'
path = '/managed_server/bin'
end
::File.join(path, script)
end
end
在providers/default.rb
include Libraries
action :start do
init(new_resource)
execute 'my_script' do
command "./#{@@script} start"
end
end
action :remove do
init(new_resource)
execute 'my_script' do
command "./#{@@script} stop"
end
end
我認爲這是不必要的開銷,但我不能想出一個更好的解決方案。
有沒有更好的方法?
爲什麼你想這樣做?感覺就像缺少一些背景。 – MaxVT
我需要從'''new_resource''屬性中計算變量。 一些計算繁重,檢查不同屬性的值,需要在庫中,而不是在提供者中。 然後我直接從提供者訪問計算的變量。 –
我編輯了我的問題以顯示一個用例。我知道我可以直接將'''new_resource'''屬性傳遞給get_script_path'',但它在不同的''''''''''中是多餘的,特別是要知道真正的代碼有很多使用這些屬性的庫函數。我覺得這更清潔,但我仍然想擺脫'''init'''函數並直接在'''''''''''模塊中訪問它們。我也知道圖書館在廚師任何其他事情之前執行,但我只是問是否可能。 –