On Thursday, October 4, 2012 11:05:08 AM UTC-5, timo wrote:
>
> Here's one for you!
>
> We're rolling out some zip files to our servers using Puppet, there's an 
> exec that unzips them, the zip file is then deleted. I need to remove the 
> old versions of the unzipped directory using Puppet when we rol out a newer 
> version.
>
> So, on my client/node machine I have the below directories.
>
> /opt/1234
> /opt/12345
> /opt/123456
>
> What I need to do, is rm the the above directories when we roll out 
> 1234567.zip. When the newest directory (1234567) is unzipped, the Puppet 
> exec sym links it to /opt/java. So could I remove the older directores that 
> are not sym linked? 
>
> Maybe using:
>
>    tidy { tidy_opt:
>           path => "/opt/",
>           age => "1d",
>           backup => false,
>           matches => [ "some nice ruby here that finds the non sym linked 
> directories??" ],
>      }
>
>
>
There are several ways you could approach this, and which would be best 
depends on several factors.  It would be ideal if the directories you want 
to manage this way were located in a parent directory that you could be 
sure would hold only files for this general purpose.  I would not feel 
comfortable assuming that /opt satisfies that criterion, but you could set 
up a subdirectory such as /opt/java_version for the purpose.

Next you should consider whether you need the test for which directory is 
currently symlinked.  You're managing the deployment of those directories 
and (I hope) the symlink itself via Puppet, so you don't really need to 
test.  Instead, you can just rely on Puppet to get it done, or else to fail 
before any damage is done.  For example, you can do something like this:

$java_base_directory = '/opt/java_version'
$current_java_version = '123456'

# Put the current version in place, update the
# symlink, etc.; perhaps you have a defined
# type that handles it?
deploy_java_version { "${current_java_version}":
  base_directory => "${java_base_directory}"
}

# Clean up other versions
file { "${java_base_directory}":
  ensure => directory,
  recurse => remote,
  purge => true,
  ignore => "${java_base_directory}/${current_java_version}",
  require => Deploy_java_version["${current_java_version}"]
}

You may need also a "source" parameter, but it can (and should) point to an 
empty directory on the master's file server.

There are other approaches you could consider, but other than an Exec, all 
of them either require you to maintain a list of the directories you want 
to ensure have been removed, or else to create and deploy a custom fact.  
Neither of those is hard, but they would be bigger and a bit messier than 
the above approach.


John

-- 
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/-/U0u4ReIpnS0J.
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