Назад | Перейти на главную страницу

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

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