2015-10-21 60 views
1

TLDR後Exec的鏈命令:木偶 - 不能只執行一次的命令通知

我無法配置木偶「執行」的命令鏈命令只運行一次。

詳情:

我想利用流浪漢,木偶模塊需要安裝虛擬機安裝技術管理平臺,並加載到它的一些樣本數據。 我使用https://forge.puppetlabs.com/johanek/redmine,它工作得很好 - Redmine已安裝並可以正常工作。

我的目標:
現在我想用REST API樣本數據加載到管理平臺:

  1. 創建1個測試項目
  2. 導入2個問題到這個項目

我想要運行2個簡單的「執行」,一個又一個,只有一次,但我無法實現這一點,因此這個問題。

我目前的工作:
我試圖訂閱的最新步驟之一管理平臺安裝

訂閱=> [執行[ 'rails_migrations']

和然後導入數據,但第一步「create-project1」總是通知第二步「導入問題」,因此它會創建重複的數據。 而且如果幾次運行流浪者,「導入問題」會造成這些問題的重複。 這裏是我的代碼:

exec {'create-project1': 
    subscribe => [Exec['rails_migrations']], 
    path => ['/usr/bin', '/usr/sbin', '/bin'], 
    creates => "$redmine_install_dir/.data_loaded", 
    command => "curl WHICH_CREATES_PROJECT && touch $redmine_install_dir/.data_loaded", 
    notify => [Exec['import-issues']], 
} -> 
exec {'import-issues': 
    path => ['/usr/bin', '/usr/sbin', '/bin'], 
    command => "curl WHICH_IMPORTS_ISSUES", 
    refreshonly => true, 
} 

問:
如何配置這些Exec的命令,在鏈和只運行一次?我也在考慮在不久的將來將這條鏈延伸到5條命令,所以請牢記這一點。

回答

0

你幾乎在那裏'ONLY ONCE' - Puppet擁有onlyif屬性,你可以在你的exec塊中包含測試文件是否已經存在與否。

然後你可以做這樣的事情

exec {'create-project1': 
    subscribe => [Exec['rails_migrations']], 
    path => ['/usr/bin', '/usr/sbin', '/bin'], 
    onlyif => "test ! -f $redmine_install_dir/.data_loaded" 
    command => "curl WHICH_CREATES_PROJECT && touch $redmine_install_dir/.data_loaded", 
    notify => [Exec['import-issues']], 

該試驗對存在的$redmine_install_dir/.data_loaded - 你應該能夠發揮一點與達到你想要

+0

我測試這個解決方案 - 它阻止'command'執行,但'notify'仍然觸發刷新到下一個事件。真正的問題是,這個'通知'可以停止/不定期通知下一個'exec'嗎?將來,當我有例如10位連鎖高管,我可能需要爲他們添加'onlyif'? – ljader