Puppet

從 puppet 模組複製整個模板文件夾

  • May 12, 2017

我正在尋找在 puppet 模組中複製整個模板目錄的語法。(例如:模板/webconfig/file1.erb、模板/webconfig/config/file2.erb)

我試圖複製以下語法:

file {"$http_home_dir/webconfig":
                       ensure => "directory",
                       owner => "$http_user",
                       group => "$http_group",
                       content => template("webconfig"),
                       recurse => true,
                       require => File["$http_home_dir"];
               }

它不起作用。當我也嘗試使用如下萬用字元時,它沒有用。

content => template("webconfig/*.erb"),

有什麼特別的我想念的嗎

您只能使用按source原樣複製文件的參數批量複製文件。複製多個模板的唯一方法是使用多個file資源。

縮短所需程式碼量的一種方法是使用define資源類型。例如,使用 Puppet 4 嚴格類型和 splat 運算符:

define myclass::webconfig (
 String $file_path,
 Hash   $attributes,
 String $template_path,
) {
 file { $file_path:
   ensure  => file,
   content => template("${template_path}/${name}.erb"),
   *       => $attributes,
 }
}

可以用作:

file { $http_home_dir:
 ensure => directory,
 owner  => $http_user,
 group  => $http_group,
}

myclass::webconfig { 'myfile':
 template_path => 'webconfig',
 file_path     => "${http_home_dir}/webconfig",
 attributes    => {
   owner   => $http_user,
   group   => $http_group,
   require => File[$http_home_dir],
 }
}

這將放置一個包含$http_dir/webconfig/myfile模板內容的文件webconfig/myfile.erb

您還可以傳遞文件名數組,如下所示:

$my_files = [
 'myfile',
 'myotherfile',
 'mythirdfile',
 'foobarfozbaz'
]

file { $http_home_dir:
 ensure => directory,
 owner  => $http_user,
 group  => $http_group,
}

myclass::webconfig { $my_files:
 template_path => 'webconfig',
 file_path     => "${http_dir}/webconfig",
 attributes    => {
   owner   => $http_user,
   group   => $http_group,
   require => File[$http_home_dir],
 }
}

引用自:https://serverfault.com/questions/849691