2013-12-09 46 views
3

我有幾個需要由木偶創建的文件,全部基於模板。舉個例子:木偶:基於模板的多個文件

/etc/my-project/a.ini 
/etc/my-project/b.ini 
/etc/my-project/c.ini 

我想要做的是確保所有這些文件在Puppet中使用一個語句。事情是這樣的:

define myFile { 
    file { "/ect/init.d/$name.ini": 
    ensure => file, 
    content => template("myProject/myFiles/$name.erb"), 
    } 
} 

myFile { ['a', 'b', 'c']: } 

然而,這似乎並沒有工作(由How to iterate over an array in Puppet啓發)。我在那裏錯過了什麼?我如何訪問文件名並使用它,如果不是$name

回答

5

你的數組聲明是好的,但你實際上試圖創建多個模板,全部使用不同的文件名$name.erb。您應該將其更改爲固定的模板名稱,如template.erb

另一件要確認的事情是您的模板文件的位置正確。

  • 如果你的清單是一個模塊中,模板應該在module_name/templates/template.erb定位並稱爲template("module_name/file_under_template_directory")

  • 如果它是一個獨立的清單,你必須把完整的路徑相反,template("fully_qualified_path_to_template_file")

最後,如果你仍然遇到錯誤,你應該更新你的問題與錯誤消息,所以我們可以縮小原因。

0

您是否嘗試過使用${name}而不是$name

如果不起作用,請檢查您的模板文件(a.erb; b.erb; c.erb)是否位於<module_name>/templates/myProject/myFiles目錄中。

如果所有這些都不起作用,請發佈您的錯誤消息。

0

試試這個......它會以優雅的方式爲您的目的服務。

define myFile($file_name) { 
    file { "/ect/init.d/${file_name}.ini": 
    ensure => file, 
    content => template("myProject/myFiles/${file_name}.erb"), 
    } 
} 

$values = { 
      item_1 => {file_name => "a"}, 
      item_2 => {file_name => "b"}, 
      item_3 => {file_name => "c"} 
      } 




create_resources(myFile,$values)