]> git.donarmstrong.com Git - dsa-puppet.git/blob - 3rdparty/modules/elasticsearch/manifests/package.pp
Upgrade to 3rdparty version 0.9.4 of elasticsearch/elasticsearch
[dsa-puppet.git] / 3rdparty / modules / elasticsearch / manifests / package.pp
1 # == Class: elasticsearch::package
2 #
3 # This class exists to coordinate all software package management related
4 # actions, functionality and logical units in a central place.
5 #
6 #
7 # === Parameters
8 #
9 # This class does not provide any parameters.
10 #
11 #
12 # === Examples
13 #
14 # This class may be imported by other classes to use its functionality:
15 #   class { 'elasticsearch::package': }
16 #
17 # It is not intended to be used directly by external resources like node
18 # definitions or other modules.
19 #
20 #
21 # === Authors
22 #
23 # * Richard Pijnenburg <mailto:richard.pijnenburg@elasticsearch.com>
24 #
25 class elasticsearch::package {
26
27   Exec {
28     path      => [ '/bin', '/usr/bin', '/usr/local/bin' ],
29     cwd       => '/',
30     tries     => 3,
31     try_sleep => 10,
32   }
33
34   #### Package management
35
36   # set params: in operation
37   if $elasticsearch::ensure == 'present' {
38
39     # Check if we want to install a specific version or not
40     if $elasticsearch::version == false {
41
42       $package_ensure = $elasticsearch::autoupgrade ? {
43         true  => 'latest',
44         false => 'present',
45       }
46
47     } else {
48
49       # install specific version
50       $package_ensure = $elasticsearch::version
51
52     }
53
54     # action
55     if ($elasticsearch::package_url != undef) {
56
57       case $elasticsearch::package_provider {
58         'package': { $before = Package[$elasticsearch::package_name]  }
59         default:   { fail("software provider \"${elasticsearch::package_provider}\".") }
60       }
61
62       $package_dir = $elasticsearch::package_dir
63
64       # Create directory to place the package file
65       exec { 'create_package_dir_elasticsearch':
66         cwd     => '/',
67         path    => ['/usr/bin', '/bin'],
68         command => "mkdir -p ${elasticsearch::package_dir}",
69         creates => $elasticsearch::package_dir,
70       }
71
72       file { $package_dir:
73         ensure  => 'directory',
74         purge   => $elasticsearch::purge_package_dir,
75         force   => $elasticsearch::purge_package_dir,
76         backup  => false,
77         require => Exec['create_package_dir_elasticsearch'],
78       }
79
80       $filenameArray = split($elasticsearch::package_url, '/')
81       $basefilename = $filenameArray[-1]
82
83       $sourceArray = split($elasticsearch::package_url, ':')
84       $protocol_type = $sourceArray[0]
85
86       $extArray = split($basefilename, '\.')
87       $ext = $extArray[-1]
88
89       $pkg_source = "${package_dir}/${basefilename}"
90
91       case $protocol_type {
92
93         'puppet': {
94
95           file { $pkg_source:
96             ensure  => file,
97             source  => $elasticsearch::package_url,
98             require => File[$package_dir],
99             backup  => false,
100             before  => $before,
101           }
102
103         }
104         'ftp', 'https', 'http': {
105
106           exec { 'download_package_elasticsearch':
107             command => "${elasticsearch::params::download_tool} ${pkg_source} ${elasticsearch::package_url} 2> /dev/null",
108             creates => $pkg_source,
109             timeout => $elasticsearch::package_dl_timeout,
110             require => File[$package_dir],
111             before  => $before,
112           }
113
114         }
115         'file': {
116
117           $source_path = $sourceArray[1]
118           file { $pkg_source:
119             ensure  => file,
120             source  => $source_path,
121             require => File[$package_dir],
122             backup  => false,
123             before  => $before,
124           }
125
126         }
127         default: {
128           fail("Protocol must be puppet, file, http, https, or ftp. You have given \"${protocol_type}\"")
129         }
130       }
131
132       if ($elasticsearch::package_provider == 'package') {
133
134         case $ext {
135           'deb':   { $pkg_provider = 'dpkg' }
136           'rpm':   { $pkg_provider = 'rpm'  }
137           default: { fail("Unknown file extention \"${ext}\".") }
138         }
139
140       }
141
142     } else {
143       $pkg_source = undef
144       $pkg_provider = undef
145     }
146
147   # Package removal
148   } else {
149
150     $pkg_source = undef
151     if ($::operatingsystem == 'OpenSuSE') {
152       $pkg_provider = 'rpm'
153     } else {
154       $pkg_provider = undef
155     }
156     $package_ensure = 'absent'
157
158     $package_dir = $elasticsearch::package_dir
159
160     file { $package_dir:
161       ensure => 'absent',
162       purge  => true,
163       force  => true,
164       backup => false,
165     }
166
167   }
168
169   if ($elasticsearch::package_provider == 'package') {
170
171     package { $elasticsearch::package_name:
172       ensure   => $package_ensure,
173       source   => $pkg_source,
174       provider => $pkg_provider,
175     }
176
177   } else {
178     fail("\"${elasticsearch::package_provider}\" is not supported")
179   }
180
181 }