Hello, I fight with a tomcat module and try to ensure several tomcat instances: node XY{ include tomcat ensure_tomcats{ "tomcat1": tc_name => "tomcat1", tc_path => "/app/tomcat1/tomcat", version => "7.0.53"; "tomcat2": tc_name => "tomcat2", tc_path => "/app/tomcat2/tomcat", version => "7.0.53"; } I guess that my module isn't best practice: #cat tomcat/manifests/init.pp define download($version=""){ file{"download apache-tomcat-$version": path => "/usr/local/src/apache-tomcat-$version.tar.gz", ensure => present, owner => $tc_name, group => app, mode => "0755", source => "puppet:///modules/tomcat/apache-tomcat-$version.tar.gz", } } define ensure_tomcats($tc_name, $tc_path, $version) { download{"receive $tc_name $version": version => $version, } file{"$tc_path": ensure => present, owner => $tc_name, group => "app", recurse => true, require => Exec["$tc_name install"], } exec{"$tc_name extract apache-tomcat-$version": command => "/bin/tar xfz /usr/local/src/apache-tomcat-$version.tar.gz", cwd => "/usr/local/src", creates => "/usr/local/src/apache-tomcat-$version", user => "root", require => File["download apache-tomcat-$version"], } exec{"$tc_name install": command => "/bin/cp -r /usr/local/src/apache-tomcat-$version $tc_path", cwd => "/usr/local/src", creates => "$tc_path", user => "root", require => [ Exec["$tc_name extract apache-tomcat-$version"], ], } file{"$tc_path/webapps/examples": ensure => absent, force => true, require => Exec["$tc_name install"], } file{"$tc_path/webapps/docs": ensure => absent, force => true, require => Exec["$tc_name install"], } file{"/app/para/$tc_name.para": ensure => present, owner => "root", group => "app", mode => "0644", source => [ "puppet:///modules/tomcat/$tc_name.para.$::hostname", "puppet:///modules/tomcat/$tc_name.para" ], } user{"$tc_name": ensure => present, home => $tc_path, managehome => true, groups => "app", } file{"tomcat-users $tc_name": ensure => file, path => "${tc_path}/conf/tomcat-users.xml", owner => $tc_name, group => "app", source => [ "puppet:///modules/tomcat/$::hostname.tomcat-users.xml", "puppet:///modules/tomcat/tomcat-users.xml", ], require => Exec["$tc_name install"], } file{"server.xml $tc_name": ensure => file, path => "${tc_path}/conf/server.xml", owner => $tc_name, group => "app", source => [ "puppet:///modules/tomcat/$::hostname.$tc_name.server.xml", "puppet:///modules/tomcat/$tc_name.server.xml", "puppet:///modules/tomcat/server.xml", ], notify => Service["$tc_name"], require => Exec["$tc_name install"], } file{"manager web.xml $tc_name": ensure => file, path => "${tc_path}/webapps/manager/WEB-INF/web.xml", owner => $tc_name, group => "app", source => [ "puppet:///modules/tomcat/$::hostname.$tc_name.manager.web.xml", "puppet:///modules/tomcat/$::hostname.manager.web.xml", "puppet:///modules/tomcat/manager.web.xml", ], notify => Service["$tc_name"], require => Exec["$tc_name install"], } file{"setenv.sh $tc_name": ensure => file, path => "${tc_path}/bin/setenv.sh", owner => $tc_name, group => "app", mode => "0750", source => [ "puppet:///modules/tomcat/$::hostname.$tc_name.setenv.sh", "puppet:///modules/tomcat/$::hostname.setenv.sh", "puppet:///modules/tomcat/setenv.sh", ], require => Exec["$tc_name install"], } file {"/etc/init.d/$tc_name": content => template('tomcat/tomcat_init.erb'), owner => root, group => root, mode => 0755, } service{"$tc_name": ensure => running, enable => true, hasrestart => true, require => [ File["$tc_path"], File["setenv.sh $tc_name"], File["manager web.xml $tc_name"], File["server.xml $tc_name"], File["/etc/init.d/$tc_name"], ], } } class tomcat{ file{'/app/proc/tomcat': ensure => present, owner => "root", group => "app", mode => "0750", source => "puppet:///modules/tomcat/tomcat", } } My problem is that if there're two tomcat instances with the same version the module try to download the apache-tomcat tarball every time. Error: Could not retrieve catalog from remote server: Error 400 on SERVER: Duplicate declaration: File[download apache-tomcat-7.0.53] is already declared in file /etc/puppet/modules/tomcat/manifests/init.pp:9; cannot redeclare at /etc/puppet/modules/tomcat/manifests/init.pp:9 on node YX Thanks in advance Björn -- You received this message because you are subscribed to the Google Groups "Puppet Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to puppet-users+unsubscribe@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/puppet-users/e8137ae2-4c8e-47aa-9de0-1102fc207f36%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.