dev/provisioning/modules/archive/manifests/extract.pp
changeset 28 b0b56e0f8c7f
child 405 f239c8c5bb94
equal deleted inserted replaced
27:a2342f26c9de 28:b0b56e0f8c7f
       
     1 # == Definition: archive::extract
       
     2 #
       
     3 # Archive extractor.
       
     4 #
       
     5 # Parameters:
       
     6 #
       
     7 # - *$target: Destination directory
       
     8 # - *$src_target: Default value "/usr/src".
       
     9 # - *$root_dir: Default value "".
       
    10 # - *$extension: Default value ".tar.gz".
       
    11 # - *$timeout: Default value 120.
       
    12 # - *$strip_components: Default value 0.
       
    13 # - *$user: The user used to do the extraction.
       
    14 #
       
    15 # Example usage:
       
    16 #
       
    17 #   archive::extract {"apache-tomcat-6.0.26":
       
    18 #     ensure => present,
       
    19 #     target => "/opt",
       
    20 #   }
       
    21 #
       
    22 # This means we want to extract the local archive
       
    23 # (maybe downloaded with archive::download)
       
    24 # '/usr/src/apache-tomcat-6.0.26.tar.gz' in '/src/apache-tomcat-6.0.26'
       
    25 #
       
    26 # Warning:
       
    27 #
       
    28 # The parameter *$root_dir* must be used if the root directory of the archive
       
    29 # is different from the name of the archive *$name*. To extract the name of
       
    30 # the root directory use the commands "tar tf archive.tar.gz" or
       
    31 # "unzip -l archive.zip"
       
    32 #
       
    33 define archive::extract (
       
    34   $target,
       
    35   $ensure=present,
       
    36   $src_target='/usr/src',
       
    37   $root_dir=undef,
       
    38   $extension='tar.gz',
       
    39   $timeout=120,
       
    40   $path=$::path,
       
    41   $strip_components=0,
       
    42   $purge=false,
       
    43   $user=undef,
       
    44 ) {
       
    45 
       
    46   if $root_dir {
       
    47     $extract_dir = "${target}/${root_dir}"
       
    48   } else {
       
    49     $extract_dir = "${target}/${name}"
       
    50   }
       
    51 
       
    52   case $ensure {
       
    53     'present': {
       
    54 
       
    55       $extract_zip    = "unzip -o ${src_target}/${name}.${extension} -d ${target}"
       
    56       $extract_targz  = "tar --no-same-owner --no-same-permissions --strip-components=${strip_components} -xzf ${src_target}/${name}.${extension} -C ${target}"
       
    57       $extract_tarbz2 = "tar --no-same-owner --no-same-permissions --strip-components=${strip_components} -xjf ${src_target}/${name}.${extension} -C ${target}"
       
    58       $extract_tarxz  = "tar --no-same-owner --no-same-permissions --strip-components=${strip_components} -xpf ${src_target}/${name}.${extension} -C ${target}"
       
    59 
       
    60       $purge_command = $purge ? {
       
    61         true    => "rm -rf ${target} && ",
       
    62         default => '',
       
    63       }
       
    64 
       
    65       $command = $extension ? {
       
    66         'zip'     => "${purge_command}mkdir -p ${target} && ${extract_zip}",
       
    67         'tar.gz'  => "${purge_command}mkdir -p ${target} && ${extract_targz}",
       
    68         'tgz'     => "${purge_command}mkdir -p ${target} && ${extract_targz}",
       
    69         'tar.bz2' => "${purge_command}mkdir -p ${target} && ${extract_tarbz2}",
       
    70         'tgz2'    => "${purge_command}mkdir -p ${target} && ${extract_tarbz2}",
       
    71         'tar.xz'  => "${purge_command}mkdir -p ${target} && ${extract_tarxz}",
       
    72         'txz'     => "${purge_command}mkdir -p ${target} && ${extract_tarxz}",
       
    73         default   => fail ( "Unknown extension value '${extension}'" ),
       
    74       }
       
    75       exec {"${name} unpack":
       
    76         command => $command,
       
    77         creates => $extract_dir,
       
    78         timeout => $timeout,
       
    79         user    => $user,
       
    80         path    => $path,
       
    81       }
       
    82     }
       
    83     'absent': {
       
    84       file {$extract_dir:
       
    85         ensure  => absent,
       
    86         recurse => true,
       
    87         purge   => true,
       
    88         force   => true,
       
    89       }
       
    90     }
       
    91     default: { err ( "Unknown ensure value: '${ensure}'" ) }
       
    92   }
       
    93 }