我正在寻找用于在 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],
}
}