我有一個有趣的問題,我通過創建Chef資源來處理一些我可能需要的其他食譜中的任務來重構食譜。舉例來說,我已經創建了以下行動:action_class.class_eval方法不能與執行資源的環境屬性
resource_name :my_command
action :run do
execute "Execute my command" do
environment ({"SETTINGS_FOLDER" => node['settings']['folder']})
command "#{command_exe} -some -params"
end
end
action_class.class_eval do
def command_exe
"#{node['command']['folder']}\\bin\\command.exe"
end
end
當我打電話my_command
從它按預期工作的祕訣。不過,我還有其他actions
,這個資源將執行,將全部使用相同的environment
。所以我所做的就是重構的資源看起來像這樣:
resource_name :command
action :run do
execute "Execute my command" do
environment env
command "#{command_exe} -some -params"
end
end
action_class.class_eval do
def command_exe
"#{node['command']['folder']}\\bin\\command.exe"
end
def env
{"SETTINGS_FOLDER" => node['settings']['folder']}
end
end
現在發生的事情是,一旦chef-client
執行它看起來好像機器上的SETTINGS_FOLDER
環境變量風這樣看的my_command
資源:
SETTINGS_FOLDER = ""C:\my\settings\folder""
注意加倍的雙引號?我不知道爲什麼會這樣,但它使我command.exe
很生氣:(
的['settings']['folder']
屬性在菜譜的attributes/default.rb
像這樣定義的:
default['settings']['folder'] = 'C:\\my\\settings\\folder'
我的節點運行廚師客戶13.0.118
編輯我覺得一倍雙引號是紅鯡魚。我覺得只是記錄儀代表了這樣的哈希值。我的新想法是,也許env
方法沒有被之前評估被傳遞給environment
,而是函數引用本身被傳遞。忍受我,Ruby不是我的第一語言......
你在最後一個例子中有不匹配的引號,你確定這是你的嗎? – coderanger
@coderanger好抓,固定起來。這在我的屬性文件中是正確的,只是在這裏錯誤地轉錄了它 – ThaDon