2017-08-04 107 views
0

我有戰爭,需要在應用到客戶端之前更改哪些內容(某些文件)。所以我所做的是將解壓縮的文件複製到客戶端,更改我想要的文件並在客戶端再次壓縮該目錄。一切正常,但在我想要清理的操作之後(爲未壓縮文件移除臨時目錄)。因爲首先,我聲明資源是這樣的:在Puppet中管理目錄

file { 'temp-dir' 
path => 'temp', 
ensure => directory, 
... 
} 

木偶犯規讓我在清單的結尾這樣做:

File ['temp-dir'] { 
    ensure => absent, 
    ... 
    } 

所以我做錯了什麼,或者它是不可能的傀儡?

回答

2

在Puppet DSL中使用文件資源是不可能的,但仍然有辦法做你想做的事情。

如果您在清單寫:

file { '/tmp/mytemp': 
    ensure => directory, 
} 
-> 
exec { 'do something': } 
-> 
file { '/tmp/mytemp': 
    ensure => absent, 
} 

木偶解釋這兩個文件資源爲兩個不同的,不兼容的最終狀態的聲明,並拋出一個錯誤。

Puppet是一種聲明性語言,並不是指定一系列步驟的語言。

您有幾個選項。

最好的可能是看看puppet-archive模塊,因爲它提供了一些針對您的具體使用情況而設計的支持清理的擴展。

另一種選擇是根本不清理臨時文件。通常沒有真正的需要清理它們。

另一種選擇是在Ruby中編寫自己的custom types and providers來處理特定的安裝。

最後,您可以使用exec來管理整個過程,例如,

exec { 'install war': 
    command => 'wget ... -o /tmp/war.tmp ; ... ; rm -f /tmp/war.tmp', 
    path => '/bin', 
} 
+0

雖然這種規避路徑的多重聲明前,他選擇,不同的前進道路是完全避免了這個問題將改變的文件與單個前使用'template'功能或寫一個函數自己'文件'資源。不幸的是,我們沒有足夠的信息來提示該路線。 –