2015-05-14 60 views
1

我正在爲應用程序部署編寫一些廚師食譜。 我解壓縮代碼然後編輯它。它看起來是這樣的:如何使用bash創建廚師食譜後編輯文件

bash 'admin-init' do 
    user "root" 
    code <<-EOH 
     <here I extract the code> 
    EOH 
end 

execute 'configure' do 
    file = Chef::Util::FileEdit.new(node["code_dir"] + "websaas/settings.py") 
    file.search_file_replace("'HOST': '*'", "'HOST': '" + node["db_host"] + "'") 
    file.write_file 
end 

我的問題是,在編譯過程中,settings.py現在還沒有,所以我得到:

ArgumentError 
------------- 
File doesn't exist 

廚師編譯過程中。 我該如何解決它?

感謝,Arshavski亞歷山大

+0

這對廚師來說是一個特別難處理的問題,根據我的經驗。你希望你的配置文件在源代碼管理的項目代碼旁邊管理,但你希望Chef管理其中的硬件和機密配置。我試過/看到過我一直不滿意的解決方案:將配置文件完全移到Chef repo中,將配置選項分成兩個文件 - 一個在Chef中,另一個在源代碼中,構建一個選項覆蓋機制Chef配置文件中的選項優先。 +1,希望別人有更好的想法。 –

回答

0

您需要使用ruby_block資源,而不是execute資源。你的執行資源甚至沒有定義一個命令,因此沒有任何效果。

ruby_block 'configure' do 
    block do 
    file = Chef::Util::FileEdit.new(node["code_dir"] + "websaas/settings.py") 
    file.search_file_replace("'HOST': '*'", "'HOST': '" + node["db_host"] + "'") 
    file.write_file 
    end 
end