|
1 # Define: puppi::netinstall |
|
2 # |
|
3 # This defines simplifies the installation of a file |
|
4 # downloaded from the web. It provides arguments to manage |
|
5 # different kind of downloads and custom commands. |
|
6 # It's used, among the others, by NextGen modules of webapps |
|
7 # when the argument install is set to => source |
|
8 # |
|
9 # == Variables |
|
10 # |
|
11 # [*url*] |
|
12 # The Url of the file to retrieve. Required. |
|
13 # Example: http://www.example42.com/file.tar.gz |
|
14 # |
|
15 # [*destination_dir*] |
|
16 # The final destination where to unpack or copy what has been |
|
17 # downloaded. Required. |
|
18 # Example: /var/www/html |
|
19 # |
|
20 # [*retrieve_args*] |
|
21 # A string of arguments to pass to wget. |
|
22 # |
|
23 # [*extracted_dir*] |
|
24 # The name of a directory or file created after the extraction |
|
25 # Needed only if its name is different from the downloaded file name |
|
26 # (without suffixes). Optional. |
|
27 # |
|
28 # [*owner*] |
|
29 # The user owner of the directory / file created. Default: root |
|
30 # |
|
31 # [*group*] |
|
32 # The group owner of the directory / file created. Default: root |
|
33 # |
|
34 # [*timeout*] |
|
35 # The timeout in seconds for each command executed |
|
36 # |
|
37 # [*work_dir*] |
|
38 # A temporary work dir where file is downloaded. Default: /var/tmp |
|
39 # |
|
40 # [*path*] |
|
41 # Define the path for the exec commands. |
|
42 # Default: /bin:/sbin:/usr/bin:/usr/sbin |
|
43 # |
|
44 # [*exec_env*] |
|
45 # Define any additional environment variables to be used with the |
|
46 # exec commands. Note that if you use this to set PATH, it will |
|
47 # override the path attribute. Multiple environment variables |
|
48 # should be specified as an array. |
|
49 # |
|
50 # [*extract_command*] |
|
51 # The command used to extract the downloaded file. |
|
52 # By default is autocalculated accoring to the file extension |
|
53 # Set 'rsync' if the file has to be placed in the destination_dir |
|
54 # as is (for example for war files) |
|
55 # |
|
56 # [*preextract_command*] |
|
57 # An optional custom command to run before extracting the file. |
|
58 # |
|
59 # [*postextract_command*] |
|
60 # An optional custom command to run after having extracted the file. |
|
61 # |
|
62 define puppi::netinstall ( |
|
63 $url, |
|
64 $destination_dir, |
|
65 $extracted_dir = '', |
|
66 $retrieve_command = 'wget', |
|
67 $retrieve_args = '', |
|
68 $owner = 'root', |
|
69 $group = 'root', |
|
70 $timeout = '3600', |
|
71 $work_dir = '/var/tmp', |
|
72 $path = '/bin:/sbin:/usr/bin:/usr/sbin', |
|
73 $extract_command = '', |
|
74 $preextract_command = '', |
|
75 $postextract_command = '', |
|
76 $postextract_cwd = '', |
|
77 $exec_env = [] |
|
78 ) { |
|
79 |
|
80 $source_filename = url_parse($url,'filename') |
|
81 $source_filetype = url_parse($url,'filetype') |
|
82 $source_dirname = url_parse($url,'filedir') |
|
83 |
|
84 $real_extract_command = $extract_command ? { |
|
85 '' => $source_filetype ? { |
|
86 '.tgz' => 'tar -zxf', |
|
87 '.gz' => 'tar -zxf', |
|
88 '.bz2' => 'tar -jxf', |
|
89 '.tar' => 'tar -xf', |
|
90 '.zip' => 'unzip', |
|
91 default => 'tar -zxf', |
|
92 }, |
|
93 default => $extract_command, |
|
94 } |
|
95 |
|
96 $extract_command_second_arg = $real_extract_command ? { |
|
97 /^cp.*/ => '.', |
|
98 /^rsync.*/ => '.', |
|
99 default => '', |
|
100 } |
|
101 |
|
102 $real_extracted_dir = $extracted_dir ? { |
|
103 '' => $real_extract_command ? { |
|
104 /(^cp.*|^rsync.*)/ => $source_filename, |
|
105 /(^tar -zxf*|^tar -jxf*)/ => regsubst($source_dirname,'.tar',''), |
|
106 default => $source_dirname, |
|
107 }, |
|
108 default => $extracted_dir, |
|
109 } |
|
110 |
|
111 $real_postextract_cwd = $postextract_cwd ? { |
|
112 '' => "${destination_dir}/${real_extracted_dir}", |
|
113 default => $postextract_cwd, |
|
114 } |
|
115 |
|
116 if $preextract_command { |
|
117 exec { "PreExtract ${source_filename} in ${destination_dir} - ${title}": |
|
118 command => $preextract_command, |
|
119 subscribe => Exec["Retrieve ${url} in ${work_dir} - ${title}"], |
|
120 refreshonly => true, |
|
121 path => $path, |
|
122 environment => $exec_env, |
|
123 timeout => $timeout, |
|
124 } |
|
125 } |
|
126 |
|
127 exec { "Retrieve ${url} in ${work_dir} - ${title}": |
|
128 cwd => $work_dir, |
|
129 command => "${retrieve_command} ${retrieve_args} ${url}", |
|
130 creates => "${work_dir}/${source_filename}", |
|
131 timeout => $timeout, |
|
132 path => $path, |
|
133 environment => $exec_env, |
|
134 } |
|
135 |
|
136 exec { "Extract ${source_filename} from ${work_dir} - ${title}": |
|
137 command => "mkdir -p ${destination_dir} && cd ${destination_dir} && ${real_extract_command} ${work_dir}/${source_filename} ${extract_command_second_arg}", |
|
138 unless => "ls ${destination_dir}/${real_extracted_dir}", |
|
139 creates => "${destination_dir}/${real_extracted_dir}", |
|
140 timeout => $timeout, |
|
141 require => Exec["Retrieve ${url} in ${work_dir} - ${title}"], |
|
142 path => $path, |
|
143 environment => $exec_env, |
|
144 notify => Exec["Chown ${source_filename} in ${destination_dir} - ${title}"], |
|
145 } |
|
146 |
|
147 exec { "Chown ${source_filename} in ${destination_dir} - ${title}": |
|
148 command => "chown -R ${owner}:${group} ${destination_dir}/${real_extracted_dir}", |
|
149 refreshonly => true, |
|
150 timeout => $timeout, |
|
151 require => Exec["Extract ${source_filename} from ${work_dir} - ${title}"], |
|
152 path => $path, |
|
153 environment => $exec_env, |
|
154 } |
|
155 |
|
156 if $postextract_command { |
|
157 exec { "PostExtract ${source_filename} in ${destination_dir} - ${title}": |
|
158 command => $postextract_command, |
|
159 cwd => $real_postextract_cwd, |
|
160 subscribe => Exec["Extract ${source_filename} from ${work_dir} - ${title}"], |
|
161 refreshonly => true, |
|
162 timeout => $timeout, |
|
163 require => [Exec["Retrieve ${url} in ${work_dir} - ${title}"],Exec["Chown ${source_filename} in ${destination_dir} - ${title}"]], |
|
164 path => $path, |
|
165 environment => $exec_env, |
|
166 } |
|
167 } |
|
168 } |
|
169 |