Hi- Being relatively new to the language, I find myself in a situation where it seems like there must be an elegant way to handle this situation using the DSL, but I'm not really certain what it could be.
I'm trying to describe a configuration that contains 20-30 or so file { } resources, all with the same attributes except for their mode and source. I could write them all out explicitly like this: file { '/etc/passwd': uid => root, gid => root, mode => 0644, source => 'puppet:///modulename/etc/passwd', } ... file { '/var/lib/someotherfile': uid => root, gid => root, mode => 0400, source => 'puppet:///modulename/var/lib/someotherfile', } but that seems unnecessarily repetitive. I originally started down the path of writing something like this (ignore the difference in the mode attribute for a moment): file { [ '/etc/passwd', ... , '/var/lib/someotherfile' ]: uid => root, gid => root, mode => 0400, source => "puppet:///modules/modulename/${title}", } but this bug: http://projects.puppetlabs.com/issues/5259 and this mailing list discussion: https://groups.google.com/d/topic/puppet-users/bj_uPi_WxC4/discussion helped me understand that that attempting to reference the title attribute (the file's namevar) would never work and I would have to use a defined resource instead. Taking Nan's advice in that thread, I then wrote: define basefiles::conf($mode){ $serversource = 'puppet:///modules/modulename' file { "${name}": source =>"${serversource}/${name}", owner => root, group => root, mode => "${mode}" } } basefiles::conf { '/etc/passwd:' mode => 0644 } ... basefiles::conf { '/var/lib/otherfile:' mode => 0400 } .... and that's all groovy. The manifest looks concise and readable. But here's where I stare at a tree and get lost in the forrest: the manifest I'm writing contains my base list of files. On some of my machines, I will want to override that base and substitute a different copy of one or two files from that list (e.g. I will want a different /etc/passwd put in place). Further research leads me to this discussion of overriding defined resources and the futility of trying: https://groups.google.com/d/topic/puppet-users/SDa1F817UBA/discussion That discussion leads me to believe it isn't possible to override defined resources in the same way you might with a class. That makes me think I have to either: a) move the files I might want to override out to their own separate class or b) add some logic to the resource definition to do something magical for certain invocations Both of these options seem icky to me because it means the base module has to be coded in such a way that it has some specific knowledge about when and how it might be overridden. That feels like bad coding mojo to me. So, is there a concise way to describe a collection of file resources, yet be able to override parts of that collection definition in an equally elegant fashion? My instinct says there must be (and it is probably palm-meets-forehead simple), but I can't seem to determine what that might be. Thanks for any help you can offer! -- dNb -- You received this message because you are subscribed to the Google Groups "Puppet Users" group. To view this discussion on the web visit https://groups.google.com/d/msg/puppet-users/-/IKnEhK3tsqEJ. To post to this group, send email to puppet-users@googlegroups.com. To unsubscribe from this group, send email to puppet-users+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/puppet-users?hl=en.