logstash-output-elasticsearch 11.22.15-java → 11.22.17-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: a0b7ec8d5dbede6389a4e59f97d8e98c812091e9f9a1f49ed11a443c4c7b4a6b
4
- data.tar.gz: e0a1b09ca555fed7cd9340ce843e837b3abb0ceb0d21a577d43a3b89462042cc
3
+ metadata.gz: d4bb66bdcf7a4f0d3557d0999e3c3737a1a75d8cb7fa26830339cf6e0e28b82d
4
+ data.tar.gz: 12bfde3746577a042a3ec3962f39b76e530a65a7cf34e856146e8b3fc2933495
5
5
  SHA512:
6
- metadata.gz: 14dd08f7aa74dee3c9cadb7ff96a86a0e65e4fcb425b1292749005faac2e7153a580ab6212dabb7664f1d83997404993ec1a2f0f9efdabd834aecd5447b728f8
7
- data.tar.gz: 1c21dd49841e4f05ddaca95e7a3f91bb9d7e9c3ee9887249ef2b365c3066db666645b3b508a173c2c9fa55256c906fa202068b2942646cac8e2cc1e3ab444b65
6
+ metadata.gz: 95d48b93014a46d8412add41d4e753ee1c0ef091f86ad2138825802bbaf416c5865abd7d8afa7df825361f2db010d0f5b189df4274991d02f4f67325ddab56fc
7
+ data.tar.gz: 607b5b63bc6a41067bd0d4a9c2f627dbb9ea007b43f6d69f8ec53e2d1e8177b9b37be0b76249e0cc310d0da541c981ac753db9cb1cece249404a7c33b8c92618
data/CHANGELOG.md CHANGED
@@ -1,3 +1,9 @@
1
+ ## 11.22.17
2
+ - Support base64-encoded and Elastic Cloud (`essu_`-prefixed) API keys in the `api_key` option; reject unrecognized formats at startup. [#1278](https://github.com/logstash-plugins/logstash-output-elasticsearch/pull/1278)
3
+
4
+ ## 11.22.16
5
+ - Fix serverless compatibility: guard against nil params in pool requests and strip unsupported template settings (number_of_shards, number_of_replicas) on serverless
6
+
1
7
  ## 11.22.15
2
8
  - Improves the logging experience when DLQ used [#1258](https://github.com/logstash-plugins/logstash-output-elasticsearch/pull/1258)
3
9
 
data/README.md CHANGED
@@ -1,6 +1,8 @@
1
1
  # Logstash Plugin
2
2
 
3
- [![Travis Build Status](https://travis-ci.com/logstash-plugins/logstash-output-elasticsearch.svg)](https://travis-ci.com/logstash-plugins/logstash-output-elasticsearch)
3
+ [![Unit Tests](https://github.com/logstash-plugins/logstash-output-elasticsearch/actions/workflows/unit-tests.yml/badge.svg)](https://github.com/logstash-plugins/logstash-output-elasticsearch/actions/workflows/unit-tests.yml)
4
+ [![Integration Tests](https://github.com/logstash-plugins/logstash-output-elasticsearch/actions/workflows/integration-tests.yml/badge.svg)](https://github.com/logstash-plugins/logstash-output-elasticsearch/actions/workflows/integration-tests.yml)
5
+ [![Secure Integration Tests](https://github.com/logstash-plugins/logstash-output-elasticsearch/actions/workflows/secure-integration-tests.yml/badge.svg)](https://github.com/logstash-plugins/logstash-output-elasticsearch/actions/workflows/secure-integration-tests.yml)
4
6
 
5
7
  This is a plugin for [Logstash](https://github.com/elastic/logstash).
6
8
 
data/docs/index.asciidoc CHANGED
@@ -458,8 +458,12 @@ For more details on actions, check out the {ref}/docs-bulk.html[Elasticsearch bu
458
458
  Authenticate using Elasticsearch API key.
459
459
  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_enabled => true`>>.
460
460
 
461
- Format is `id:api_key` where `id` and `api_key` are as returned by the
462
- Elasticsearch {ref}/security-api-create-api-key.html[Create API key API].
461
+ The format is `id:api_key`, where `id` and `api_key` are as returned by the
462
+ Elasticsearch
463
+ {ref}/security-api-create-api-key.html[Create
464
+ API key API]. The base64-encoded form of that pair is also accepted, as is an
465
+ https://www.elastic.co/docs/deploy-manage/api-keys/elastic-cloud-api-keys[Elastic Cloud API key]
466
+ (prefixed with `essu_`), which is used as-is.
463
467
 
464
468
  [id="plugins-{type}s-{plugin}-bulk_path"]
465
469
  ===== `bulk_path`
@@ -347,6 +347,7 @@ module LogStash; module Outputs; class ElasticSearch; class HttpClient;
347
347
  end
348
348
 
349
349
  def perform_request_to_url(url, method, path, params={}, body=nil)
350
+ params ||= {}
350
351
  params[:headers] = DEFAULT_EAV_HEADER.merge(params[:headers] || {}) if serverless?
351
352
  @adapter.perform_request(url, method, path, params, body)
352
353
  end
@@ -433,7 +433,7 @@ module LogStash; module Outputs; class ElasticSearch;
433
433
  def template_put(template_endpoint, name, template)
434
434
  path = "#{template_endpoint}/#{name}"
435
435
  logger.info("Installing Elasticsearch template", name: name)
436
- @pool.put(path, nil, LogStash::Json.dump(template))
436
+ @pool.put(path, {}, LogStash::Json.dump(template))
437
437
  rescue ::LogStash::Outputs::ElasticSearch::HttpClient::Pool::BadResponseCodeError => e
438
438
  raise e unless e.response_code == 404
439
439
  end
@@ -447,7 +447,7 @@ module LogStash; module Outputs; class ElasticSearch;
447
447
 
448
448
  # Create a new rollover alias
449
449
  def rollover_alias_put(alias_name, alias_definition)
450
- @pool.put(CGI::escape(alias_name), nil, LogStash::Json.dump(alias_definition))
450
+ @pool.put(CGI::escape(alias_name), {}, LogStash::Json.dump(alias_definition))
451
451
  logger.info("Created rollover alias", name: alias_name)
452
452
  # If the rollover alias already exists, ignore the error that comes back from Elasticsearch
453
453
  rescue ::LogStash::Outputs::ElasticSearch::HttpClient::Pool::BadResponseCodeError => e
@@ -473,7 +473,7 @@ module LogStash; module Outputs; class ElasticSearch;
473
473
  def ilm_policy_put(name, policy)
474
474
  path = "_ilm/policy/#{name}"
475
475
  logger.info("Installing ILM policy #{policy}", name: name)
476
- @pool.put(path, nil, LogStash::Json.dump(policy))
476
+ @pool.put(path, {}, LogStash::Json.dump(policy))
477
477
  end
478
478
 
479
479
 
@@ -188,9 +188,38 @@ module LogStash; module Outputs; class ElasticSearch;
188
188
  def self.setup_api_key(logger, params)
189
189
  api_key = params["api_key"]
190
190
 
191
- return {} unless (api_key && api_key.value)
191
+ return {} unless (api_key&.value)
192
192
 
193
- { "Authorization" => "ApiKey " + Base64.strict_encode64(api_key.value) }
193
+ token = resolve_api_key(api_key.value)
194
+ { "Authorization" => "ApiKey #{token}" }
195
+ end
196
+
197
+ # Resolves the `api_key` value into the credential used in the
198
+ # `Authorization: ApiKey` header. An already base64-encoded key and an Elastic
199
+ # Cloud API key are used as-is; a raw `id:api_key` pair is base64-encoded. An
200
+ # unrecognized value is rejected so a malformed key surfaces at startup rather
201
+ # than as a later authentication failure.
202
+ def self.resolve_api_key(key_value)
203
+ if base64?(key_value) || cloud_api_key?(key_value)
204
+ key_value
205
+ elsif key_value.match?(/\A[^:]+:[^:]+\z/)
206
+ Base64.strict_encode64(key_value)
207
+ else
208
+ raise LogStash::ConfigurationError, "Invalid api_key format. Expected a base64-encoded key, an 'id:api_key' pair, or a Cloud API key (essu_ prefix)."
209
+ end
210
+ end
211
+
212
+ # Elastic Cloud API keys (such as the unified Serverless keys) are opaque
213
+ # tokens prefixed with `essu_` that Elasticsearch accepts verbatim in the
214
+ # `Authorization: ApiKey` header, with no base64 encoding.
215
+ def self.cloud_api_key?(string)
216
+ string.match?(/\Aessu_.+/)
217
+ end
218
+
219
+ def self.base64?(string)
220
+ string == Base64.strict_encode64(Base64.strict_decode64(string))
221
+ rescue ArgumentError
222
+ false
194
223
  end
195
224
 
196
225
  private
@@ -28,6 +28,7 @@ module LogStash; module Outputs; class ElasticSearch
28
28
  end
29
29
 
30
30
  add_ilm_settings_to_template(plugin, template) if plugin.ilm_in_use?
31
+ strip_serverless_incompatible_settings(template) if plugin.serverless?
31
32
  plugin.logger.debug("Attempting to install template", template: template)
32
33
  install(plugin.client, template_endpoint(plugin), template_name(plugin), template, plugin.template_overwrite)
33
34
  end
@@ -129,5 +130,19 @@ module LogStash; module Outputs; class ElasticSearch
129
130
  end
130
131
  end
131
132
 
133
+ SERVERLESS_INCOMPATIBLE_SETTINGS = %w[
134
+ number_of_shards
135
+ index.number_of_shards
136
+ number_of_replicas
137
+ index.number_of_replicas
138
+ ].freeze
139
+
140
+ def self.strip_serverless_incompatible_settings(template)
141
+ settings = template.dig('template', 'settings') || template['settings']
142
+ return unless settings
143
+
144
+ SERVERLESS_INCOMPATIBLE_SETTINGS.each { |s| settings.delete(s) }
145
+ end
146
+
132
147
  end
133
148
  end end end
@@ -16,7 +16,8 @@ module LogStash; module PluginMixins; module ElasticSearch
16
16
  :password => { :validate => :password },
17
17
 
18
18
  # Authenticate using Elasticsearch API key.
19
- # format is id:api_key (as returned by https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-create-api-key.html[Create API key])
19
+ # Format is either the `id:api_key` pair (as returned by https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-create-api-key.html[Create API key]),
20
+ # its base64-encoded form, or an https://www.elastic.co/docs/deploy-manage/api-keys/elastic-cloud-api-keys[Elastic Cloud API key] (prefixed with `essu_`) can be used.
20
21
  :api_key => { :validate => :password },
21
22
 
22
23
  # Cloud authentication string ("<username>:<password>" format) is an alternative for the `user`/`password` configuration.
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'logstash-output-elasticsearch'
3
- s.version = '11.22.15'
3
+ s.version = ::File.read('version').split("\n").first
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"
@@ -12,7 +12,7 @@ Gem::Specification.new do |s|
12
12
  s.platform = RUBY_PLATFORM
13
13
 
14
14
  # Files
15
- s.files = Dir["lib/**/*","spec/**/*","*.gemspec","*.md","CONTRIBUTORS","Gemfile","LICENSE","NOTICE.TXT", "vendor/jar-dependencies/**/*.jar", "vendor/jar-dependencies/**/*.rb", "VERSION", "docs/**/*"]
15
+ s.files = Dir["lib/**/*","spec/**/*","*.gemspec","*.md","CONTRIBUTORS","Gemfile","LICENSE","NOTICE.TXT", "vendor/jar-dependencies/**/*.jar", "vendor/jar-dependencies/**/*.rb", "VERSION", "version", "docs/**/*"]
16
16
 
17
17
  # Tests
18
18
  s.test_files = s.files.grep(%r{^(test|spec|features)/})
@@ -186,4 +186,75 @@ describe LogStash::Outputs::ElasticSearch::TemplateManager do
186
186
 
187
187
  end
188
188
  end
189
+
190
+ describe ".strip_serverless_incompatible_settings" do
191
+ context "with composable template (template.settings)" do
192
+ let(:template) do
193
+ {
194
+ "template" => {
195
+ "settings" => {
196
+ "index.refresh_interval" => "5s",
197
+ "number_of_shards" => 1,
198
+ "number_of_replicas" => 0
199
+ }
200
+ }
201
+ }
202
+ end
203
+
204
+ it "removes number_of_shards and number_of_replicas" do
205
+ described_class.strip_serverless_incompatible_settings(template)
206
+ expect(template["template"]["settings"]).not_to have_key("number_of_shards")
207
+ expect(template["template"]["settings"]).not_to have_key("number_of_replicas")
208
+ end
209
+
210
+ it "preserves compatible settings" do
211
+ described_class.strip_serverless_incompatible_settings(template)
212
+ expect(template["template"]["settings"]["index.refresh_interval"]).to eq("5s")
213
+ end
214
+ end
215
+
216
+ context "with index-prefixed setting keys" do
217
+ let(:template) do
218
+ {
219
+ "template" => {
220
+ "settings" => {
221
+ "index.number_of_shards" => 1,
222
+ "index.number_of_replicas" => 0
223
+ }
224
+ }
225
+ }
226
+ end
227
+
228
+ it "removes index-prefixed variants" do
229
+ described_class.strip_serverless_incompatible_settings(template)
230
+ expect(template["template"]["settings"]).not_to have_key("index.number_of_shards")
231
+ expect(template["template"]["settings"]).not_to have_key("index.number_of_replicas")
232
+ end
233
+ end
234
+
235
+ context "with legacy template (top-level settings)" do
236
+ let(:template) do
237
+ {
238
+ "settings" => {
239
+ "index.refresh_interval" => "5s",
240
+ "number_of_shards" => 1
241
+ }
242
+ }
243
+ end
244
+
245
+ it "removes incompatible settings from top-level settings" do
246
+ described_class.strip_serverless_incompatible_settings(template)
247
+ expect(template["settings"]).not_to have_key("number_of_shards")
248
+ expect(template["settings"]["index.refresh_interval"]).to eq("5s")
249
+ end
250
+ end
251
+
252
+ context "with no settings" do
253
+ let(:template) { { "mappings" => {} } }
254
+
255
+ it "does not raise" do
256
+ expect { described_class.strip_serverless_incompatible_settings(template) }.not_to raise_error
257
+ end
258
+ end
259
+ end
189
260
  end
@@ -908,6 +908,9 @@ describe LogStash::Outputs::ElasticSearch do
908
908
 
909
909
  before(:each) do
910
910
  allow(elasticsearch_output_instance.client).to receive(:logger).and_return(logger_stub)
911
+ # Stub the output plugin's own @logger to prevent submit()/retrying_submit()
912
+ # from logging the full 15MB action payload on each retry, which floods stdout.
913
+ elasticsearch_output_instance.instance_variable_set(:@logger, logger_stub)
911
914
 
912
915
  allow(elasticsearch_output_instance.client).to receive(:bulk).and_call_original
913
916
 
@@ -1615,6 +1618,32 @@ describe LogStash::Outputs::ElasticSearch do
1615
1618
  end; end
1616
1619
  end
1617
1620
 
1621
+ context "with an already base64-encoded API key" do
1622
+ let(:api_key) { Base64.strict_encode64("some_id:some_api_key") }
1623
+ let(:options) { { "ssl_enabled" => true, "api_key" => ::LogStash::Util::Password.new(api_key) } }
1624
+ let(:base64_api_key) { "ApiKey #{api_key}" }
1625
+
1626
+ it_behaves_like 'secure api-key authenticated client'
1627
+ end
1628
+
1629
+ context "with an Elastic Cloud API key (essu_ prefix)" do
1630
+ let(:api_key) { "essu_VFZGblZreFhTekJ4ZDB4M2NHUnZRMEU2YzNWd1pYSnpaV055WlhRPQ==AAAAAAAA" }
1631
+ let(:options) { { "ssl_enabled" => true, "api_key" => ::LogStash::Util::Password.new(api_key) } }
1632
+
1633
+ it "sets the Authorization header verbatim without re-encoding" do
1634
+ expect(manticore_options[:headers]).to eq({ "Authorization" => "ApiKey #{api_key}" })
1635
+ end
1636
+ end
1637
+
1638
+ context "with an unrecognized api_key format" do
1639
+ let(:do_register) { false }
1640
+ let(:options) { { "ssl_enabled" => true, "api_key" => ::LogStash::Util::Password.new("not-a-valid-key") } }
1641
+
1642
+ it "fails registration with a configuration error" do
1643
+ expect { subject.register }.to raise_error(LogStash::ConfigurationError, /Invalid api_key format/)
1644
+ end
1645
+ end
1646
+
1618
1647
  context "when set without ssl_enabled => true" do
1619
1648
  let(:do_register) { false } # this is what we want to test, so we disable the before(:each) call
1620
1649
  let(:options) { { "api_key" => api_key } }
data/version ADDED
@@ -0,0 +1 @@
1
+ 11.22.17
metadata CHANGED
@@ -1,16 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-output-elasticsearch
3
3
  version: !ruby/object:Gem::Version
4
- version: 11.22.15
4
+ version: 11.22.17
5
5
  platform: java
6
6
  authors:
7
7
  - Elastic
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2026-04-17 00:00:00.000000000 Z
10
+ date: 2026-07-17 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
13
+ name: manticore
14
14
  requirement: !ruby/object:Gem::Requirement
15
15
  requirements:
16
16
  - - ">="
@@ -19,7 +19,6 @@ dependencies:
19
19
  - - "<"
20
20
  - !ruby/object:Gem::Version
21
21
  version: 1.0.0
22
- name: manticore
23
22
  type: :runtime
24
23
  prerelease: false
25
24
  version_requirements: !ruby/object:Gem::Requirement
@@ -31,6 +30,7 @@ dependencies:
31
30
  - !ruby/object:Gem::Version
32
31
  version: 1.0.0
33
32
  - !ruby/object:Gem::Dependency
33
+ name: stud
34
34
  requirement: !ruby/object:Gem::Requirement
35
35
  requirements:
36
36
  - - ">="
@@ -39,7 +39,6 @@ dependencies:
39
39
  - - "~>"
40
40
  - !ruby/object:Gem::Version
41
41
  version: '0.0'
42
- name: stud
43
42
  type: :runtime
44
43
  prerelease: false
45
44
  version_requirements: !ruby/object:Gem::Requirement
@@ -51,6 +50,7 @@ dependencies:
51
50
  - !ruby/object:Gem::Version
52
51
  version: '0.0'
53
52
  - !ruby/object:Gem::Dependency
53
+ name: logstash-core-plugin-api
54
54
  requirement: !ruby/object:Gem::Requirement
55
55
  requirements:
56
56
  - - ">="
@@ -59,7 +59,6 @@ dependencies:
59
59
  - - "<="
60
60
  - !ruby/object:Gem::Version
61
61
  version: '2.99'
62
- name: logstash-core-plugin-api
63
62
  type: :runtime
64
63
  prerelease: false
65
64
  version_requirements: !ruby/object:Gem::Requirement
@@ -71,12 +70,12 @@ dependencies:
71
70
  - !ruby/object:Gem::Version
72
71
  version: '2.99'
73
72
  - !ruby/object:Gem::Dependency
73
+ name: logstash-mixin-ecs_compatibility_support
74
74
  requirement: !ruby/object:Gem::Requirement
75
75
  requirements:
76
76
  - - "~>"
77
77
  - !ruby/object:Gem::Version
78
78
  version: '1.0'
79
- name: logstash-mixin-ecs_compatibility_support
80
79
  type: :runtime
81
80
  prerelease: false
82
81
  version_requirements: !ruby/object:Gem::Requirement
@@ -85,12 +84,12 @@ dependencies:
85
84
  - !ruby/object:Gem::Version
86
85
  version: '1.0'
87
86
  - !ruby/object:Gem::Dependency
87
+ name: logstash-mixin-deprecation_logger_support
88
88
  requirement: !ruby/object:Gem::Requirement
89
89
  requirements:
90
90
  - - "~>"
91
91
  - !ruby/object:Gem::Version
92
92
  version: '1.0'
93
- name: logstash-mixin-deprecation_logger_support
94
93
  type: :runtime
95
94
  prerelease: false
96
95
  version_requirements: !ruby/object:Gem::Requirement
@@ -99,12 +98,12 @@ dependencies:
99
98
  - !ruby/object:Gem::Version
100
99
  version: '1.0'
101
100
  - !ruby/object:Gem::Dependency
101
+ name: logstash-mixin-ca_trusted_fingerprint_support
102
102
  requirement: !ruby/object:Gem::Requirement
103
103
  requirements:
104
104
  - - "~>"
105
105
  - !ruby/object:Gem::Version
106
106
  version: '1.0'
107
- name: logstash-mixin-ca_trusted_fingerprint_support
108
107
  type: :runtime
109
108
  prerelease: false
110
109
  version_requirements: !ruby/object:Gem::Requirement
@@ -113,12 +112,12 @@ dependencies:
113
112
  - !ruby/object:Gem::Version
114
113
  version: '1.0'
115
114
  - !ruby/object:Gem::Dependency
115
+ name: logstash-mixin-normalize_config_support
116
116
  requirement: !ruby/object:Gem::Requirement
117
117
  requirements:
118
118
  - - "~>"
119
119
  - !ruby/object:Gem::Version
120
120
  version: '1.0'
121
- name: logstash-mixin-normalize_config_support
122
121
  type: :runtime
123
122
  prerelease: false
124
123
  version_requirements: !ruby/object:Gem::Requirement
@@ -127,12 +126,12 @@ dependencies:
127
126
  - !ruby/object:Gem::Version
128
127
  version: '1.0'
129
128
  - !ruby/object:Gem::Dependency
129
+ name: logstash-codec-plain
130
130
  requirement: !ruby/object:Gem::Requirement
131
131
  requirements:
132
132
  - - ">="
133
133
  - !ruby/object:Gem::Version
134
134
  version: '0'
135
- name: logstash-codec-plain
136
135
  type: :development
137
136
  prerelease: false
138
137
  version_requirements: !ruby/object:Gem::Requirement
@@ -141,12 +140,12 @@ dependencies:
141
140
  - !ruby/object:Gem::Version
142
141
  version: '0'
143
142
  - !ruby/object:Gem::Dependency
143
+ name: logstash-devutils
144
144
  requirement: !ruby/object:Gem::Requirement
145
145
  requirements:
146
146
  - - ">="
147
147
  - !ruby/object:Gem::Version
148
148
  version: '0'
149
- name: logstash-devutils
150
149
  type: :development
151
150
  prerelease: false
152
151
  version_requirements: !ruby/object:Gem::Requirement
@@ -155,12 +154,12 @@ dependencies:
155
154
  - !ruby/object:Gem::Version
156
155
  version: '0'
157
156
  - !ruby/object:Gem::Dependency
157
+ name: flores
158
158
  requirement: !ruby/object:Gem::Requirement
159
159
  requirements:
160
160
  - - ">="
161
161
  - !ruby/object:Gem::Version
162
162
  version: '0'
163
- name: flores
164
163
  type: :development
165
164
  prerelease: false
166
165
  version_requirements: !ruby/object:Gem::Requirement
@@ -169,12 +168,12 @@ dependencies:
169
168
  - !ruby/object:Gem::Version
170
169
  version: '0'
171
170
  - !ruby/object:Gem::Dependency
171
+ name: cabin
172
172
  requirement: !ruby/object:Gem::Requirement
173
173
  requirements:
174
174
  - - "~>"
175
175
  - !ruby/object:Gem::Version
176
176
  version: '0.6'
177
- name: cabin
178
177
  type: :development
179
178
  prerelease: false
180
179
  version_requirements: !ruby/object:Gem::Requirement
@@ -183,12 +182,12 @@ dependencies:
183
182
  - !ruby/object:Gem::Version
184
183
  version: '0.6'
185
184
  - !ruby/object:Gem::Dependency
185
+ name: webrick
186
186
  requirement: !ruby/object:Gem::Requirement
187
187
  requirements:
188
188
  - - ">="
189
189
  - !ruby/object:Gem::Version
190
190
  version: '0'
191
- name: webrick
192
191
  type: :development
193
192
  prerelease: false
194
193
  version_requirements: !ruby/object:Gem::Requirement
@@ -197,12 +196,12 @@ dependencies:
197
196
  - !ruby/object:Gem::Version
198
197
  version: '0'
199
198
  - !ruby/object:Gem::Dependency
199
+ name: webmock
200
200
  requirement: !ruby/object:Gem::Requirement
201
201
  requirements:
202
202
  - - ">="
203
203
  - !ruby/object:Gem::Version
204
204
  version: '0'
205
- name: webmock
206
205
  type: :development
207
206
  prerelease: false
208
207
  version_requirements: !ruby/object:Gem::Requirement
@@ -211,12 +210,12 @@ dependencies:
211
210
  - !ruby/object:Gem::Version
212
211
  version: '0'
213
212
  - !ruby/object:Gem::Dependency
213
+ name: rspec-collection_matchers
214
214
  requirement: !ruby/object:Gem::Requirement
215
215
  requirements:
216
216
  - - ">="
217
217
  - !ruby/object:Gem::Version
218
218
  version: '0'
219
- name: rspec-collection_matchers
220
219
  type: :development
221
220
  prerelease: false
222
221
  version_requirements: !ruby/object:Gem::Requirement
@@ -225,12 +224,12 @@ dependencies:
225
224
  - !ruby/object:Gem::Version
226
225
  version: '0'
227
226
  - !ruby/object:Gem::Dependency
227
+ name: elasticsearch
228
228
  requirement: !ruby/object:Gem::Requirement
229
229
  requirements:
230
230
  - - ">="
231
231
  - !ruby/object:Gem::Version
232
232
  version: '0'
233
- name: elasticsearch
234
233
  type: :development
235
234
  prerelease: false
236
235
  version_requirements: !ruby/object:Gem::Requirement
@@ -339,13 +338,13 @@ files:
339
338
  - spec/unit/outputs/elasticsearch_ssl_spec.rb
340
339
  - spec/unit/outputs/error_whitelist_spec.rb
341
340
  - spec/unit/outputs/license_check_spec.rb
341
+ - version
342
342
  homepage: https://www.elastic.co/guide/en/logstash/current/index.html
343
343
  licenses:
344
344
  - apache-2.0
345
345
  metadata:
346
346
  logstash_plugin: 'true'
347
347
  logstash_group: output
348
- post_install_message:
349
348
  rdoc_options: []
350
349
  require_paths:
351
350
  - lib
@@ -360,8 +359,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
360
359
  - !ruby/object:Gem::Version
361
360
  version: '0'
362
361
  requirements: []
363
- rubygems_version: 3.3.26
364
- signing_key:
362
+ rubygems_version: 3.6.3
365
363
  specification_version: 4
366
364
  summary: Stores logs in Elasticsearch
367
365
  test_files: