2013-10-10 116 views
1

使用木偶實例資源類型時,得到$名字,我需要創建三個文件,與此內容:傀儡,一個數組

/tmp/f1.txt: hello /tmp/f1.txt 
/tmp/f2.txt: hello /tmp/f2.txt 
/tmp/f3.txt: hello /tmp/f3.txt 

我嘗試如下:

$path="/tmp/" 
$my_files = ["$path/f1.txt", "$path/f2.txt", "$path/f3.txt"] 
file { $my_files: 
    ensure => file, 
    content => "hello $name\n", 
} 

但是這不起作用,因爲$ name是未定義的。

是否有一個變量被實例化爲每個'迭代',我可以使用?

PS:我知道,我如下可以創建一個新的資源類型:

define file_with_content { 
    file { $name: 
    ensure => file, 
    content => "hello $name\n", 
    } 
} 
$path="/tmp/" 
$my_files = ["$path/f1.txt", "$path/f2.txt", "$path/f3.txt"] 
file_with_content { $my_files: } 

但這需要創建一個新的資源類型, ,我不能在我的情況下做到這一點(不解釋這裏)。

問題是,如何修改第一個代碼以使其工作,而不需要定義新的資源類型,也不需要執行shell代碼?

回答

2

您只能訪問namevar定義的類型。對於Puppet的資源,結果是不可預知的 - 例如,$nameFile會給你main或當前stage。另外,你不能傳遞/使用額外的參數給Puppet的資源,因爲它們已經有了自己的一套參數。

標準解決方案已經將File聲明包裝爲定義類型like here,就像您的第一個。也許你可以解釋爲什麼不能使用,所以可以設計一些其他的解決方案?

+0

我不能在這裏使用一個定義,因爲我已經在一個定義,並且似乎我們不能有嵌套的定義。 –

+0

嵌套類/定義通常是一個壞主意:http://docs.puppetlabs.com/puppet/3/reference/lang_classes.html。他們可以放在外面沒有太多的麻煩,然後在另一個班級內引用。什麼東西阻止你? – xiankai

+0

你可以在一個類中有一個定義或類。但是你不能在define中定義。它是否正確? –