dev/provisioning/modules/archive/manifests/download.pp
changeset 28 b0b56e0f8c7f
child 405 f239c8c5bb94
equal deleted inserted replaced
27:a2342f26c9de 28:b0b56e0f8c7f
       
     1 # == Definition: archive::download
       
     2 #
       
     3 # Archive downloader with integrity verification.
       
     4 #
       
     5 # Parameters:
       
     6 #
       
     7 # - *$url:
       
     8 # - *$digest_url:
       
     9 # - *$digest_string: Default value undef
       
    10 # - *$digest_type: Default value "md5".
       
    11 # - *$timeout: Default value 120.
       
    12 # - *$src_target: Default value "/usr/src".
       
    13 # - *$allow_insecure: Default value false.
       
    14 # - *$follow_redirects: Default value false.
       
    15 # - *$verbose: Default value true.
       
    16 # - *$proxy_server: Default value undef.
       
    17 # - *$user: The user used to download the archive
       
    18 #
       
    19 # Example usage:
       
    20 #
       
    21 #  archive::download {"apache-tomcat-6.0.26.tar.gz":
       
    22 #    ensure => present,
       
    23 #    url    => "http://archive.apache.org/dist/tomcat/tomcat-6/v6.0.26/bin/apache-tomcat-6.0.26.tar.gz",
       
    24 #  }
       
    25 #
       
    26 #  archive::download {"apache-tomcat-6.0.26.tar.gz":
       
    27 #    ensure        => present,
       
    28 #    digest_string => "f9eafa9bfd620324d1270ae8f09a8c89",
       
    29 #    url           => "http://archive.apache.org/dist/tomcat/tomcat-6/v6.0.26/bin/apache-tomcat-6.0.26.tar.gz",
       
    30 #  }
       
    31 #
       
    32 define archive::download (
       
    33   $url,
       
    34   $ensure=present,
       
    35   $checksum=true,
       
    36   $digest_url=undef,
       
    37   $digest_string=undef,
       
    38   $digest_type='md5',
       
    39   $timeout=120,
       
    40   $src_target='/usr/src',
       
    41   $allow_insecure=false,
       
    42   $follow_redirects=false,
       
    43   $verbose=true,
       
    44   $path=$::path,
       
    45   $proxy_server=undef,
       
    46   $user=undef,
       
    47 ) {
       
    48 
       
    49   $insecure_arg = $allow_insecure ? {
       
    50     true    => '-k',
       
    51     default => '',
       
    52   }
       
    53 
       
    54   $redirect_arg = $follow_redirects ? {
       
    55     true    => '-L',
       
    56     default => '',
       
    57   }
       
    58 
       
    59   if !defined(Package['curl']) {
       
    60     package{'curl':
       
    61       ensure => present,
       
    62     }
       
    63   }
       
    64 
       
    65   if $proxy_server {
       
    66     $proxy_option = "--proxy ${proxy_server}"
       
    67   } else {
       
    68     $proxy_option = undef
       
    69   }
       
    70 
       
    71   case $checksum {
       
    72     true : {
       
    73       case $digest_type {
       
    74         'md5','sha1','sha224','sha256','sha384','sha512' : {
       
    75           $checksum_cmd = "${digest_type}sum -c ${name}.${digest_type}"
       
    76         }
       
    77         default: { fail 'Unimplemented digest type' }
       
    78       }
       
    79 
       
    80       if $digest_url and $digest_string {
       
    81         fail 'digest_url and digest_string should not be used together !'
       
    82       }
       
    83 
       
    84       if $digest_string {
       
    85         case $ensure {
       
    86           'present': {
       
    87             file {"${src_target}/${name}.${digest_type}":
       
    88               ensure  => $ensure,
       
    89               content => "${digest_string} *${name}",
       
    90               owner   => $user,
       
    91               notify  => Exec["download archive ${name} and check sum"],
       
    92             }
       
    93           }
       
    94           'absent': {
       
    95             file {"${src_target}/${name}.${digest_type}":
       
    96               ensure => absent,
       
    97               purge  => true,
       
    98               owner  => $user,
       
    99               force  => true,
       
   100             }
       
   101           }
       
   102           default: {
       
   103             fail('$ensure can only be present or absent.')
       
   104           }
       
   105         }
       
   106       } else {
       
   107         case $ensure {
       
   108           'present': {
       
   109 
       
   110             if !$digest_url {
       
   111               $digest_src = "${url}.${digest_type}"
       
   112             } else {
       
   113               $digest_src = $digest_url
       
   114             }
       
   115 
       
   116 
       
   117             exec {"download digest of archive ${name}":
       
   118               command => "curl ${proxy_option} -s -S ${insecure_arg} ${redirect_arg} -o ${src_target}/${name}.${digest_type} '${digest_src}'",
       
   119               creates => "${src_target}/${name}.${digest_type}",
       
   120               timeout => $timeout,
       
   121               path    => $path,
       
   122               notify  => Exec["download archive ${name} and check sum"],
       
   123               user    => $user,
       
   124               require => Package['curl'],
       
   125             }
       
   126 
       
   127           }
       
   128           'absent': {
       
   129             file{"${src_target}/${name}.${digest_type}":
       
   130               ensure => absent,
       
   131               purge  => true,
       
   132               owner  => $user,
       
   133               force  => true,
       
   134             }
       
   135           }
       
   136           default: {
       
   137             fail('$ensure can only be present or absent.')
       
   138           }
       
   139         }
       
   140       }
       
   141     }
       
   142     false :  {
       
   143       $checksum_cmd = undef # Fix for strict_variables
       
   144       if $verbose {
       
   145         notice 'No checksum for this archive'
       
   146       }
       
   147     }
       
   148     default: { fail ( "Unknown checksum value: '${checksum}'" ) }
       
   149   }
       
   150 
       
   151   case $ensure {
       
   152     'present': {
       
   153       $_notify     = $checksum ? {
       
   154         true    => Exec["rm-on-error-${name}"],
       
   155         default => undef,
       
   156       }
       
   157       $refreshonly = $checksum ? {
       
   158         true    => true,
       
   159         default => undef,
       
   160       }
       
   161       exec {"download archive ${name} and check sum":
       
   162         command     => "curl ${proxy_option} -s -S ${insecure_arg} ${redirect_arg} -o ${src_target}/${name} '${url}'",
       
   163         creates     => "${src_target}/${name}",
       
   164         logoutput   => true,
       
   165         timeout     => $timeout,
       
   166         path        => $path,
       
   167         require     => Package['curl'],
       
   168         notify      => $_notify,
       
   169         user        => $user,
       
   170         refreshonly => $refreshonly,
       
   171       }
       
   172 
       
   173       exec {"rm-on-error-${name}":
       
   174         command     => "rm -f ${src_target}/${name} ${src_target}/${name}.${digest_type} && exit 1",
       
   175         unless      => $checksum_cmd,
       
   176         cwd         => $src_target,
       
   177         path        => $path,
       
   178         refreshonly => true,
       
   179       }
       
   180     }
       
   181     'absent': {
       
   182       file {"${src_target}/${name}":
       
   183         ensure => absent,
       
   184         purge  => true,
       
   185         force  => true,
       
   186       }
       
   187     }
       
   188     default: { fail ( "Unknown ensure value: '${ensure}'" ) }
       
   189   }
       
   190 }