Dropping Tarballs with Puppet
I frequently find myself using Puppet to expand tarballs in various locations, sometimes fiddling with a directory name here or there. In fact, I do it so often, that I created a “define” for it earlier this week. This could be a little more polished, but in the spirit of sharing first drafts, here goes:
# Small define to expand a tarball at a location; assumes File[$title] # definition of tarball and installation of pax: define baselayout::drop_tarball($dest, $dir_name, $dir_sub='') { # $dest: cwd in which expansion is done # $dir_name: name of top level directory created in $dest # $dir_sub: regexp to -s for pax - not supported for .zip archives if ($dir_sub) { $regexp = "-s $dir_sub" } else { $regexp = '' } # CentOS' pax doesn't support "-j" flag; therefore, run pax after # bzcat in a pipeline. Twiddle path to bzcat as distro-appropriate: case $operatingsystem { CentOS: { $bzcat = "/usr/bin/bzcat" } Ubuntu: { $bzcat = "/bin/bzcat" } } # Choose expansion method based on file suffix: if (($title =~ /.tar.gz$/) or ($title =~ /.tgz$/)) { $expand = "/usr/bin/pax -rz $regexp < $title" } elsif (($title =~ /.tar.bz2$/) or ($title =~ /.tbz$/)) { $expand = "$bzcat $title | /usr/bin/pax -r $regexp" } elsif ( $title =~ /.zip$/ ) { $expand = "/usr/bin/unzip $title" } exec { "drop_tarball $title": command => $expand, cwd => $dest, creates => "${dest}/${dir_name}", require => File[$title], } }
The definition is written for Ubuntu and CentOS, assumes pax is installed on the system, and that a file resource for the tarball is defined before the definition is called. Pax is used instead of tar to facilitate renaming the top-level directory of the tarball. Zipped directories are also support, but without rename functionality.
I’ll update a gist as I develop the definition.
Comments welcome.