从 puppet 模块复制整个模板文件夹

从 puppet 模块复制整个模板文件夹

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

相关内容