On Jun 29, 2011, at 9:05 AM, Nigel Kersten wrote:

> I've long wanted the equivalent of a "conffile" in Puppet.
> 
> e.g. "replace this file if it's still the same as the one Puppet put down, 
> but if it's been modified from the default, don't replace it"
> 
> I've wanted this in the past for things like a user .rc file, where you want 
> to be able to continually update the default, but not throw away any 
> customization the user may have done.

SInce I support developer who sometimes want to control the conf files, and 
sometimes want Puppet to control them, I created a define:

define managed_file($source = undef, $content = undef) {
  $pdir = inline_template("<%= name.reverse().split('/',2)[1].reverse() %>")
  $basename = inline_template("<%= name.split('/')[-1] %>")
  
  file {
    "${name}-puppet":
      source => $source, content => $content, ensure => present;
    "${pdir}/README-${basename}":
      ensure => present,
      content => "${name} is managed by Puppet.\n\nIf you need to 
edit\n${name}\nand have your changes persist, touch\n${name}.noupdate\nand 
Puppet will ignore that file.  When you are done with your\ntesting, please 
have your changes put in Puppet and delete the\n${name}.noupdate\nfile.  
Thanks.\n\n";
  }

  exec {
    "${name}-sync":
      unless => "test -f ${name}.noupdate || cmp -s ${name} ${name}-puppet",
      command => "/usr/local/bin/rsync -a ${name}-puppet ${name}",
      require => File["${name}-puppet"];
  }
}


And you use it like so:
managed_file {
  "${muledir}/lib/user/system-config.properties":
    content => template("jboss/system-config.properties.erb"),
    require => File["${muledir}/lib/user"],
    notify => Service["/site/mule"];
}

That will create three files in ${muledir}/lib/user: 
README-system-config.properties, system-config.properties-puppet, and 
system-config.properties.  If one of the developers on a managed system needs 
to hand-edit that file, they red the instructions in the README-* and simply 
touch system-config.properties.noupdate.  Removing that file re-enables Puppet 
management.  As a further benefit, they can trivially see what's going to 
change when they remove the .noupdate file because the -puppet version will 
always be Puppet-managed.

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Users" group.
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.

Reply via email to