2015-11-06 150 views
0

我有下載一個文件作爲其步驟的一部分的LWRP,我想用它來表示,如果資源已經改變廚師LWRP remote_file_notification

action: install do 

    # some other stuff here 

    remote_file "/some/file" do 
    source node[:mycookbook][:source_file] 
    mode 00755 
    action :create 
    notifies :run, 'ruby_block[set_status]', :immediately 
    end 

    ruby_block 'set_status' do 
    block do 
     new_resource.updated_by_last_action(true) 
    end 
    end 
end 

而在我的食譜我的,我有:

my_provider do 
    # configure 
    notifies :run, 'something_else', :immediately 
end 

似乎沒有關係,如果remote_file運行或沒有,something_else沒有通知,但我不知道爲什麼。

+0

我從來沒有見過有人嘗試在提供者操作中使用ruby_block,因爲操作已經在收斂時間運行(不需要用ruby塊延遲代碼)。您可以發佈日誌以向我們展示哪些資源已更新(也未更新)以及何時/以何種順序? – Martin

+0

我不認爲我需要使用紅寶石塊,但它總是返回false。我不知道這是因爲它是在編譯時進行評估,而不是在remote_file實際運行之後進行評估。 –

回答

2

我不確定你可以使用ruby_block延遲new_resource.updated_by_last_action(你試圖在你的提供者執行之外運行它嗎?)。由於您的提供者操作已經在收斂時間運行,所以我通常不會在這裏使用紅寶石塊。我會做這樣的事情:

action: install do 

    # some other stuff here 

    some_file = remote_file "/some/file" do 
    source node[:mycookbook][:source_file] 
    mode 00755 
    action :nothing 
    notifies :run, 'ruby_block[set_status]', :immediately 
    end 
    some_file.run_action(:create) 
    new_resource.updated_by_last_action(true) if some_file.updated_by_last_action? 

end 

remote_file調用run_action的另一個好處馬上就是你不再使用DSL來創建和remote_file資源添加到資源集合,然後等待廚師在未來的某個時間收斂它(然後等待你的ruby_block)。您正在彙集您關心的資源,然後檢查它是否已更改(並相應地更新您的自定義資源)。

+0

我會嘗試'some_file.run_action(:create)'。我認爲那是我失蹤的一塊。 –