logstash-output-elasticsearch 11.10.0-java → 11.12.0-java

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 88cb9349aee0722c0f5c9b936257fa46a5954a9fc603d783e275206217a4f0af
4
- data.tar.gz: f99d4aeed3b63a3c320ae058c1a3842dcedfee54f4064387cc61836396040220
3
+ metadata.gz: 497559fc1591316e5d904dfdfa907c63397a074a32cb54e4d249bb1e678a4d94
4
+ data.tar.gz: 0cab607b8ed00108dc733658a27e7e7a3e7a384d70ac9a69ebff7069a6d8a629
5
5
  SHA512:
6
- metadata.gz: 98bcaa84acaa9ebcf13f8a6c64c9d40e220838adf5e321fcf198ff1a51ad016855172b119e4003c7fb13c204c156c77cf10d6a01f7fc574e8c4b20a0284f4391
7
- data.tar.gz: 75827edd0dca20dd1e534e2abd3f4b1bf4e2174865d1fcdc677b24131c28a490267989f48ded95587af103a38486b6d524da1c81ce41f44ad347dcd6b40cedb0
6
+ metadata.gz: 3ce4e493f7b1951fc69ceb16e8f3370423e57ebfb19f069c14b41172a2a6597940eafd721878754649779e5c93f906dd21cb58c0c26689ff393773b7e866e9d5
7
+ data.tar.gz: d7299fc74267f8ba104842bd47493a744f0e683ab7ec51fe241cd4f53c6e5c63a6e597acbadc0174d661e630370d342b4c84581774ece082b2cc3b426aab93f0
data/CHANGELOG.md CHANGED
@@ -1,3 +1,9 @@
1
+ ## 11.12.0
2
+ - Add legacy template API support for Elasticsearch 8 [#1092](https://github.com/logstash-plugins/logstash-output-elasticsearch/pull/1092)
3
+
4
+ ## 11.11.0
5
+ - When using an `api_key` along with either `cloud_id` or https `hosts`, you no longer need to also specify `ssl => true` [#1065](https://github.com/logstash-plugins/logstash-output-elasticsearch/issues/1065)
6
+
1
7
  ## 11.10.0
2
8
  - Feature: expose `dlq_routed` document metric to track the documents routed into DLQ [#1090](https://github.com/logstash-plugins/logstash-output-elasticsearch/pull/1090)
3
9
 
data/docs/index.asciidoc CHANGED
@@ -362,6 +362,7 @@ This plugin supports the following configuration options plus the
362
362
  | <<plugins-{type}s-{plugin}-ssl_certificate_verification>> |<<boolean,boolean>>|No
363
363
  | <<plugins-{type}s-{plugin}-ssl_supported_protocols>> |<<string,string>>|No
364
364
  | <<plugins-{type}s-{plugin}-template>> |a valid filesystem path|No
365
+ | <<plugins-{type}s-{plugin}-template_api>> |<<string,string>>, one of `["auto", "legacy", "composable"]`|No
365
366
  | <<plugins-{type}s-{plugin}-template_name>> |<<string,string>>|No
366
367
  | <<plugins-{type}s-{plugin}-template_overwrite>> |<<boolean,boolean>>|No
367
368
  | <<plugins-{type}s-{plugin}-timeout>> |<<number,number>>|No
@@ -406,8 +407,8 @@ For more details on actions, check out the {ref}/docs-bulk.html[Elasticsearch bu
406
407
  * Value type is <<password,password>>
407
408
  * There is no default value for this setting.
408
409
 
409
- Authenticate using Elasticsearch API key. Note that this option also requires
410
- enabling the `ssl` option.
410
+ Authenticate using Elasticsearch API key.
411
+ Note that this option also requires SSL/TLS, which can be enabled by supplying a <<plugins-{type}s-{plugin}-cloud_id>>, a list of HTTPS <<plugins-{type}s-{plugin}-hosts>>, or by setting <<plugins-{type}s-{plugin}-ssl,`ssl => true`>>.
411
412
 
412
413
  Format is `id:api_key` where `id` and `api_key` are as returned by the
413
414
  Elasticsearch {ref}/security-api-create-api-key.html[Create API key API].
@@ -1040,11 +1041,9 @@ do not use full URL here, only paths, e.g. "/sniff/_nodes/http"
1040
1041
  * Value type is <<boolean,boolean>>
1041
1042
  * There is no default value for this setting.
1042
1043
 
1043
- Enable SSL/TLS secured communication to Elasticsearch cluster. Leaving this
1044
- unspecified will use whatever scheme is specified in the URLs listed in 'hosts'.
1045
- If no explicit protocol is specified plain HTTP will be used. If SSL is
1046
- explicitly disabled here the plugin will refuse to start if an HTTPS URL is
1047
- given in 'hosts'
1044
+ Enable SSL/TLS secured communication to Elasticsearch cluster.
1045
+ Leaving this unspecified will use whatever scheme is specified in the URLs listed in <<plugins-{type}s-{plugin}-hosts>> or extracted from the <<plugins-{type}s-{plugin}-cloud_id>>.
1046
+ If no explicit protocol is specified plain HTTP will be used.
1048
1047
 
1049
1048
  [id="plugins-{type}s-{plugin}-ssl_certificate_verification"]
1050
1049
  ===== `ssl_certificate_verification`
@@ -1082,6 +1081,22 @@ the *$JDK_HOME/conf/security/java.security* configuration file. That is, `TLSv1.
1082
1081
  You can set the path to your own template here, if you so desire.
1083
1082
  If not set, the included template will be used.
1084
1083
 
1084
+ [id="plugins-{type}s-{plugin}-template_api"]
1085
+ ===== `template_api`
1086
+
1087
+ * Value can be any of: `auto`, `legacy`, `composable`
1088
+ * Default value is `auto`
1089
+
1090
+ The default setting of `auto` will use
1091
+ {ref}/index-templates.html[index template API] to create index template, if the
1092
+ Elasticsearch cluster is running Elasticsearch version `8.0.0` or higher,
1093
+ and use {ref}/indices-templates-v1.html[legacy template API] otherwise.
1094
+
1095
+ Setting this flag to `legacy` will use legacy template API to create index template.
1096
+ Setting this flag to `composable` will use index template API to create index template.
1097
+
1098
+ NOTE: The format of template provided to <<plugins-{type}s-{plugin}-template>> needs to match the template API being used.
1099
+
1085
1100
  [id="plugins-{type}s-{plugin}-template_name"]
1086
1101
  ===== `template_name`
1087
1102
 
@@ -77,12 +77,12 @@ module LogStash; module Outputs; class ElasticSearch;
77
77
  }
78
78
  end
79
79
 
80
- def template_install(name, template, force=false)
81
- if template_exists?(name) && !force
80
+ def template_install(template_endpoint, name, template, force=false)
81
+ if template_exists?(template_endpoint, name) && !force
82
82
  @logger.debug("Found existing Elasticsearch template, skipping template management", name: name)
83
83
  return
84
84
  end
85
- template_put(name, template)
85
+ template_put(template_endpoint, name, template)
86
86
  end
87
87
 
88
88
  def last_es_version
@@ -402,20 +402,16 @@ module LogStash; module Outputs; class ElasticSearch;
402
402
  response.code >= 200 && response.code <= 299
403
403
  end
404
404
 
405
- def template_exists?(name)
405
+ def template_exists?(template_endpoint, name)
406
406
  exists?("/#{template_endpoint}/#{name}")
407
407
  end
408
408
 
409
- def template_put(name, template)
409
+ def template_put(template_endpoint, name, template)
410
410
  path = "#{template_endpoint}/#{name}"
411
411
  logger.info("Installing Elasticsearch template", name: name)
412
412
  @pool.put(path, nil, LogStash::Json.dump(template))
413
413
  end
414
414
 
415
- def template_endpoint
416
- maximum_seen_major_version < 8 ? '_template' : '_index_template'
417
- end
418
-
419
415
  # ILM methods
420
416
 
421
417
  # check whether rollover alias already exists
@@ -1,8 +1,20 @@
1
1
  module LogStash; module Outputs; class ElasticSearch
2
2
  class TemplateManager
3
+ LEGACY_TEMPLATE_ENDPOINT = '_template'.freeze
4
+ INDEX_TEMPLATE_ENDPOINT = '_index_template'.freeze
5
+
3
6
  # To be mixed into the elasticsearch plugin base
4
7
  def self.install_template(plugin)
5
8
  return unless plugin.manage_template
9
+
10
+ if plugin.maximum_seen_major_version < 8 && plugin.template_api == 'auto'
11
+ plugin.logger.warn("`template_api => auto` resolved to `legacy` since we are connected to " + "Elasticsearch #{plugin.maximum_seen_major_version}, " +
12
+ "but will resolve to `composable` the first time it connects to Elasticsearch 8+. " +
13
+ "We recommend either setting `template_api => legacy` to continue providing legacy-style templates, " +
14
+ "or migrating your template to the composable style and setting `template_api => composable`. " +
15
+ "The legacy template API is slated for removal in Elasticsearch 9.")
16
+ end
17
+
6
18
  if plugin.template
7
19
  plugin.logger.info("Using mapping template from", :path => plugin.template)
8
20
  template = read_template_file(plugin.template)
@@ -14,7 +26,7 @@ module LogStash; module Outputs; class ElasticSearch
14
26
 
15
27
  add_ilm_settings_to_template(plugin, template) if plugin.ilm_in_use?
16
28
  plugin.logger.debug("Attempting to install template", template: template)
17
- install(plugin.client, template_name(plugin), template, plugin.template_overwrite)
29
+ install(plugin.client, template_endpoint(plugin), template_name(plugin), template, plugin.template_overwrite)
18
30
  end
19
31
 
20
32
  private
@@ -25,8 +37,8 @@ module LogStash; module Outputs; class ElasticSearch
25
37
  fail "Failed to load default template for Elasticsearch v#{es_major_version} with ECS #{ecs_compatibility}; caused by: #{e.inspect}"
26
38
  end
27
39
 
28
- def self.install(client, template_name, template, template_overwrite)
29
- client.template_install(template_name, template, template_overwrite)
40
+ def self.install(client, template_endpoint, template_name, template, template_overwrite)
41
+ client.template_install(template_endpoint, template_name, template, template_overwrite)
30
42
  end
31
43
 
32
44
  def self.add_ilm_settings_to_template(plugin, template)
@@ -63,5 +75,16 @@ module LogStash; module Outputs; class ElasticSearch
63
75
  template_data = ::IO.read(template_path)
64
76
  LogStash::Json.load(template_data)
65
77
  end
78
+
79
+ def self.template_endpoint(plugin)
80
+ if plugin.template_api == 'auto'
81
+ plugin.maximum_seen_major_version < 8 ? LEGACY_TEMPLATE_ENDPOINT : INDEX_TEMPLATE_ENDPOINT
82
+ elsif plugin.template_api.to_s == 'legacy'
83
+ LEGACY_TEMPLATE_ENDPOINT
84
+ else
85
+ INDEX_TEMPLATE_ENDPOINT
86
+ end
87
+ end
88
+
66
89
  end
67
90
  end end end
@@ -185,6 +185,11 @@ class LogStash::Outputs::ElasticSearch < LogStash::Outputs::Base
185
185
  # the "logstash" template (i.e. removing all customized settings)
186
186
  config :template_overwrite, :validate => :boolean, :default => false
187
187
 
188
+ # Flag for enabling legacy template api for Elasticsearch 8
189
+ # Default auto will use index template api for Elasticsearch 8 and use legacy api for 7
190
+ # Set to legacy to use legacy template api
191
+ config :template_api, :validate => ['auto', 'legacy', 'composable'], :default => 'auto'
192
+
188
193
  # The version to use for indexing. Use sprintf syntax like `%{my_version}` to use a field value here.
189
194
  # See https://www.elastic.co/blog/elasticsearch-versioning-support.
190
195
  config :version, :validate => :string
@@ -23,10 +23,14 @@ module LogStash; module PluginMixins; module ElasticSearch
23
23
  # because they must be executed prior to building the client and logstash
24
24
  # monitoring and management rely on directly calling build_client
25
25
  # see https://github.com/logstash-plugins/logstash-output-elasticsearch/pull/934#pullrequestreview-396203307
26
- validate_authentication
27
26
  fill_hosts_from_cloud_id
27
+ validate_authentication
28
+
28
29
  setup_hosts
29
30
 
31
+
32
+ params['ssl'] = effectively_ssl? unless params.include?('ssl')
33
+
30
34
  # inject the TrustStrategy from CATrustedFingerprintSupport
31
35
  if trust_strategy_for_ca_trusted_fingerprint
32
36
  params["ssl_trust_strategy"] = trust_strategy_for_ca_trusted_fingerprint
@@ -49,7 +53,7 @@ module LogStash; module PluginMixins; module ElasticSearch
49
53
  raise LogStash::ConfigurationError, 'Multiple authentication options are specified, please only use one of user/password, cloud_auth or api_key'
50
54
  end
51
55
 
52
- if @api_key && @api_key.value && @ssl != true
56
+ if @api_key && @api_key.value && !effectively_ssl?
53
57
  raise(LogStash::ConfigurationError, "Using api_key authentication requires SSL/TLS secured communication using the `ssl => true` option")
54
58
  end
55
59
 
@@ -69,6 +73,15 @@ module LogStash; module PluginMixins; module ElasticSearch
69
73
  end
70
74
  end
71
75
 
76
+ def effectively_ssl?
77
+ return @ssl unless @ssl.nil?
78
+
79
+ hosts = Array(@hosts)
80
+ return false if hosts.nil? || hosts.empty?
81
+
82
+ hosts.all? { |host| host && host.scheme == "https" }
83
+ end
84
+
72
85
  def hosts_default?(hosts)
73
86
  # NOTE: would be nice if pipeline allowed us a clean way to detect a config default :
74
87
  hosts.is_a?(Array) && hosts.size == 1 && hosts.first.equal?(LogStash::PluginMixins::ElasticSearch::APIConfigs::DEFAULT_HOST)
@@ -208,12 +221,12 @@ module LogStash; module PluginMixins; module ElasticSearch
208
221
 
209
222
  def handle_dlq_response(message, action, status, response)
210
223
  _, action_params = action.event, [action[0], action[1], action[2]]
211
-
224
+
212
225
  # TODO: Change this to send a map with { :status => status, :action => action } in the future
213
226
  detailed_message = "#{message} status: #{status}, action: #{action_params}, response: #{response}"
214
-
227
+
215
228
  log_level = dig_value(response, 'index', 'error', 'type') == 'invalid_index_name_exception' ? :error : :warn
216
-
229
+
217
230
  handle_dlq_status(action.event, log_level, detailed_message)
218
231
  end
219
232
 
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'logstash-output-elasticsearch'
3
- s.version = '11.10.0'
3
+ s.version = '11.12.0'
4
4
  s.licenses = ['apache-2.0']
5
5
  s.summary = "Stores logs in Elasticsearch"
6
6
  s.description = "This gem is a Logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/logstash-plugin install gemname. This gem is not a stand-alone program"
@@ -140,27 +140,6 @@ describe LogStash::Outputs::ElasticSearch::HttpClient do
140
140
  end
141
141
  end
142
142
 
143
- describe "index template" do
144
- subject { described_class.new(base_options) }
145
- let(:template_name) { "logstash" }
146
- let(:template) { {} }
147
- let(:get_response) {
148
- double("response", :body => {})
149
- }
150
-
151
- it "should call composable index template in version 8+" do
152
- expect(subject).to receive(:maximum_seen_major_version).and_return(8)
153
- expect(subject.pool).to receive(:put).with("_index_template/#{template_name}", nil, anything).and_return(get_response)
154
- subject.template_put(template_name, template)
155
- end
156
-
157
- it "should call index template in version < 8" do
158
- expect(subject).to receive(:maximum_seen_major_version).and_return(7)
159
- expect(subject.pool).to receive(:put).with("_template/#{template_name}", nil, anything).and_return(get_response)
160
- subject.template_put(template_name, template)
161
- end
162
- end
163
-
164
143
  describe "join_bulk_responses" do
165
144
  subject { described_class.new(base_options) }
166
145
 
@@ -63,4 +63,53 @@ describe LogStash::Outputs::ElasticSearch::TemplateManager do
63
63
  end
64
64
  end
65
65
  end
66
+
67
+ describe "template endpoint" do
68
+ describe "template_api => 'auto'" do
69
+ let(:plugin_settings) { {"manage_template" => true, "template_api" => 'auto'} }
70
+ let(:plugin) { LogStash::Outputs::ElasticSearch.new(plugin_settings) }
71
+
72
+ describe "in version 8+" do
73
+ it "should use index template API" do
74
+ expect(plugin).to receive(:maximum_seen_major_version).at_least(:once).and_return(8)
75
+ endpoint = described_class.template_endpoint(plugin)
76
+ expect(endpoint).to be_equal(LogStash::Outputs::ElasticSearch::TemplateManager::INDEX_TEMPLATE_ENDPOINT)
77
+ end
78
+ end
79
+
80
+ describe "in version < 8" do
81
+ it "should use legacy template API" do
82
+ expect(plugin).to receive(:maximum_seen_major_version).at_least(:once).and_return(7)
83
+ endpoint = described_class.template_endpoint(plugin)
84
+ expect(endpoint).to be_equal(LogStash::Outputs::ElasticSearch::TemplateManager::LEGACY_TEMPLATE_ENDPOINT)
85
+ end
86
+ end
87
+ end
88
+
89
+ describe "template_api => 'legacy'" do
90
+ let(:plugin_settings) { {"manage_template" => true, "template_api" => 'legacy'} }
91
+ let(:plugin) { LogStash::Outputs::ElasticSearch.new(plugin_settings) }
92
+
93
+ describe "in version 8+" do
94
+ it "should use legacy template API" do
95
+ expect(plugin).to receive(:maximum_seen_major_version).never
96
+ endpoint = described_class.template_endpoint(plugin)
97
+ expect(endpoint).to be_equal(LogStash::Outputs::ElasticSearch::TemplateManager::LEGACY_TEMPLATE_ENDPOINT)
98
+ end
99
+ end
100
+ end
101
+
102
+ describe "template_api => 'composable'" do
103
+ let(:plugin_settings) { {"manage_template" => true, "template_api" => 'composable'} }
104
+ let(:plugin) { LogStash::Outputs::ElasticSearch.new(plugin_settings) }
105
+
106
+ describe "in version 8+" do
107
+ it "should use legacy template API" do
108
+ expect(plugin).to receive(:maximum_seen_major_version).never
109
+ endpoint = described_class.template_endpoint(plugin)
110
+ expect(endpoint).to be_equal(LogStash::Outputs::ElasticSearch::TemplateManager:: INDEX_TEMPLATE_ENDPOINT)
111
+ end
112
+ end
113
+ end
114
+ end
66
115
  end
@@ -17,12 +17,17 @@ describe LogStash::Outputs::ElasticSearch do
17
17
  allow_any_instance_of(LogStash::Outputs::ElasticSearch::HttpClient::Pool).to receive(:start)
18
18
  end
19
19
 
20
+ let(:spy_http_client_builder!) do
21
+ allow(described_class::HttpClientBuilder).to receive(:build).with(any_args).and_call_original
22
+ end
23
+
20
24
  let(:after_successful_connection_thread_mock) do
21
25
  double('after_successful_connection_thread', value: true)
22
26
  end
23
27
 
24
28
  before(:each) do
25
29
  if do_register
30
+ spy_http_client_builder!
26
31
  stub_http_client_pool!
27
32
 
28
33
  allow(subject).to receive(:finish_register) # stub-out thread completion (to avoid error log entries)
@@ -1003,29 +1008,88 @@ describe LogStash::Outputs::ElasticSearch do
1003
1008
  let(:api_key) { "some_id:some_api_key" }
1004
1009
  let(:base64_api_key) { "ApiKey c29tZV9pZDpzb21lX2FwaV9rZXk=" }
1005
1010
 
1006
- context "when set without ssl" do
1011
+ shared_examples 'secure api-key authenticated client' do
1012
+ let(:do_register) { true }
1013
+
1014
+ it 'adds the appropriate Authorization header to the manticore client' do
1015
+ expect(manticore_options[:headers]).to eq({ "Authorization" => base64_api_key })
1016
+ end
1017
+ it 'is provides ssl=>true to the http client builder' do; aggregate_failures do
1018
+ expect(described_class::HttpClientBuilder).to have_received(:build).with(anything, anything, hash_including('ssl'=>true))
1019
+ end; end
1020
+ end
1021
+
1022
+ context "when set without ssl => true" do
1007
1023
  let(:do_register) { false } # this is what we want to test, so we disable the before(:each) call
1008
1024
  let(:options) { { "api_key" => api_key } }
1009
1025
 
1010
1026
  it "should raise a configuration error" do
1011
1027
  expect { subject.register }.to raise_error LogStash::ConfigurationError, /requires SSL\/TLS/
1012
1028
  end
1029
+
1030
+ context 'with cloud_id' do
1031
+ let(:sample_cloud_id) { 'sample:dXMtY2VudHJhbDEuZ2NwLmNsb3VkLmVzLmlvJGFjMzFlYmI5MDI0MTc3MzE1NzA0M2MzNGZkMjZmZDQ2OjkyNDMkYTRjMDYyMzBlNDhjOGZjZTdiZTg4YTA3NGEzYmIzZTA6OTI0NA==' }
1032
+ let(:options) { super().merge('cloud_id' => sample_cloud_id) }
1033
+
1034
+ it_behaves_like 'secure api-key authenticated client'
1035
+ end
1013
1036
  end
1014
1037
 
1015
- context "when set without ssl but with a https host" do
1038
+ context "when set without ssl specified but with an https host" do
1016
1039
  let(:do_register) { false } # this is what we want to test, so we disable the before(:each) call
1017
1040
  let(:options) { { "hosts" => ["https://some.host.com"], "api_key" => api_key } }
1018
1041
 
1042
+ it_behaves_like 'secure api-key authenticated client'
1043
+ end
1044
+
1045
+ context "when set without ssl specified but with an http host`" do
1046
+ let(:do_register) { false } # this is what we want to test, so we disable the before(:each) call
1047
+ let(:options) { { "hosts" => ["http://some.host.com"], "api_key" => api_key } }
1048
+
1049
+ it "should raise a configuration error" do
1050
+ expect { subject.register }.to raise_error LogStash::ConfigurationError, /requires SSL\/TLS/
1051
+ end
1052
+ end
1053
+
1054
+ context "when set with `ssl => false`" do
1055
+ let(:do_register) { false } # this is what we want to test, so we disable the before(:each) call
1056
+ let(:options) { { "ssl" => "false", "api_key" => api_key } }
1057
+
1019
1058
  it "should raise a configuration error" do
1020
1059
  expect { subject.register }.to raise_error LogStash::ConfigurationError, /requires SSL\/TLS/
1021
1060
  end
1022
1061
  end
1023
1062
 
1024
1063
  context "when set" do
1025
- let(:options) { { "ssl" => true, "api_key" => ::LogStash::Util::Password.new(api_key) } }
1064
+ let(:options) { { "api_key" => ::LogStash::Util::Password.new(api_key) } }
1026
1065
 
1027
- it "should use the custom headers in the adapter options" do
1028
- expect(manticore_options[:headers]).to eq({ "Authorization" => base64_api_key })
1066
+ context "with ssl => true" do
1067
+ let(:options) { super().merge("ssl" => true) }
1068
+ it_behaves_like 'secure api-key authenticated client'
1069
+ end
1070
+
1071
+ context "with ssl => false" do
1072
+ let(:options) { super().merge("ssl" => "false") }
1073
+
1074
+ let(:do_register) { false } # this is what we want to test, so we disable the before(:each) call
1075
+ it "should raise a configuration error" do
1076
+ expect { subject.register }.to raise_error LogStash::ConfigurationError, /requires SSL\/TLS/
1077
+ end
1078
+ end
1079
+
1080
+ context "without ssl specified" do
1081
+ context "with an https host" do
1082
+ let(:options) { super().merge("hosts" => ["https://some.host.com"]) }
1083
+ it_behaves_like 'secure api-key authenticated client'
1084
+ end
1085
+ context "with an http host`" do
1086
+ let(:do_register) { false } # this is what we want to test, so we disable the before(:each) call
1087
+ let(:options) { { "hosts" => ["http://some.host.com"], "api_key" => api_key } }
1088
+
1089
+ it "should raise a configuration error" do
1090
+ expect { subject.register }.to raise_error LogStash::ConfigurationError, /requires SSL\/TLS/
1091
+ end
1092
+ end
1029
1093
  end
1030
1094
  end
1031
1095
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-output-elasticsearch
3
3
  version: !ruby/object:Gem::Version
4
- version: 11.10.0
4
+ version: 11.12.0
5
5
  platform: java
6
6
  authors:
7
7
  - Elastic
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-10-10 00:00:00.000000000 Z
11
+ date: 2022-10-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement