![从 puppet 模块复制整个模板文件夹](https://linux22.com/image/704147/%E4%BB%8E%20puppet%20%E6%A8%A1%E5%9D%97%E5%A4%8D%E5%88%B6%E6%95%B4%E4%B8%AA%E6%A8%A1%E6%9D%BF%E6%96%87%E4%BB%B6%E5%A4%B9.png)
我正在寻找用于在 Puppet 模块内复制整个模板目录的语法。(例如:templates/webconfig/file1.erb、templates/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"),
我是否遗漏了什么具体内容
答案1
您只能使用参数批量复制文件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],
}
}