Я ищу синтаксис для копирования всего каталога шаблонов внутри марионеточного модуля. (Например: шаблоны / 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],
}
}