You can only copy files wholesale using the source parameter, which copies files as-is. The only way you can copy multiple templates is to use multiple file resources.
A way of shortening the amount of code you need is using a define resource type. For example, using Puppet 4 strict typing and the splat operator:
define myclass::webconfig ( String $file_path, Hash $attributes, String $template_path, ) { file { $file_path: ensure => file, content => template("${template_path}/${name}.erb"), * => $attributes, } }
Which can be used as:
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], } }
Which will place a file at $http_dir/webconfig/myfile with the contents of template webconfig/myfile.erb.
You can also pass an array of file names, like so:
$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], } }