2014-06-27 152 views
1

在廚師的食譜我想廚師:廚師,客戶端首先散步代碼執行它

  1. 之前解壓文件
  2. 使用其中的一個文件中的zip遍歷內容。

我遇到的問題是,當我運行廚師客戶端失敗說「沒有這樣的文件或目錄」之前,它甚至解壓縮在步驟1

這裏的文件是提供商的代碼:

action :create do 
     if @current_resource.exists 
     converge_by("Create #{ @current_resource }") do 
      unzip('realFileToUnzip','someLocation') 
      do_something_with_file('realFileToOpen') 
     end 
     end 
    end 
.... 

在同一個供應商的文件我有一個高清的定義如下

def unzip(fileToUnzip, unzipToLocation) 
    bash "unzip" do 
    user "root" 
    cwd "/tmp" 
    code <<-EOH 
     unzip -o #{fileToUnzip} -d #{unzipToLocation} 
    EOH 
    end 
end 

,這也變形點焊

def do_something_with_file(fileToConvert) 
    ::File.open(fileToConvert, 'r') do |properties_file| 
    properties_file.read.each_line do |line| 
     puts line 
    end 
    end 
end 

似乎廚師客戶端在執行代碼之前先行走代碼。所以在遍歷文件時不存在,因爲它不會出現在執行解壓縮代碼之前。

我該如何避免這種情況?

+1

您需要將該代碼封裝在'ruby_block'資源的'do_something_with_file'中。 – sethvargo

回答

1

Chef Docs

使用ruby_block資源廚師客戶端 運行期間執行Ruby代碼。在ruby_block資源的Ruby代碼收斂期間與其他 資源評估,而 ruby​​_block資源之外的Ruby代碼進行評估以前其他資源,如配方 編譯。

然後,您必須創建一個ruby_block並將代碼do_something_with_file插入此資源中。也許你必須做一些修改。

祝你好運!