diff -r a2342f26c9de -r b0b56e0f8c7f dev/provisioning/modules/archive/manifests/extract.pp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dev/provisioning/modules/archive/manifests/extract.pp Fri Jan 15 15:35:00 2016 +0100 @@ -0,0 +1,93 @@ +# == Definition: archive::extract +# +# Archive extractor. +# +# Parameters: +# +# - *$target: Destination directory +# - *$src_target: Default value "/usr/src". +# - *$root_dir: Default value "". +# - *$extension: Default value ".tar.gz". +# - *$timeout: Default value 120. +# - *$strip_components: Default value 0. +# - *$user: The user used to do the extraction. +# +# Example usage: +# +# archive::extract {"apache-tomcat-6.0.26": +# ensure => present, +# target => "/opt", +# } +# +# This means we want to extract the local archive +# (maybe downloaded with archive::download) +# '/usr/src/apache-tomcat-6.0.26.tar.gz' in '/src/apache-tomcat-6.0.26' +# +# Warning: +# +# The parameter *$root_dir* must be used if the root directory of the archive +# is different from the name of the archive *$name*. To extract the name of +# the root directory use the commands "tar tf archive.tar.gz" or +# "unzip -l archive.zip" +# +define archive::extract ( + $target, + $ensure=present, + $src_target='/usr/src', + $root_dir=undef, + $extension='tar.gz', + $timeout=120, + $path=$::path, + $strip_components=0, + $purge=false, + $user=undef, +) { + + if $root_dir { + $extract_dir = "${target}/${root_dir}" + } else { + $extract_dir = "${target}/${name}" + } + + case $ensure { + 'present': { + + $extract_zip = "unzip -o ${src_target}/${name}.${extension} -d ${target}" + $extract_targz = "tar --no-same-owner --no-same-permissions --strip-components=${strip_components} -xzf ${src_target}/${name}.${extension} -C ${target}" + $extract_tarbz2 = "tar --no-same-owner --no-same-permissions --strip-components=${strip_components} -xjf ${src_target}/${name}.${extension} -C ${target}" + $extract_tarxz = "tar --no-same-owner --no-same-permissions --strip-components=${strip_components} -xpf ${src_target}/${name}.${extension} -C ${target}" + + $purge_command = $purge ? { + true => "rm -rf ${target} && ", + default => '', + } + + $command = $extension ? { + 'zip' => "${purge_command}mkdir -p ${target} && ${extract_zip}", + 'tar.gz' => "${purge_command}mkdir -p ${target} && ${extract_targz}", + 'tgz' => "${purge_command}mkdir -p ${target} && ${extract_targz}", + 'tar.bz2' => "${purge_command}mkdir -p ${target} && ${extract_tarbz2}", + 'tgz2' => "${purge_command}mkdir -p ${target} && ${extract_tarbz2}", + 'tar.xz' => "${purge_command}mkdir -p ${target} && ${extract_tarxz}", + 'txz' => "${purge_command}mkdir -p ${target} && ${extract_tarxz}", + default => fail ( "Unknown extension value '${extension}'" ), + } + exec {"${name} unpack": + command => $command, + creates => $extract_dir, + timeout => $timeout, + user => $user, + path => $path, + } + } + 'absent': { + file {$extract_dir: + ensure => absent, + recurse => true, + purge => true, + force => true, + } + } + default: { err ( "Unknown ensure value: '${ensure}'" ) } + } +}