2016-06-28 48 views
0

我有一個變量,我設置在一個非常早的階段,該變量是布爾值,然後在某一點我想exec命令基於事實,如果這個變量是真或假,是這樣的:木偶:評估裏面唯一的變量關閉

exec { 'update-to-latest-core': 
    command  => "do something", 
    user  => 'root', 
    refreshonly => true, 
    path  => [ "/bin/bash", "sbin/" , "/usr/bin/", "/usr/sbin/" ], 
    onlyif  => 'test ${latest} =  true', 
    notify  => Exec["update-to-latest-database"], 
} 

所以這個命令不起作用(onlyif => ['test ${latest} = true'],),我嘗試了其他幾種方式太多,但沒有奏效。一件如此簡單的事情不可能很難做到。有人可以幫我解決這個問題,也可以解釋一下在onlyif之內執行命令的規則。 (因爲我有其他依賴關係,我也不能使用if-關閉更高的級別)

回答

0

由於$latestPuppet變量,推遲檢查其值直到應用目錄是沒有用的。從技術上講,事實上,你不能這樣做:Puppet會將變量的值插入到Exec資源的目錄表示中,因此在應用目錄時沒有變量,只有文字。

由於有問題的資源是由另一個資源通知的,因此您不能完全禁止它。如果問題中提供的代碼不起作用,那麼很可能是因爲內插值$latest與您的預期不同 - 例如,'1'而不是'真'。在--debug模式下運行代理將顯示正在執行的命令的詳細信息。

或者,你可以接近它以不同的方式:

exec { 'update-to-latest-core': 
    command  => $latest ? { true => "do something", default => '/bin/true' }, 
    user  => 'root', 
    refreshonly => true, 
    path  => [ "/bin/bash", "sbin/" , "/usr/bin/", "/usr/sbin/" ], 
    notify  => Exec["update-to-latest-database"], 
} 

,將執行(成功,並沒有外部效應)每當$latestfalse,它將運行do something命令時$latesttrue。在編目過程中選擇命令。

+0

謝謝@John Bollinger很多! ,你建議的解決方案就像一個魅力 – user2819161