Скопируйте всю папку шаблона из модуля кукол

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