logstash-output-elasticsearch 11.3.1-java → 11.4.1-java

Sign up to get free protection for your applications and to get access to all the features.
Files changed (32) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +19 -2
  3. data/Gemfile +2 -1
  4. data/docs/index.asciidoc +3 -7
  5. data/lib/logstash/outputs/elasticsearch/data_stream_support.rb +1 -1
  6. data/lib/logstash/outputs/elasticsearch/http_client/manticore_adapter.rb +40 -16
  7. data/lib/logstash/outputs/elasticsearch/http_client/pool.rb +5 -9
  8. data/lib/logstash/outputs/elasticsearch/http_client.rb +1 -2
  9. data/lib/logstash/outputs/elasticsearch/http_client_builder.rb +3 -6
  10. data/lib/logstash/outputs/elasticsearch/templates/ecs-v1/elasticsearch-7x.json +2196 -288
  11. data/lib/logstash/outputs/elasticsearch/templates/ecs-v1/elasticsearch-8x.json +2196 -288
  12. data/logstash-output-elasticsearch.gemspec +2 -2
  13. data/spec/es_spec_helper.rb +5 -1
  14. data/spec/fixtures/test_certs/{ca/ca.crt → ca.crt} +0 -0
  15. data/spec/fixtures/test_certs/{ca/ca.key → ca.key} +0 -0
  16. data/spec/fixtures/test_certs/test.p12 +0 -0
  17. data/spec/fixtures/test_certs/test_invalid.crt +36 -0
  18. data/spec/fixtures/test_certs/test_invalid.key +51 -0
  19. data/spec/fixtures/test_certs/test_invalid.p12 +0 -0
  20. data/spec/fixtures/test_certs/test_self_signed.crt +32 -0
  21. data/spec/fixtures/test_certs/test_self_signed.key +54 -0
  22. data/spec/fixtures/test_certs/test_self_signed.p12 +0 -0
  23. data/spec/integration/outputs/ilm_spec.rb +2 -1
  24. data/spec/integration/outputs/index_spec.rb +87 -43
  25. data/spec/integration/outputs/ingest_pipeline_spec.rb +2 -1
  26. data/spec/integration/outputs/no_es_on_startup_spec.rb +12 -6
  27. data/spec/integration/outputs/retry_spec.rb +2 -1
  28. data/spec/integration/outputs/sniffer_spec.rb +1 -1
  29. data/spec/unit/outputs/elasticsearch/http_client/manticore_adapter_spec.rb +6 -5
  30. data/spec/unit/outputs/elasticsearch/http_client/pool_spec.rb +1 -1
  31. data/spec/unit/outputs/elasticsearch_ssl_spec.rb +1 -1
  32. metadata +22 -8
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'logstash-output-elasticsearch'
3
- s.version = '11.3.1'
3
+ s.version = '11.4.1'
4
4
 
5
5
  s.licenses = ['apache-2.0']
6
6
  s.summary = "Stores logs in Elasticsearch"
@@ -21,7 +21,7 @@ Gem::Specification.new do |s|
21
21
  # Special flag to let us know this is actually a logstash plugin
22
22
  s.metadata = { "logstash_plugin" => "true", "logstash_group" => "output" }
23
23
 
24
- s.add_runtime_dependency "manticore", '>= 0.7.1', '< 1.0.0'
24
+ s.add_runtime_dependency "manticore", '>= 0.8.0', '< 1.0.0'
25
25
  s.add_runtime_dependency 'stud', ['>= 0.0.17', '~> 0.0']
26
26
  s.add_runtime_dependency "logstash-core-plugin-api", ">= 1.60", "<= 2.99"
27
27
  s.add_runtime_dependency 'logstash-mixin-ecs_compatibility_support', '~>1.0'
@@ -59,7 +59,11 @@ module ESHelper
59
59
  end
60
60
 
61
61
  def self.es_version
62
- RSpec.configuration.filter[:es_version] || ENV['ES_VERSION'] || ENV['ELASTIC_STACK_VERSION']
62
+ [
63
+ nilify(RSpec.configuration.filter[:es_version]),
64
+ nilify(ENV['ES_VERSION']),
65
+ nilify(ENV['ELASTIC_STACK_VERSION']),
66
+ ].compact.first
63
67
  end
64
68
 
65
69
  RSpec::Matchers.define :have_hits do |expected|
File without changes
File without changes
Binary file
@@ -0,0 +1,36 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIGVzCCBD+gAwIBAgIBAzANBgkqhkiG9w0BAQsFADBMMQswCQYDVQQGEwJQVDEL
3
+ MAkGA1UECAwCTkExDzANBgNVBAcMBkxpc2JvbjEOMAwGA1UECgwFTXlMYWIxDzAN
4
+ BgNVBAMMBlJvb3RDQTAeFw0yMjAxMTgwNTA0MDZaFw0yNTAxMTgwNTA0MDZaMFIx
5
+ CzAJBgNVBAYTAkxTMQswCQYDVQQIDAJOQTESMBAGA1UEBwwJRVMgT3V0cHV0MREw
6
+ DwYDVQQKDAhMb2dzdGFzaDEPMA0GA1UEAwwGc2VydmVyMIICIjANBgkqhkiG9w0B
7
+ AQEFAAOCAg8AMIICCgKCAgEAunKYkXLoAC14bdIveIZlImtrp2rkQ5Ugz/vGVWFJ
8
+ YatJh9x5dmqJQeO1gpGayNedbwDI/50CTDoqwCz4aunMKpgQdKHryjeuR1zqElhC
9
+ QLZtAkzM/pCkTnMYvXDfJrBZcSWP+ddlkH8ffmN0Fxf3LsKln+K5A4hASrVGSKYw
10
+ +eNDV7yIxdhthqD0xNRuw/j3lSLxwBbwKOs7Mh+xmdMa4vs3AKJvG9LdTm7xdHtD
11
+ 4rkQAA7TRQOR5pl+eDICRnNkGVzgPMdf2kM94ZU7TI1zUMqV1uPNE05Vps14kuWq
12
+ Z84r8ecExCo6mQxrQ1M7Y2UBGa5NM9kb+UP1famANadEOlS5kAGEtcpHnh1WK+98
13
+ 4mxtMQJHIOOASde/coA3mZ4Oa8Z0Hzy3fsNvD9ieLo2V8yQN9UAQshbB1BEuOaRr
14
+ 9wQKT4jlnCinZ4UU6FpEJ7NIiZ9wBKqNbN8iySPYmRihOj6BDuEQB/W/K54KQB5n
15
+ ctT6MsoTyTFgqe3Zn0owMrGCsSDJsvUcaAz7ZsnesoiFtKsYyRZAWJVcLO5R0FxZ
16
+ YjCGk9stspLT1cqmJ8VbMLhiW7T4ZP+sZj3B+aSZWnS5r78I4G9sB9swDMJMjNRP
17
+ O15zvQKIRluULhm9WhPET78Iy9Qg1zoiGdnzxBSZ9Sh8+yb57cCRD4da7eLne4Sb
18
+ uU8CAwEAAaOCATwwggE4MAkGA1UdEwQCMAAwEQYJYIZIAYb4QgEBBAQDAgZAMDMG
19
+ CWCGSAGG+EIBDQQmFiRPcGVuU1NMIEdlbmVyYXRlZCBTZXJ2ZXIgQ2VydGlmaWNh
20
+ dGUwHQYDVR0OBBYEFPqrHNv/8Io82JmzcNWBdaRmftvdMIGIBgNVHSMEgYAwfoAU
21
+ oVp0nHjq6mJ/UGuFhnSK7yjbPyuhUKROMEwxCzAJBgNVBAYTAlBUMQswCQYDVQQI
22
+ DAJOQTEPMA0GA1UEBwwGTGlzYm9uMQ4wDAYDVQQKDAVNeUxhYjEPMA0GA1UEAwwG
23
+ Um9vdENBghRT5Ucn3UmwssDUYlgL5RyE1/DeETAOBgNVHQ8BAf8EBAMCBaAwEwYD
24
+ VR0lBAwwCgYIKwYBBQUHAwEwFAYDVR0RBA0wC4IJbG9jYWxob3N0MA0GCSqGSIb3
25
+ DQEBCwUAA4ICAQDHt/3rR3rzESrZNNLIU+jbW6Vsfcr22mghhbdoU+pnkZB8Spzp
26
+ AUqgmSlOOuz/3OMLPP64sj+gm9kiU177uBoqJUsnaAaV0LNvp+EIWIdskw0OGU2X
27
+ uOslZK5EdYGqGgRlElnohPRXcFXwsh//QJYDmNnnC3Fk+ZjZQKjH4q4Ur8ECPqit
28
+ wVnRXqlKfLRjWWzvTgoPTAN42KHP2R7xxIHdV+cXH6riLLvtkWcGJbfoQaSuNOvc
29
+ GAIoQc2YmIiVsGZ82n9Ww2zO9ByqF+KfGgIFDTCp1CzpfLKLLhzMv/p4n2zf/BOb
30
+ MCJJfljOewqmzMo48Wj2vk/46IAGl5uA6PnDwa0LNgomA9c6loDcYEOsCr69xL+D
31
+ 7GL/Jzm9HaTE97lRGVwoKBG0hKabFEfOueKB6Oab8bVTuY99kbbRaFZs7I9QYVQy
32
+ eY38YJv5kN3yAjFclO39R8cAngqecbQDZ7xTl7dF7CvrpAoNI8olL01Kjy/+vfX4
33
+ WAMO9YONnVPwwB05voRZfKErVKi9iwAWa5m9DdtE5QdfjcsXZkITW2CF2skSgujw
34
+ BS8P8Z+HccKa+qEPQM+eBWjrlzlx/XC2iXKE1w4zZL0wRgY7+W4dIMgJmPmV/Gue
35
+ 5wSnZtMueBdyKy+xFrJcszoakKg/JfSesKfnVLC+60EL2FQqbrGCEiTp2A==
36
+ -----END CERTIFICATE-----
@@ -0,0 +1,51 @@
1
+ -----BEGIN RSA PRIVATE KEY-----
2
+ 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
51
+ -----END RSA PRIVATE KEY-----
@@ -0,0 +1,32 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ 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
31
+ 8X4SIgxrmMAlKIc=
32
+ -----END CERTIFICATE-----
@@ -0,0 +1,54 @@
1
+ -----BEGIN ENCRYPTED PRIVATE KEY-----
2
+ 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
53
+ q/eu/hnuc3qa580zbpgcAg==
54
+ -----END ENCRYPTED PRIVATE KEY-----
@@ -236,7 +236,8 @@ describe 'Elasticsearch has index lifecycle management enabled', :integration =>
236
236
  let (:settings) {
237
237
  {
238
238
  "ilm_enabled" => ilm_enabled,
239
- "hosts" => "#{get_host_port()}"
239
+ "hosts" => "#{get_host_port()}",
240
+ "ecs_compatibility" => "disabled", # specs are tightly tied to non-ECS defaults
240
241
  }
241
242
  }
242
243
  let (:small_max_doc_policy) { max_docs_policy(3) }
@@ -46,7 +46,8 @@ describe "TARGET_BULK_BYTES", :integration => true do
46
46
  end
47
47
 
48
48
  describe "indexing" do
49
- let(:event) { LogStash::Event.new("message" => "Hello World!", "type" => type) }
49
+ let(:message) { "Hello from #{__FILE__}" }
50
+ let(:event) { LogStash::Event.new("message" => message, "type" => type) }
50
51
  let(:index) { 10.times.collect { rand(10).to_s }.join("") }
51
52
  let(:type) { ESHelper.es_version_satisfies?("< 7") ? "doc" : "_doc" }
52
53
  let(:event_count) { 1 + rand(2) }
@@ -55,10 +56,22 @@ describe "indexing" do
55
56
  subject { LogStash::Outputs::ElasticSearch.new(config) }
56
57
 
57
58
  let(:es_url) { "http://#{get_host_port}" }
58
- let(:index_url) {"#{es_url}/#{index}"}
59
- let(:http_client_options) { {} }
60
- let(:http_client) do
61
- Manticore::Client.new(http_client_options)
59
+ let(:index_url) { "#{es_url}/#{index}" }
60
+
61
+ let(:curl_opts) { nil }
62
+
63
+ def curl_and_get_json_response(url, method: :get); require 'open3'
64
+ begin
65
+ stdout, status = Open3.capture2("curl #{curl_opts} -X #{method.to_s.upcase} -k #{url}")
66
+ rescue Errno::ENOENT
67
+ fail "curl not available, make sure curl binary is installed and available on $PATH"
68
+ end
69
+
70
+ if status.success?
71
+ LogStash::Json.load(stdout)
72
+ else
73
+ fail "curl failed: #{status}\n #{stdout}"
74
+ end
62
75
  end
63
76
 
64
77
  before do
@@ -70,16 +83,16 @@ describe "indexing" do
70
83
  it "ships events" do
71
84
  subject.multi_receive(events)
72
85
 
73
- http_client.post("#{es_url}/_refresh").call
86
+ curl_and_get_json_response "#{es_url}/_refresh", method: :post
74
87
 
75
- response = http_client.get("#{index_url}/_count?q=*")
76
- result = LogStash::Json.load(response.body)
88
+ result = curl_and_get_json_response "#{index_url}/_count?q=*"
77
89
  cur_count = result["count"]
78
90
  expect(cur_count).to eq(event_count)
79
91
 
80
- response = http_client.get("#{index_url}/_search?q=*&size=1000")
81
- result = LogStash::Json.load(response.body)
92
+ result = curl_and_get_json_response "#{index_url}/_search?q=*&size=1000"
82
93
  result["hits"]["hits"].each do |doc|
94
+ expect(doc["_source"]["message"]).to eq(message)
95
+
83
96
  if ESHelper.es_version_satisfies?("< 8")
84
97
  expect(doc["_type"]).to eq(type)
85
98
  else
@@ -132,7 +145,7 @@ describe "indexing" do
132
145
  describe "a secured indexer", :secure_integration => true do
133
146
  let(:user) { "simpleuser" }
134
147
  let(:password) { "abc123" }
135
- let(:cacert) { "spec/fixtures/test_certs/test.crt" }
148
+ let(:cacert) { "spec/fixtures/test_certs/ca.crt" }
136
149
  let(:es_url) {"https://elasticsearch:9200"}
137
150
  let(:config) do
138
151
  {
@@ -140,42 +153,73 @@ describe "indexing" do
140
153
  "user" => user,
141
154
  "password" => password,
142
155
  "ssl" => true,
143
- "cacert" => "spec/fixtures/test_certs/test.crt",
156
+ "cacert" => cacert,
144
157
  "index" => index
145
158
  }
146
159
  end
147
- let(:http_client_options) do
148
- {
149
- :auth => {
150
- :user => user,
151
- :password => password
152
- },
153
- :ssl => {
154
- :enabled => true,
155
- :ca_file => cacert
156
- }
157
- }
158
- end
159
- it_behaves_like("an indexer", true)
160
-
161
- describe "with a password requiring escaping" do
162
- let(:user) { "f@ncyuser" }
163
- let(:password) { "ab%12#" }
164
-
165
- include_examples("an indexer", true)
166
- end
167
-
168
- describe "with a user/password requiring escaping in the URL" do
169
- let(:config) do
170
- {
171
- "hosts" => ["https://#{CGI.escape(user)}:#{CGI.escape(password)}@elasticsearch:9200"],
172
- "ssl" => true,
173
- "cacert" => "spec/fixtures/test_certs/test.crt",
174
- "index" => index
175
- }
160
+
161
+ let(:curl_opts) { "-u #{user}:#{password}" }
162
+
163
+ if ENV['ES_SSL_KEY_INVALID'] == 'true' # test_invalid.crt (configured in ES) has SAN: DNS:localhost
164
+ # javax.net.ssl.SSLPeerUnverifiedException: Host name 'elasticsearch' does not match the certificate subject ...
165
+
166
+ context "when no keystore nor ca cert set and verification is disabled" do
167
+ let(:config) do
168
+ super().tap { |config| config.delete('cacert') }.merge('ssl_certificate_verification' => false)
169
+ end
170
+
171
+ include_examples("an indexer", true)
172
+ end
173
+
174
+ context "when keystore is set and verification is disabled" do
175
+ let(:config) do
176
+ super().merge(
177
+ 'ssl_certificate_verification' => false,
178
+ 'keystore' => 'spec/fixtures/test_certs/test.p12',
179
+ 'keystore_password' => '1234567890'
180
+ )
181
+ end
182
+
183
+ include_examples("an indexer", true)
184
+ end
185
+
186
+ context "when keystore has self-signed cert and verification is disabled" do
187
+ let(:config) do
188
+ super().tap { |config| config.delete('cacert') }.merge(
189
+ 'ssl_certificate_verification' => false,
190
+ 'keystore' => 'spec/fixtures/test_certs/test_self_signed.p12',
191
+ 'keystore_password' => '1234567890'
192
+ )
193
+ end
194
+
195
+ include_examples("an indexer", true)
196
+ end
197
+
198
+ else
199
+
200
+ it_behaves_like("an indexer", true)
201
+
202
+ describe "with a password requiring escaping" do
203
+ let(:user) { "f@ncyuser" }
204
+ let(:password) { "ab%12#" }
205
+
206
+ include_examples("an indexer", true)
176
207
  end
177
-
178
- include_examples("an indexer", true)
208
+
209
+ describe "with a user/password requiring escaping in the URL" do
210
+ let(:config) do
211
+ {
212
+ "hosts" => ["https://#{CGI.escape(user)}:#{CGI.escape(password)}@elasticsearch:9200"],
213
+ "ssl" => true,
214
+ "cacert" => "spec/fixtures/test_certs/test.crt",
215
+ "index" => index
216
+ }
217
+ end
218
+
219
+ include_examples("an indexer", true)
220
+ end
221
+
179
222
  end
223
+
180
224
  end
181
225
  end
@@ -6,7 +6,8 @@ describe "Ingest pipeline execution behavior", :integration => true do
6
6
  settings = {
7
7
  "hosts" => "#{get_host_port()}",
8
8
  "pipeline" => "apache-logs",
9
- "data_stream" => 'false'
9
+ "data_stream" => 'false',
10
+ "ecs_compatibility" => "disabled", # specs are tightly tied to non-ECS defaults
10
11
  }
11
12
  next LogStash::Outputs::ElasticSearch.new(settings)
12
13
  end
@@ -12,13 +12,13 @@ describe "elasticsearch is down on startup", :integration => true do
12
12
  "template_overwrite" => true,
13
13
  "hosts" => get_host_port(),
14
14
  "retry_max_interval" => 64,
15
- "retry_initial_interval" => 2
15
+ "retry_initial_interval" => 2,
16
+ 'ecs_compatibility' => 'disabled'
16
17
  })
17
18
  }
18
19
 
19
20
  before :each do
20
21
  # Delete all templates first.
21
- require "elasticsearch"
22
22
  allow(Stud).to receive(:stoppable_sleep)
23
23
 
24
24
  # Clean ES of data before we start.
@@ -33,7 +33,9 @@ describe "elasticsearch is down on startup", :integration => true do
33
33
  end
34
34
 
35
35
  it 'should ingest events when Elasticsearch recovers before documents are sent' do
36
- allow_any_instance_of(LogStash::Outputs::ElasticSearch::HttpClient::Pool).to receive(:get_es_version).and_raise(::LogStash::Outputs::ElasticSearch::HttpClient::Pool::HostUnreachableError.new(StandardError.new, "big fail"))
36
+ allow_any_instance_of(LogStash::Outputs::ElasticSearch::HttpClient::Pool).to receive(:get_es_version).and_raise(
37
+ ::LogStash::Outputs::ElasticSearch::HttpClient::Pool::HostUnreachableError.new StandardError.new("TEST: before docs are sent"), 'http://test.es/'
38
+ )
37
39
  subject.register
38
40
  allow_any_instance_of(LogStash::Outputs::ElasticSearch::HttpClient::Pool).to receive(:get_es_version).and_return(ESHelper.es_version)
39
41
  subject.multi_receive([event1, event2])
@@ -43,7 +45,9 @@ describe "elasticsearch is down on startup", :integration => true do
43
45
  end
44
46
 
45
47
  it 'should ingest events when Elasticsearch recovers after documents are sent' do
46
- allow_any_instance_of(LogStash::Outputs::ElasticSearch::HttpClient::Pool).to receive(:get_es_version).and_raise(::LogStash::Outputs::ElasticSearch::HttpClient::Pool::HostUnreachableError.new(StandardError.new, "big fail"))
48
+ allow_any_instance_of(LogStash::Outputs::ElasticSearch::HttpClient::Pool).to receive(:get_es_version).and_raise(
49
+ ::LogStash::Outputs::ElasticSearch::HttpClient::Pool::HostUnreachableError.new StandardError.new("TEST: after docs are sent"), 'http://test.es/'
50
+ )
47
51
  subject.register
48
52
  Thread.new do
49
53
  sleep 4
@@ -56,11 +60,13 @@ describe "elasticsearch is down on startup", :integration => true do
56
60
  end
57
61
 
58
62
  it 'should get cluster_uuid when Elasticsearch recovers from license check failure' do
59
- allow_any_instance_of(LogStash::Outputs::ElasticSearch::HttpClient::Pool).to receive(:get_license).with(instance_of(LogStash::Util::SafeURI)).and_raise(::LogStash::Outputs::ElasticSearch::HttpClient::Pool::HostUnreachableError.new(StandardError.new, "big fail"))
63
+ allow_any_instance_of(LogStash::Outputs::ElasticSearch::HttpClient::Pool).to receive(:get_license).and_raise(
64
+ ::LogStash::Outputs::ElasticSearch::HttpClient::Pool::HostUnreachableError.new StandardError.new("TEST: docs are sent"), 'http://test.es/_license'
65
+ )
60
66
  subject.register
61
67
  Thread.new do
62
68
  sleep 4
63
- allow_any_instance_of(LogStash::Outputs::ElasticSearch::HttpClient::Pool).to receive(:get_license).with(instance_of(LogStash::Util::SafeURI)).and_call_original
69
+ allow_any_instance_of(LogStash::Outputs::ElasticSearch::HttpClient::Pool).to receive(:get_license).and_call_original
64
70
  end
65
71
  subject.multi_receive([event1, event2])
66
72
  @es.indices.refresh
@@ -45,7 +45,8 @@ describe "failures in bulk class expected behavior", :integration => true do
45
45
  "template_overwrite" => true,
46
46
  "hosts" => get_host_port(),
47
47
  "retry_max_interval" => 64,
48
- "retry_initial_interval" => 2
48
+ "retry_initial_interval" => 2,
49
+ "ecs_compatibility" => "disabled", # specs are tightly tied to non-ECS defaults
49
50
  }
50
51
  next LogStash::Outputs::ElasticSearch.new(settings)
51
52
  end
@@ -5,7 +5,7 @@ require "socket"
5
5
 
6
6
  describe "pool sniffer", :integration => true do
7
7
  let(:logger) { Cabin::Channel.get }
8
- let(:adapter) { LogStash::Outputs::ElasticSearch::HttpClient::ManticoreAdapter.new(logger) }
8
+ let(:adapter) { LogStash::Outputs::ElasticSearch::HttpClient::ManticoreAdapter.new(logger, {}) }
9
9
  let(:es_host) { get_host_port.split(":").first }
10
10
  let(:es_port) { get_host_port.split(":").last }
11
11
  let(:es_ip) { IPSocket.getaddress(es_host) }
@@ -10,11 +10,12 @@ describe LogStash::Outputs::ElasticSearch::HttpClient::ManticoreAdapter do
10
10
 
11
11
  it "should raise an exception if requests are issued after close" do
12
12
  subject.close
13
- expect { subject.perform_request(::LogStash::Util::SafeURI.new("http://localhost:9200"), :get, '/') }.to raise_error(::Manticore::ClientStoppedException)
14
- end
15
-
16
- it "should implement host unreachable exceptions" do
17
- expect(subject.host_unreachable_exceptions).to be_a(Array)
13
+ begin
14
+ subject.perform_request(::LogStash::Util::SafeURI.new("http://localhost:9200"), :get, '/')
15
+ fail 'expected to raise a HostUnreachableError'
16
+ rescue ::LogStash::Outputs::ElasticSearch::HttpClient::Pool::HostUnreachableError => e
17
+ expect( e.original_error ).to be_a ::Manticore::ClientStoppedException
18
+ end
18
19
  end
19
20
 
20
21
  describe "auth" do
@@ -4,7 +4,7 @@ require 'cabin'
4
4
 
5
5
  describe LogStash::Outputs::ElasticSearch::HttpClient::Pool do
6
6
  let(:logger) { Cabin::Channel.get }
7
- let(:adapter) { LogStash::Outputs::ElasticSearch::HttpClient::ManticoreAdapter.new(logger) }
7
+ let(:adapter) { LogStash::Outputs::ElasticSearch::HttpClient::ManticoreAdapter.new(logger, {}) }
8
8
  let(:initial_urls) { [::LogStash::Util::SafeURI.new("http://localhost:9200")] }
9
9
  let(:options) { {:resurrect_delay => 2, :url_normalizer => proc {|u| u}} } # Shorten the delay a bit to speed up tests
10
10
  let(:es_node_versions) { [ "0.0.0" ] }
@@ -33,7 +33,7 @@ describe "SSL option" do
33
33
 
34
34
  it "should pass the flag to the ES client" do
35
35
  expect(::Manticore::Client).to receive(:new) do |args|
36
- expect(args[:ssl]).to eq(:enabled => true, :verify => false)
36
+ expect(args[:ssl]).to eq(:enabled => true, :verify => :disable)
37
37
  end.and_return(manticore_double)
38
38
 
39
39
  subject.register
metadata CHANGED
@@ -1,21 +1,21 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-output-elasticsearch
3
3
  version: !ruby/object:Gem::Version
4
- version: 11.3.1
4
+ version: 11.4.1
5
5
  platform: java
6
6
  authors:
7
7
  - Elastic
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-11-05 00:00:00.000000000 Z
11
+ date: 2022-01-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement
15
15
  requirements:
16
16
  - - ">="
17
17
  - !ruby/object:Gem::Version
18
- version: 0.7.1
18
+ version: 0.8.0
19
19
  - - "<"
20
20
  - !ruby/object:Gem::Version
21
21
  version: 1.0.0
@@ -26,7 +26,7 @@ dependencies:
26
26
  requirements:
27
27
  - - ">="
28
28
  - !ruby/object:Gem::Version
29
- version: 0.7.1
29
+ version: 0.8.0
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
32
  version: 1.0.0
@@ -244,10 +244,17 @@ files:
244
244
  - spec/fixtures/template-with-policy-es6x.json
245
245
  - spec/fixtures/template-with-policy-es7x.json
246
246
  - spec/fixtures/template-with-policy-es8x.json
247
- - spec/fixtures/test_certs/ca/ca.crt
248
- - spec/fixtures/test_certs/ca/ca.key
247
+ - spec/fixtures/test_certs/ca.crt
248
+ - spec/fixtures/test_certs/ca.key
249
249
  - spec/fixtures/test_certs/test.crt
250
250
  - spec/fixtures/test_certs/test.key
251
+ - spec/fixtures/test_certs/test.p12
252
+ - spec/fixtures/test_certs/test_invalid.crt
253
+ - spec/fixtures/test_certs/test_invalid.key
254
+ - spec/fixtures/test_certs/test_invalid.p12
255
+ - spec/fixtures/test_certs/test_self_signed.crt
256
+ - spec/fixtures/test_certs/test_self_signed.key
257
+ - spec/fixtures/test_certs/test_self_signed.p12
251
258
  - spec/integration/outputs/compressed_indexing_spec.rb
252
259
  - spec/integration/outputs/create_spec.rb
253
260
  - spec/integration/outputs/data_stream_spec.rb
@@ -319,10 +326,17 @@ test_files:
319
326
  - spec/fixtures/template-with-policy-es6x.json
320
327
  - spec/fixtures/template-with-policy-es7x.json
321
328
  - spec/fixtures/template-with-policy-es8x.json
322
- - spec/fixtures/test_certs/ca/ca.crt
323
- - spec/fixtures/test_certs/ca/ca.key
329
+ - spec/fixtures/test_certs/ca.crt
330
+ - spec/fixtures/test_certs/ca.key
324
331
  - spec/fixtures/test_certs/test.crt
325
332
  - spec/fixtures/test_certs/test.key
333
+ - spec/fixtures/test_certs/test.p12
334
+ - spec/fixtures/test_certs/test_invalid.crt
335
+ - spec/fixtures/test_certs/test_invalid.key
336
+ - spec/fixtures/test_certs/test_invalid.p12
337
+ - spec/fixtures/test_certs/test_self_signed.crt
338
+ - spec/fixtures/test_certs/test_self_signed.key
339
+ - spec/fixtures/test_certs/test_self_signed.p12
326
340
  - spec/integration/outputs/compressed_indexing_spec.rb
327
341
  - spec/integration/outputs/create_spec.rb
328
342
  - spec/integration/outputs/data_stream_spec.rb