1
我有一個配方,在文件系統上安裝一個進程,然後是一個runit服務來管理進程 - 最終通知命令將獨特配置複製到進程主目錄並重新啓動進程。這對於單個進程工作正常 - 但是當我嘗試多次運行這個時,即。當循環訪問屬性時,我會看到似乎與生命週期相關的奇怪副作用。如何多次使用不同的參數運行相同的廚師配方
一個錯誤的一個例子,我得到
Chef::Exceptions::EnclosingDirectoryDoesNotExist
爲/ SRV /第二處理。然而,這個目錄是我在提供程序內的通知塊中創建的第一個目錄 - 它可能是廚師跑步不是孤立的嗎?我也看到從第一個數組項泄漏到另一個即數據。第一進程嘗試通知r_unit [第二進程ID]
從廣義上講,(如果只有一個單一的過程這個工程)
node["app"]["processes"].each do |key,value|
#step 3
execute 'configure' do
command 'cp -r /srv/folder /srv/#{some_key} && sv restart #{some_key}'
action :nothing
end
#step 2
runit_service current_process_id do
notifies :run, 'execute[configure]', :delayed
end
#step 1
my_custom_hwrp current_process_id do
notifying_block do
new_resource.dirs_to_create.each do |dir_name|
end
install_path current_install_path
notifies :enable,"runit_service[#{current_process_id}]"
end
end
end
my_custom_hwrp提供商
class Provider < Chef::Provider
def action_enable
deploy_revision current_process_id do
new_resource.updated_by_last_action(true)
end
end
end
是否有我可以隔離每個過程的廚師跑?
嘗試使用'execute「configure#{some_key}」do「爲每個目錄獲取唯一的執行命令,並在通知中使用相同的語法。如果沒有這些資源覆蓋前一個資源(簡短的解釋,它會更復雜一點)。我使用'remote_directory'和通知來重新啓動服務而不是'execute'。 – Tensibai
你應該實現一個[定義](http://docs.chef.io/definitions.html)或[lwrp](https://docs.chef.io/lwrp.html),你將能夠即使在食譜中也可以重用。你總是可以迭代地調用其中任何一個。 – MrRoth