logstash-input-elasticsearch 4.20.5 → 5.0.0

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: eaa000218cac721012284803638cb681c0eccf02107c34b03e597998a2e9eee3
4
- data.tar.gz: eef84d9f24f1346b1d4793f6b10f200e790739f63d588888bae1bcdae33ec51f
3
+ metadata.gz: b34b6c6d814152e88f320525ea0bb80bbf1e63ff962e022aaac0a2385dd087b6
4
+ data.tar.gz: d142df9148ad69bf838d62badeec71382118741938db61e6aad0676bdb918a37
5
5
  SHA512:
6
- metadata.gz: a9ed0836e937e4ceb9726d05be77e39a10cc11189bbf0cffb829e4445f5e6948e339187c2f088d1d9408657c26318375756d974299667fdf86d62b77ba6f00d5
7
- data.tar.gz: 3e919b494b24d4d61a98222e27310a6d0e2f9d1d2b6209b2879c80199dd4c69e39b789a2d6e7503e07fe3097d50261f78d0c4ab7300bd48d6cf79a5d28c66c01
6
+ metadata.gz: 19b2b1325ded83b5b93966365f855f104ba1881f2c991ffdbe92216e08d12d18a7b3ddd4a14d755f6d55c85c98e00d12ca566188c63706d6db1f0aa5b085048b
7
+ data.tar.gz: ff5de17e75281d8ddd0be70167f2c4dee0a90eef328c7e486b704e79fe10db7b7108b733f77438386a7abb18d504efbef5aaf7b0f34a6c8edd62791640514b7b
data/CHANGELOG.md CHANGED
@@ -1,3 +1,11 @@
1
+ ## 5.0.0
2
+ - SSL settings that were marked deprecated in version `4.17.0` are now marked obsolete, and will prevent the plugin from starting.
3
+ - These settings are:
4
+ - `ssl`, which should bre replaced by `ssl_enabled`
5
+ - `ca_file`, which should bre replaced by `ssl_certificate_authorities`
6
+ - `ssl_certificate_verification`, which should bre replaced by `ssl_verification_mode`
7
+ - [#213](https://github.com/logstash-plugins/logstash-input-elasticsearch/pull/213)
8
+
1
9
  ## 4.20.5
2
10
  - Add `x-elastic-product-origin` header to Elasticsearch requests [#211](https://github.com/logstash-plugins/logstash-input-elasticsearch/pull/211)
3
11
 
data/docs/index.asciidoc CHANGED
@@ -23,7 +23,7 @@ include::{include_path}/plugin_header.asciidoc[]
23
23
 
24
24
  Read from an Elasticsearch cluster, based on search query results.
25
25
  This is useful for replaying test logs, reindexing, etc.
26
- You can periodically schedule ingestion using a cron syntax
26
+ You can periodically schedule ingestion using a cron syntax
27
27
  (see `schedule` setting) or run the query one time to load
28
28
  data into Logstash.
29
29
 
@@ -96,7 +96,13 @@ TIP: Set the `target` option to avoid potential schema conflicts.
96
96
  [id="plugins-{type}s-{plugin}-options"]
97
97
  ==== Elasticsearch Input configuration options
98
98
 
99
- This plugin supports the following configuration options plus the <<plugins-{type}s-{plugin}-common-options>> and the <<plugins-{type}s-{plugin}-deprecated-options>> described later.
99
+ This plugin supports these configuration options plus the <<plugins-{type}s-{plugin}-common-options>> described later.
100
+
101
+ NOTE: As of version `5.0.0` of this plugin, a number of previously deprecated settings related to SSL have been removed.
102
+ Please check out <<plugins-{type}s-{plugin}-obsolete-options>> for details.
103
+
104
+ NOTE: As of version `5.0.0` of this plugin, a number of previously deprecated settings related to SSL have been removed.
105
+ Please check out <<plugins-{type}s-{plugin}-obsolete-options>> for details.
100
106
 
101
107
  [cols="<,<,<",options="header",]
102
108
  |=======================================================================
@@ -106,6 +112,7 @@ This plugin supports the following configuration options plus the <<plugins-{typ
106
112
  | <<plugins-{type}s-{plugin}-cloud_auth>> |<<password,password>>|No
107
113
  | <<plugins-{type}s-{plugin}-cloud_id>> |<<string,string>>|No
108
114
  | <<plugins-{type}s-{plugin}-connect_timeout_seconds>> | <<number,number>>|No
115
+ | <<plugins-{type}s-{plugin}-custom_headers>> |<<hash,hash>>|No
109
116
  | <<plugins-{type}s-{plugin}-docinfo>> |<<boolean,boolean>>|No
110
117
  | <<plugins-{type}s-{plugin}-docinfo_fields>> |<<array,array>>|No
111
118
  | <<plugins-{type}s-{plugin}-docinfo_target>> |<<string,string>>|No
@@ -199,8 +206,18 @@ For more info, check out the
199
206
  The maximum amount of time, in seconds, to wait while establishing a connection to Elasticsearch.
200
207
  Connect timeouts tend to occur when Elasticsearch or an intermediate proxy is overloaded with requests and has exhausted its connection pool.
201
208
 
209
+ [id="plugins-{type}s-{plugin}-custom_headers"]
210
+ ===== `custom_headers`
211
+
212
+ * Value type is <<hash,hash>>
213
+ * Default value is empty
214
+
215
+ Pass a set of key value pairs as the headers sent in each request to an elasticsearch node.
216
+ The headers will be used for any kind of request.
217
+ These custom headers will override any headers previously set by the plugin such as the User Agent or Authorization headers.
218
+
202
219
  [id="plugins-{type}s-{plugin}-docinfo"]
203
- ===== `docinfo`
220
+ ===== `docinfo`
204
221
 
205
222
  * Value type is <<boolean,boolean>>
206
223
  * Default value is `false`
@@ -251,7 +268,7 @@ Example
251
268
 
252
269
 
253
270
  [id="plugins-{type}s-{plugin}-docinfo_fields"]
254
- ===== `docinfo_fields`
271
+ ===== `docinfo_fields`
255
272
 
256
273
  * Value type is <<array,array>>
257
274
  * Default value is `["_index", "_type", "_id"]`
@@ -262,7 +279,7 @@ option lists the metadata fields to save in the current event. See
262
279
  more information.
263
280
 
264
281
  [id="plugins-{type}s-{plugin}-docinfo_target"]
265
- ===== `docinfo_target`
282
+ ===== `docinfo_target`
266
283
 
267
284
  * Value type is <<string,string>>
268
285
  * Default value depends on whether <<plugins-{type}s-{plugin}-ecs_compatibility>> is enabled:
@@ -286,7 +303,7 @@ this option names the field under which to store the metadata fields as subfield
286
303
  Controls this plugin's compatibility with the {ecs-ref}[Elastic Common Schema (ECS)].
287
304
 
288
305
  [id="plugins-{type}s-{plugin}-hosts"]
289
- ===== `hosts`
306
+ ===== `hosts`
290
307
 
291
308
  * Value type is <<array,array>>
292
309
  * There is no default value for this setting.
@@ -296,18 +313,18 @@ can be either IP, HOST, IP:port, or HOST:port. The port defaults to
296
313
  9200.
297
314
 
298
315
  [id="plugins-{type}s-{plugin}-index"]
299
- ===== `index`
316
+ ===== `index`
300
317
 
301
318
  * Value type is <<string,string>>
302
319
  * Default value is `"logstash-*"`
303
320
 
304
- The index or alias to search.
321
+ The index or alias to search.
305
322
  Check out {ref}/api-conventions.html#api-multi-index[Multi Indices
306
323
  documentation] in the Elasticsearch documentation for info on
307
324
  referencing multiple indices.
308
325
 
309
326
  [id="plugins-{type}s-{plugin}-password"]
310
- ===== `password`
327
+ ===== `password`
311
328
 
312
329
  * Value type is <<password,password>>
313
330
  * There is no default value for this setting.
@@ -327,7 +344,7 @@ An empty string is treated as if proxy was not set, this is useful when using
327
344
  environment variables e.g. `proxy => '${LS_PROXY:}'`.
328
345
 
329
346
  [id="plugins-{type}s-{plugin}-query"]
330
- ===== `query`
347
+ ===== `query`
331
348
 
332
349
  * Value type is <<string,string>>
333
350
  * Default value is `'{ "sort": [ "_doc" ] }'`
@@ -375,7 +392,7 @@ The default is 0 (no retry). This value should be equal to or greater than zero.
375
392
  NOTE: Partial failures - such as errors in a subset of all slices - can result in the entire query being retried, which can lead to duplication of data. Avoiding this would require Logstash to store the entire result set of a query in memory which is often not possible.
376
393
 
377
394
  [id="plugins-{type}s-{plugin}-schedule"]
378
- ===== `schedule`
395
+ ===== `schedule`
379
396
 
380
397
  * Value type is <<string,string>>
381
398
  * There is no default value for this setting.
@@ -387,7 +404,7 @@ There is no schedule by default. If no schedule is given, then the statement is
387
404
  exactly once.
388
405
 
389
406
  [id="plugins-{type}s-{plugin}-scroll"]
390
- ===== `scroll`
407
+ ===== `scroll`
391
408
 
392
409
  * Value type is <<string,string>>
393
410
  * Default value is `"1m"`
@@ -410,7 +427,7 @@ The query requires at least one `sort` field, as described in the <<plugins-{typ
410
427
  `scroll` uses {ref}/paginate-search-results.html#scroll-search-results[scroll] API to search, which is no longer recommended.
411
428
 
412
429
  [id="plugins-{type}s-{plugin}-size"]
413
- ===== `size`
430
+ ===== `size`
414
431
 
415
432
  * Value type is <<number,number>>
416
433
  * Default value is `1000`
@@ -478,6 +495,8 @@ Enable SSL/TLS secured communication to Elasticsearch cluster.
478
495
  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>>.
479
496
  If no explicit protocol is specified plain HTTP will be used.
480
497
 
498
+ When not explicitly set, SSL will be automatically enabled if any of the specified hosts use HTTPS.
499
+
481
500
  [id="plugins-{type}s-{plugin}-ssl_key"]
482
501
  ===== `ssl_key`
483
502
  * Value type is <<path,path>>
@@ -598,7 +617,7 @@ It is also possible to target an entry in the event's metadata, which will be av
598
617
 
599
618
 
600
619
  [id="plugins-{type}s-{plugin}-user"]
601
- ===== `user`
620
+ ===== `user`
602
621
 
603
622
  * Value type is <<string,string>>
604
623
  * There is no default value for this setting.
@@ -608,56 +627,21 @@ option when authenticating to the Elasticsearch server. If set to an
608
627
  empty string authentication will be disabled.
609
628
 
610
629
 
611
- [id="plugins-{type}s-{plugin}-deprecated-options"]
612
- ==== Elasticsearch Input deprecated configuration options
630
+ [id="plugins-{type}s-{plugin}-obsolete-options"]
631
+ ==== Elasticsearch Input Obsolete Configuration Options
613
632
 
614
- This plugin supports the following deprecated configurations.
633
+ WARNING: As of version `5.0.0` of this plugin, some configuration options have been replaced.
634
+ The plugin will fail to start if it contains any of these obsolete options.
615
635
 
616
- WARNING: Deprecated options are subject to removal in future releases.
617
636
 
618
- [cols="<,<,<",options="header",]
637
+ [cols="<,<",options="header",]
619
638
  |=======================================================================
620
- |Setting|Input type|Replaced by
621
- | <<plugins-{type}s-{plugin}-ca_file>> |a valid filesystem path|<<plugins-{type}s-{plugin}-ssl_certificate_authorities>>
622
- | <<plugins-{type}s-{plugin}-ssl>> |<<boolean,boolean>>|<<plugins-{type}s-{plugin}-ssl_enabled>>
623
- | <<plugins-{type}s-{plugin}-ssl_certificate_verification>> |<<boolean,boolean>>|<<plugins-{type}s-{plugin}-ssl_verification_mode>>
639
+ |Setting|Replaced by
640
+ | ca_file | <<plugins-{type}s-{plugin}-ssl_certificate_authorities>>
641
+ | ssl | <<plugins-{type}s-{plugin}-ssl_enabled>>
642
+ | ssl_certificate_verification | <<plugins-{type}s-{plugin}-ssl_verification_mode>>
624
643
  |=======================================================================
625
644
 
626
- [id="plugins-{type}s-{plugin}-ca_file"]
627
- ===== `ca_file`
628
- deprecated[4.17.0, Replaced by <<plugins-{type}s-{plugin}-ssl_certificate_authorities>>]
629
-
630
- * Value type is <<path,path>>
631
- * There is no default value for this setting.
632
-
633
- SSL Certificate Authority file in PEM encoded format, must also include any chain certificates as necessary.
634
-
635
- [id="plugins-{type}s-{plugin}-ssl"]
636
- ===== `ssl`
637
- deprecated[4.17.0, Replaced by <<plugins-{type}s-{plugin}-ssl_enabled>>]
638
-
639
- * Value type is <<boolean,boolean>>
640
- * Default value is `false`
641
-
642
- If enabled, SSL will be used when communicating with the Elasticsearch
643
- server (i.e. HTTPS will be used instead of plain HTTP).
644
-
645
-
646
- [id="plugins-{type}s-{plugin}-ssl_certificate_verification"]
647
- ===== `ssl_certificate_verification`
648
- deprecated[4.17.0, Replaced by <<plugins-{type}s-{plugin}-ssl_verification_mode>>]
649
-
650
- * Value type is <<boolean,boolean>>
651
- * Default value is `true`
652
-
653
- Option to validate the server's certificate. Disabling this severely compromises security.
654
- When certificate validation is disabled, this plugin implicitly trusts the machine
655
- resolved at the given address without validating its proof-of-identity.
656
- In this scenario, the plugin can transmit credentials to or process data from an untrustworthy
657
- man-in-the-middle or other compromised infrastructure.
658
- More information on the importance of certificate verification:
659
- **https://www.cs.utexas.edu/~shmat/shmat_ccs12.pdf**.
660
-
661
645
  [id="plugins-{type}s-{plugin}-common-options"]
662
646
  include::{include_path}/{type}.asciidoc[]
663
647
 
@@ -24,9 +24,9 @@ require_relative "elasticsearch/patches/_elasticsearch_transport_connections_sel
24
24
  # called `http.content_type.required`. If this option is set to `true`, and you
25
25
  # are using Logstash 2.4 through 5.2, you need to update the Elasticsearch input
26
26
  # plugin to version 4.0.2 or higher.
27
- #
27
+ #
28
28
  # ================================================================================
29
- #
29
+ #
30
30
  # Read from an Elasticsearch cluster, based on search query results.
31
31
  # This is useful for replaying test logs, reindexing, etc.
32
32
  # It also supports periodically scheduling lookup enrichments
@@ -166,6 +166,9 @@ class LogStash::Inputs::Elasticsearch < LogStash::Inputs::Base
166
166
  # http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/_document_metadata.html
167
167
  config :docinfo_fields, :validate => :array, :default => ['_index', '_type', '_id']
168
168
 
169
+ # Custom headers for Elasticsearch requests
170
+ config :custom_headers, :validate => :hash, :default => {}
171
+
169
172
  # Basic Auth - username
170
173
  config :user, :validate => :string
171
174
 
@@ -198,23 +201,12 @@ class LogStash::Inputs::Elasticsearch < LogStash::Inputs::Base
198
201
  # Set the address of a forward HTTP proxy.
199
202
  config :proxy, :validate => :uri_or_empty
200
203
 
201
- # SSL
202
- config :ssl, :validate => :boolean, :default => false, :deprecated => "Set 'ssl_enabled' instead."
203
-
204
- # SSL Certificate Authority file in PEM encoded format, must also include any chain certificates as necessary
205
- config :ca_file, :validate => :path, :deprecated => "Set 'ssl_certificate_authorities' instead."
206
-
207
204
  # OpenSSL-style X.509 certificate certificate to authenticate the client
208
205
  config :ssl_certificate, :validate => :path
209
206
 
210
207
  # SSL Certificate Authority files in PEM encoded format, must also include any chain certificates as necessary
211
208
  config :ssl_certificate_authorities, :validate => :path, :list => true
212
209
 
213
- # Option to validate the server's certificate. Disabling this severely compromises security.
214
- # For more information on the importance of certificate verification please read
215
- # https://www.cs.utexas.edu/~shmat/shmat_ccs12.pdf
216
- config :ssl_certificate_verification, :validate => :boolean, :default => true, :deprecated => "Set 'ssl_verification_mode' instead."
217
-
218
210
  # The list of cipher suites to use, listed by priorities.
219
211
  # Supported cipher suites vary depending on which version of Java is used.
220
212
  config :ssl_cipher_suites, :validate => :string, :list => true
@@ -242,7 +234,6 @@ class LogStash::Inputs::Elasticsearch < LogStash::Inputs::Base
242
234
  config :ssl_truststore_password, :validate => :password
243
235
 
244
236
  # The JKS truststore to validate the server's certificate.
245
- # Use either `:ssl_truststore_path` or `:ssl_certificate_authorities`
246
237
  config :ssl_truststore_path, :validate => :path
247
238
 
248
239
  # The format of the truststore file. It must be either jks or pkcs12
@@ -264,6 +255,11 @@ class LogStash::Inputs::Elasticsearch < LogStash::Inputs::Base
264
255
  # If set, the _source of each hit will be added nested under the target instead of at the top-level
265
256
  config :target, :validate => :field_reference
266
257
 
258
+ # Obsolete Settings
259
+ config :ssl, :obsolete => "Set 'ssl_enabled' instead."
260
+ config :ca_file, :obsolete => "Set 'ssl_certificate_authorities' instead."
261
+ config :ssl_certificate_verification, :obsolete => "Set 'ssl_verification_mode' instead."
262
+
267
263
  # config :ca_trusted_fingerprint, :validate => :sha_256_hex
268
264
  include LogStash::PluginMixins::CATrustedFingerprintSupport
269
265
 
@@ -305,6 +301,7 @@ class LogStash::Inputs::Elasticsearch < LogStash::Inputs::Base
305
301
  transport_options[:headers].merge!(setup_basic_auth(user, password))
306
302
  transport_options[:headers].merge!(setup_api_key(api_key))
307
303
  transport_options[:headers].merge!({'user-agent' => prepare_user_agent()})
304
+ transport_options[:headers].merge!(@custom_headers) unless @custom_headers.empty?
308
305
  transport_options[:request_timeout] = @request_timeout_seconds unless @request_timeout_seconds.nil?
309
306
  transport_options[:connect_timeout] = @connect_timeout_seconds unless @connect_timeout_seconds.nil?
310
307
  transport_options[:socket_timeout] = @socket_timeout_seconds unless @socket_timeout_seconds.nil?
@@ -408,8 +405,6 @@ class LogStash::Inputs::Elasticsearch < LogStash::Inputs::Base
408
405
  ssl_options[:ssl] = true if @ssl_enabled
409
406
 
410
407
  unless @ssl_enabled
411
- # Keep it backward compatible with the deprecated `ssl` option
412
- ssl_options[:trust_strategy] = trust_strategy_for_ca_trusted_fingerprint if original_params.include?('ssl')
413
408
  return ssl_options
414
409
  end
415
410
 
@@ -473,38 +468,11 @@ class LogStash::Inputs::Elasticsearch < LogStash::Inputs::Base
473
468
  end
474
469
 
475
470
  def setup_ssl_params!
476
- @ssl_enabled = normalize_config(:ssl_enabled) do |normalize|
477
- normalize.with_deprecated_alias(:ssl)
478
- end
479
-
480
- # Infer the value if neither the deprecate `ssl` and `ssl_enabled` were set
481
- infer_ssl_enabled_from_hosts
482
-
483
- @ssl_certificate_authorities = normalize_config(:ssl_certificate_authorities) do |normalize|
484
- normalize.with_deprecated_mapping(:ca_file) do |ca_file|
485
- [ca_file]
486
- end
487
- end
488
-
489
- @ssl_verification_mode = normalize_config(:ssl_verification_mode) do |normalize|
490
- normalize.with_deprecated_mapping(:ssl_certificate_verification) do |ssl_certificate_verification|
491
- if ssl_certificate_verification == true
492
- "full"
493
- else
494
- "none"
495
- end
496
- end
471
+ # Only infer ssl_enabled if it wasn't explicitly set
472
+ unless original_params.include?('ssl_enabled')
473
+ @ssl_enabled = effectively_ssl?
474
+ params['ssl_enabled'] = @ssl_enabled
497
475
  end
498
-
499
- params['ssl_enabled'] = @ssl_enabled
500
- params['ssl_certificate_authorities'] = @ssl_certificate_authorities unless @ssl_certificate_authorities.nil?
501
- params['ssl_verification_mode'] = @ssl_verification_mode unless @ssl_verification_mode.nil?
502
- end
503
-
504
- def infer_ssl_enabled_from_hosts
505
- return if original_params.include?('ssl') || original_params.include?('ssl_enabled')
506
-
507
- @ssl_enabled = params['ssl_enabled'] = effectively_ssl?
508
476
  end
509
477
 
510
478
  def setup_hosts
@@ -1,7 +1,7 @@
1
1
  Gem::Specification.new do |s|
2
2
 
3
3
  s.name = 'logstash-input-elasticsearch'
4
- s.version = '4.20.5'
4
+ s.version = '5.0.0'
5
5
  s.licenses = ['Apache License (2.0)']
6
6
  s.summary = "Reads query results from an Elasticsearch cluster"
7
7
  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"
@@ -58,6 +58,19 @@ describe LogStash::Inputs::Elasticsearch, :ecs_compatibility_support do
58
58
  end
59
59
  end
60
60
 
61
+ describe 'handling obsolete settings' do
62
+ [{:name => 'ssl', :replacement => 'ssl_enabled', :sample_value => true},
63
+ {:name => 'ca_file', :replacement => 'ssl_certificate_authorities', :sample_value => 'spec/fixtures/test_certs/ca.crt'},
64
+ {:name => 'ssl_certificate_verification', :replacement => 'ssl_verification_mode', :sample_value => false }].each do | obsolete_setting|
65
+ context "with obsolete #{obsolete_setting[:name]}" do
66
+ let (:config) { {obsolete_setting[:name] => obsolete_setting[:sample_value]} }
67
+ it "should raise a config error with the appropriate message" do
68
+ expect { plugin.register }.to raise_error LogStash::ConfigurationError, /The setting `#{obsolete_setting[:name]}` in plugin `elasticsearch` is obsolete and is no longer available. Set '#{obsolete_setting[:replacement]}' instead/i
69
+ end
70
+ end
71
+ end
72
+ end
73
+
61
74
  context "against not authentic Elasticsearch" do
62
75
  before(:each) do
63
76
  Elasticsearch::Client.send(:define_method, :ping) { raise Elasticsearch::UnsupportedProductError.new("Fake error") } # define error ping method
@@ -103,6 +116,22 @@ describe LogStash::Inputs::Elasticsearch, :ecs_compatibility_support do
103
116
  expect( extract_transport(client).options[:transport_options][:headers] ).to match hash_including("x-elastic-product-origin"=>"logstash-input-elasticsearch")
104
117
  end
105
118
  end
119
+
120
+ context "with custom headers" do
121
+ let(:config) do
122
+ {
123
+ "schedule" => "* * * * * UTC",
124
+ "custom_headers" => { "Custom-Header-1" => "Custom Value 1", "Custom-Header-2" => "Custom Value 2" }
125
+ }
126
+ end
127
+
128
+
129
+ it "sets custom headers" do
130
+ plugin.register
131
+ client = plugin.send(:client)
132
+ expect( extract_transport(client).options[:transport_options][:headers] ).to match hash_including(config["custom_headers"])
133
+ end
134
+ end
106
135
  end
107
136
 
108
137
  context "retry" do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-input-elasticsearch
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.20.5
4
+ version: 5.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Elastic
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-12-05 00:00:00.000000000 Z
11
+ date: 2024-12-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement