|
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 } |