1 # == Class: elasticsearch::package
3 # This class exists to coordinate all software package management related
4 # actions, functionality and logical units in a central place.
9 # This class does not provide any parameters.
14 # This class may be imported by other classes to use its functionality:
15 # class { 'elasticsearch::package': }
17 # It is not intended to be used directly by external resources like node
18 # definitions or other modules.
23 # * Richard Pijnenburg <mailto:richard.pijnenburg@elasticsearch.com>
25 class elasticsearch::package {
28 path => [ '/bin', '/usr/bin', '/usr/local/bin' ],
34 #### Package management
36 # set params: in operation
37 if $elasticsearch::ensure == 'present' {
39 # Check if we want to install a specific version or not
40 if $elasticsearch::version == false {
42 $package_ensure = $elasticsearch::autoupgrade ? {
49 # install specific version
50 $package_ensure = $elasticsearch::version
55 if ($elasticsearch::package_url != undef) {
57 case $elasticsearch::package_provider {
58 'package': { $before = Package[$elasticsearch::package_name] }
59 default: { fail("software provider \"${elasticsearch::package_provider}\".") }
62 $package_dir = $elasticsearch::package_dir
64 # Create directory to place the package file
65 exec { 'create_package_dir_elasticsearch':
67 path => ['/usr/bin', '/bin'],
68 command => "mkdir -p ${elasticsearch::package_dir}",
69 creates => $elasticsearch::package_dir,
73 ensure => 'directory',
74 purge => $elasticsearch::purge_package_dir,
75 force => $elasticsearch::purge_package_dir,
77 require => Exec['create_package_dir_elasticsearch'],
80 $filenameArray = split($elasticsearch::package_url, '/')
81 $basefilename = $filenameArray[-1]
83 $sourceArray = split($elasticsearch::package_url, ':')
84 $protocol_type = $sourceArray[0]
86 $extArray = split($basefilename, '\.')
89 $pkg_source = "${package_dir}/${basefilename}"
97 source => $elasticsearch::package_url,
98 require => File[$package_dir],
104 'ftp', 'https', 'http': {
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],
117 $source_path = $sourceArray[1]
120 source => $source_path,
121 require => File[$package_dir],
128 fail("Protocol must be puppet, file, http, https, or ftp. You have given \"${protocol_type}\"")
132 if ($elasticsearch::package_provider == 'package') {
135 'deb': { $pkg_provider = 'dpkg' }
136 'rpm': { $pkg_provider = 'rpm' }
137 default: { fail("Unknown file extention \"${ext}\".") }
144 $pkg_provider = undef
151 if ($::operatingsystem == 'OpenSuSE') {
152 $pkg_provider = 'rpm'
154 $pkg_provider = undef
156 $package_ensure = 'absent'
158 $package_dir = $elasticsearch::package_dir
169 if ($elasticsearch::package_provider == 'package') {
171 package { $elasticsearch::package_name:
172 ensure => $package_ensure,
173 source => $pkg_source,
174 provider => $pkg_provider,
178 fail("\"${elasticsearch::package_provider}\" is not supported")