Class: Puppet::Provider::ElasticPlugin
- Inherits:
-
Puppet::Provider
- Object
- Puppet::Provider
- Puppet::Provider::ElasticPlugin
- Defined in:
- lib/puppet/provider/elastic_plugin.rb
Overview
Generalized parent class for providers that behave like Elasticsearch’s plugin command line tool.
Instance Method Summary collapse
- #batch_capable? ⇒ Boolean
-
#create ⇒ Object
Install this plugin on the host.
-
#destroy ⇒ Object
Remove this plugin from the host.
-
#es_version ⇒ Object
Determine the installed version of Elasticsearch on this host.
- #exists? ⇒ Boolean
-
#homedir ⇒ Object
Elasticsearch’s home directory.
-
#install1x ⇒ Array<String>
Intelligently returns the correct installation arguments for version 1 version of Elasticsearch.
-
#install2x ⇒ Array<String>
Intelligently returns the correct installation arguments for version 2 version of Elasticsearch.
- #is1x? ⇒ Boolean
- #is2x? ⇒ Boolean
-
#plugin_version(plugin_name) ⇒ Object
Determine the plugin version.
-
#pluginfile ⇒ Object
Get the path for the ‘.name` file for the provider helper.
-
#pluginfile_content ⇒ Object
Returns the content that should be written to the pluginfile.
-
#proxy_args(url) ⇒ Object
Format proxy arguments for consumption by the elasticsearch plugin management tool (i.e., Java properties).
-
#readpluginfile ⇒ Object
Get pluginfile contents.
-
#with_environment(&block) ⇒ Object
Run a command wrapped in necessary env vars.
-
#writepluginfile ⇒ Object
Write plugfile file ‘.name` contents to disk.
Instance Method Details
#batch_capable? ⇒ Boolean
197 198 199 |
# File 'lib/puppet/provider/elastic_plugin.rb', line 197 def batch_capable? Puppet::Util::Package.versioncmp(es_version, '2.2.0') >= 0 end |
#create ⇒ Object
Install this plugin on the host.
150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 |
# File 'lib/puppet/provider/elastic_plugin.rb', line 150 def create commands = [] commands += proxy_args(@resource[:proxy]) if is2x? and @resource[:proxy] commands << 'install' commands << '--batch' if batch_capable? commands += is1x? ? install1x : install2x debug("Commands: #{commands.inspect}") retry_count = 3 retry_times = 0 begin with_environment do plugin(commands) end rescue Puppet::ExecutionFailure => e retry_times += 1 debug("Failed to install plugin. Retrying... #{retry_times} of #{retry_count}") sleep 2 retry if retry_times < retry_count raise "Failed to install plugin. Received error: #{e.inspect}" end writepluginfile end |
#destroy ⇒ Object
Remove this plugin from the host.
176 177 178 179 180 |
# File 'lib/puppet/provider/elastic_plugin.rb', line 176 def destroy with_environment do plugin(['remove', Puppet_X::Elastic::plugin_name(@resource[:name])]) end end |
#es_version ⇒ Object
Determine the installed version of Elasticsearch on this host.
183 184 185 186 187 |
# File 'lib/puppet/provider/elastic_plugin.rb', line 183 def es_version Puppet_X::Elastic::EsVersioning.version( resource[:elasticsearch_package_name], resource.catalog ) end |
#exists? ⇒ Boolean
23 24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/puppet/provider/elastic_plugin.rb', line 23 def exists? if !File.exists?(pluginfile) debug "Plugin file #{pluginfile} does not exist" return false elsif File.exists?(pluginfile) && readpluginfile != pluginfile_content debug "Got #{readpluginfile} Expected #{pluginfile_content}. Removing for reinstall" self.destroy return false else debug "Plugin exists" return true end end |
#homedir ⇒ Object
Elasticsearch’s home directory.
14 15 16 17 18 19 20 21 |
# File 'lib/puppet/provider/elastic_plugin.rb', line 14 def homedir case Facter.value('osfamily') when 'OpenBSD' '/usr/local/elasticsearch' else '/usr/share/elasticsearch' end end |
#install1x ⇒ Array<String>
Intelligently returns the correct installation arguments for version 1 version of Elasticsearch.
91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
# File 'lib/puppet/provider/elastic_plugin.rb', line 91 def install1x if !@resource[:url].nil? [ Puppet_X::Elastic::plugin_name(@resource[:name]), '--url', @resource[:url] ] elsif !@resource[:source].nil? [ Puppet_X::Elastic::plugin_name(@resource[:name]), '--url', "file://#{@resource[:source]}" ] else [ @resource[:name] ] end end |
#install2x ⇒ Array<String>
Intelligently returns the correct installation arguments for version 2 version of Elasticsearch.
116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 |
# File 'lib/puppet/provider/elastic_plugin.rb', line 116 def install2x if !@resource[:url].nil? [ @resource[:url] ] elsif !@resource[:source].nil? [ "file://#{@resource[:source]}" ] else [ @resource[:name] ] end end |
#is1x? ⇒ Boolean
189 190 191 |
# File 'lib/puppet/provider/elastic_plugin.rb', line 189 def is1x? Puppet::Util::Package.versioncmp(es_version, '2.0.0') < 0 end |
#is2x? ⇒ Boolean
193 194 195 |
# File 'lib/puppet/provider/elastic_plugin.rb', line 193 def is2x? (Puppet::Util::Package.versioncmp(es_version, '2.0.0') >= 0) && (Puppet::Util::Package.versioncmp(es_version, '3.0.0') < 0) end |
#plugin_version(plugin_name) ⇒ Object
Determine the plugin version.
202 203 204 205 206 207 |
# File 'lib/puppet/provider/elastic_plugin.rb', line 202 def plugin_version(plugin_name) _vendor, _plugin, version = plugin_name.split('/') return es_version if is2x? && version.nil? return version.scan(/\d+\.\d+\.\d+(?:\-\S+)?/).first unless version.nil? false end |
#pluginfile ⇒ Object
Get the path for the ‘.name` file for the provider helper.
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/puppet/provider/elastic_plugin.rb', line 55 def pluginfile if @resource[:plugin_path] File.join( @resource[:plugin_dir], @resource[:plugin_path], '.name' ) else File.join( @resource[:plugin_dir], Puppet_X::Elastic::plugin_name(@resource[:name]), '.name' ) end end |
#pluginfile_content ⇒ Object
Returns the content that should be written to the pluginfile.
40 41 42 43 44 45 46 47 48 49 |
# File 'lib/puppet/provider/elastic_plugin.rb', line 40 def pluginfile_content return @resource[:name] if is1x? if @resource[:name].split("/").count == 1 # Official plugin version = plugin_version(@resource[:name]) return "#{@resource[:name]}/#{version}" else return @resource[:name] end end |
#proxy_args(url) ⇒ Object
Format proxy arguments for consumption by the elasticsearch plugin management tool (i.e., Java properties).
137 138 139 140 141 142 143 144 145 146 147 |
# File 'lib/puppet/provider/elastic_plugin.rb', line 137 def proxy_args url parsed = URI(url) ['http', 'https'].map do |schema| [:host, :port, :user, :password].map do |param| option = parsed.send(param) if not option.nil? "-D#{schema}.proxy#{param.to_s.capitalize}=#{option}" end end end.flatten.compact end |
#readpluginfile ⇒ Object
Get pluginfile contents.
81 82 83 84 |
# File 'lib/puppet/provider/elastic_plugin.rb', line 81 def readpluginfile f = File.open(pluginfile) f.readline end |
#with_environment(&block) ⇒ Object
Run a command wrapped in necessary env vars
210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 |
# File 'lib/puppet/provider/elastic_plugin.rb', line 210 def with_environment(&block) env_vars = { 'ES_JAVA_OPTS' => [] } saved_vars = {} if !is2x? and @resource[:proxy] env_vars['ES_JAVA_OPTS'] += proxy_args(@resource[:proxy]) end env_vars['ES_JAVA_OPTS'] = env_vars['ES_JAVA_OPTS'].join(' ') env_vars.each do |env_var, value| saved_vars[env_var] = ENV[env_var] ENV[env_var] = value end ret = block.call saved_vars.each do |env_var, value| ENV[env_var] = value end ret end |
#writepluginfile ⇒ Object
Write plugfile file ‘.name` contents to disk.
72 73 74 75 76 |
# File 'lib/puppet/provider/elastic_plugin.rb', line 72 def writepluginfile File.open(pluginfile, 'w') do |file| file.write pluginfile_content end end |