1
我有一個Puppet類,其中包括設置一大堆Debian存儲庫,執行apt-get更新,然後安裝一些包。當if語句存在時定義puppet類的排序
排序必須嚴格如下:
- 設置APT源
- apt-get的更新
- 安裝應用程序包
要定義排序,我已經使用了以下在聲明所有資源後進行鏈接:
File['/etc/apt/apt.conf','/etc/apt/sources.list'] ->
Exec['apt-get update'] ->
Class['vim','sudo', ..., ..., ]
但是,這裏是問題:
如果我只設置主機是虛擬機的vim進行安裝,並且執行Puppet的主機是物理主機,則運行將失敗。我認爲這是因爲它試圖按照我的鏈接運行Class ['vim'],但由於if語句的內容未被解析,無法找到類聲明。
下面是代碼:
if $::is_virtual == 'true' {
class {'vim':
set_default => true,
}
}
我可以解決此加入了「需要=>執行[‘apt-get的更新’]」我的VIM資源聲明,並從我的鎖鏈取出,但這感覺有點哈克。這裏是我的類的聲明看起來像一次我這樣做:
if $::is_virtual == 'true' {
class {'vim':
requires => Exec['apt-get update'],
set_default => true,
}
}
沒有任何人有處理這種順序問題的任何其他方法?無論如何,我可以處理在有條件聲明中可能或不可以通過鏈接觸發的排序類嗎?任何建議表示讚賞。
像這樣編寫依賴關係鏈正是因爲你正在處理的問題。通過require/notify/subscribe來處理依賴關係要安全得多。 –