fluent-plugin-elasticsearch 1.12.0 → 1.13.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
  SHA1:
3
- metadata.gz: dd8184a5b89190d9004101efa043bb86fa28b917
4
- data.tar.gz: 357d028cdc8fadaecdbb70a766f0925258c3045c
3
+ metadata.gz: d0d19458ba42dc0503bcbc2d1d5d83f58f125ba5
4
+ data.tar.gz: c3ca62e3b1801ed4b507ce61efca73a662836445
5
5
  SHA512:
6
- metadata.gz: 16697587184032cb71ba05add339aceff404c53ba66e9403fdd9d533d8148f38fbccc5304a97ce71ec98ebff41fd989b0f02fec618eaf273a36fc34ddd509229
7
- data.tar.gz: f09260ba5ae763a0a18a53c8e6191f477e8dea3bf42cdafa489e1db5275c573d4e5539807c5e14bd66a02baa4b63455a12487aefcf10d642e65e5b800b72d6b4
6
+ metadata.gz: e919bbe4e67ed88809331b3b1e2c5db6c4f57e03b48bfc0df97edc2980bbf6f0a076e61749acc8f19e9f7ba415836d4d506789a41dc475d5b91d85ee6878b68f
7
+ data.tar.gz: f4ee41cb99098a2de2a3a98a90b1ebd3977d28dfa9b7c7c52127e1446c73c6dc7b2839489d972d067bfdefde9f1658b11abead46fcaab4efa16c48f10ff6e81b
data/History.md CHANGED
@@ -4,6 +4,9 @@
4
4
  - Log ES response errors (#230)
5
5
  - Use latest elasticsearch-ruby (#240)
6
6
 
7
+ ### 1.13.0
8
+ - Backport allowing to overwrite existing index template (#336)
9
+
7
10
  ### 1.12.0
8
11
  - GA release 1.12.0.
9
12
 
data/README.md CHANGED
@@ -32,6 +32,7 @@ Note: For Amazon Elasticsearch Service please consider using [fluent-plugin-aws-
32
32
  + [target_type_key](#target_type_key)
33
33
  + [template_name](#template_name)
34
34
  + [template_file](#template_file)
35
+ + [template_overwrite](#template_overwrite)
35
36
  + [templates](#templates)
36
37
  + [request_timeout](#request_timeout)
37
38
  + [reload_connections](#reload_connections)
@@ -279,7 +280,7 @@ Similar to `target_index_key` config, find the type name to write to in the reco
279
280
 
280
281
  ### template_name
281
282
 
282
- The name of the template to define. If a template by the name given is already present, it will be left unchanged.
283
+ The name of the template to define. If a template by the name given is already present, it will be left unchanged, unless [template_overwrite](#template_overwrite) is set, in which case the template will be updated.
283
284
 
284
285
  This parameter along with template_file allow the plugin to behave similarly to Logstash (it installs a template at creation time) so that raw records are available. See [https://github.com/uken/fluent-plugin-elasticsearch/issues/33](https://github.com/uken/fluent-plugin-elasticsearch/issues/33).
285
286
 
@@ -301,6 +302,16 @@ templates { "templane_name_1": "path_to_template_1_file", "templane_name_2": "pa
301
302
 
302
303
  If `template_file` and `template_name` are set, then this parameter will be ignored.
303
304
 
305
+ ### template_overwrite
306
+
307
+ Always update the template, even if it already exists.
308
+
309
+ ```
310
+ template_overwrite true # defaults to false
311
+ ```
312
+
313
+ One of [template_file](#template_file) or [templates](#templates) must also be specified if this is set.
314
+
304
315
  ### request_timeout
305
316
 
306
317
  You can specify HTTP request timeout.
@@ -3,7 +3,7 @@ $:.push File.expand_path('../lib', __FILE__)
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = 'fluent-plugin-elasticsearch'
6
- s.version = '1.12.0'
6
+ s.version = '1.13.0'
7
7
  s.authors = ['diogo', 'pitr']
8
8
  s.email = ['pitr.vern@gmail.com', 'me@diogoterror.com']
9
9
  s.description = %q{ElasticSearch output plugin for Fluent event collector}
@@ -19,7 +19,12 @@ module Fluent::ElasticsearchIndexTemplate
19
19
  client.indices.put_template(:name => name, :body => template)
20
20
  end
21
21
 
22
- def template_install(name, template_file)
22
+ def template_install(name, template_file, overwrite)
23
+ if overwrite
24
+ template_put(name, get_template(template_file))
25
+ log.info("Template '#{name}' overwritten with #{template_file}.")
26
+ return
27
+ end
23
28
  if !template_exists?(name)
24
29
  template_put(name, get_template(template_file))
25
30
  log.info("Template configured, but no template installed. Installed '#{name}' from #{template_file}.")
@@ -28,9 +33,9 @@ module Fluent::ElasticsearchIndexTemplate
28
33
  end
29
34
  end
30
35
 
31
- def templates_hash_install (templates)
36
+ def templates_hash_install(templates, overwrite)
32
37
  templates.each do |key, value|
33
- template_install(key, value)
38
+ template_install(key, value, overwrite)
34
39
  end
35
40
  end
36
41
 
@@ -62,6 +62,7 @@ class Fluent::ElasticsearchOutput < Fluent::ObjectBufferedOutput
62
62
  config_param :flatten_hashes_separator, :string, :default => "_"
63
63
  config_param :template_name, :string, :default => nil
64
64
  config_param :template_file, :string, :default => nil
65
+ config_param :template_overwrite, :bool, :default => false
65
66
  config_param :templates, :hash, :default => nil
66
67
  config_param :include_tag_key, :bool, :default => false
67
68
  config_param :tag_key, :string, :default => 'tag'
@@ -98,9 +99,9 @@ class Fluent::ElasticsearchOutput < Fluent::ObjectBufferedOutput
98
99
  end
99
100
 
100
101
  if @template_name && @template_file
101
- template_install(@template_name, @template_file)
102
+ template_install(@template_name, @template_file, @template_overwrite)
102
103
  elsif @templates
103
- templates_hash_install (@templates)
104
+ templates_hash_install(@templates, @template_overwrite)
104
105
  end
105
106
 
106
107
  @meta_config_map = create_meta_config_map
@@ -239,6 +239,8 @@ class ElasticsearchOutput < Test::Unit::TestCase
239
239
  to_return(:status => 200, :body => "", :headers => {})
240
240
 
241
241
  driver('test', config)
242
+
243
+ assert_not_requested(:put, "https://john:doe@logs.google.com:777/es//_template/logstash")
242
244
  end
243
245
 
244
246
  def test_template_create
@@ -267,6 +269,39 @@ class ElasticsearchOutput < Test::Unit::TestCase
267
269
  to_return(:status => 200, :body => "", :headers => {})
268
270
 
269
271
  driver('test', config)
272
+
273
+ assert_requested(:put, "https://john:doe@logs.google.com:777/es//_template/logstash", times: 1)
274
+ end
275
+
276
+ def test_template_overwrite
277
+ cwd = File.dirname(__FILE__)
278
+ template_file = File.join(cwd, 'test_template.json')
279
+
280
+ config = %{
281
+ host logs.google.com
282
+ port 777
283
+ scheme https
284
+ path /es/
285
+ user john
286
+ password doe
287
+ template_name logstash
288
+ template_file #{template_file}
289
+ template_overwrite true
290
+ }
291
+
292
+ # connection start
293
+ stub_request(:head, "https://john:doe@logs.google.com:777/es//").
294
+ to_return(:status => 200, :body => "", :headers => {})
295
+ # check if template exists
296
+ stub_request(:get, "https://john:doe@logs.google.com:777/es//_template/logstash").
297
+ to_return(:status => 200, :body => "", :headers => {})
298
+ # creation
299
+ stub_request(:put, "https://john:doe@logs.google.com:777/es//_template/logstash").
300
+ to_return(:status => 200, :body => "", :headers => {})
301
+
302
+ driver('test', config)
303
+
304
+ assert_requested(:put, "https://john:doe@logs.google.com:777/es//_template/logstash", times: 1)
270
305
  end
271
306
 
272
307
 
@@ -332,6 +367,44 @@ class ElasticsearchOutput < Test::Unit::TestCase
332
367
  assert_not_requested(:put, "https://john:doe@logs.google.com:777/es//_template/logstash3") #exists
333
368
  end
334
369
 
370
+ def test_templates_overwrite
371
+ cwd = File.dirname(__FILE__)
372
+ template_file = File.join(cwd, 'test_template.json')
373
+ config = %{
374
+ host logs.google.com
375
+ port 777
376
+ scheme https
377
+ path /es/
378
+ user john
379
+ password doe
380
+ templates {"logstash1":"#{template_file}", "logstash2":"#{template_file}","logstash3":"#{template_file}" }
381
+ template_overwrite true
382
+ }
383
+
384
+ stub_request(:head, "https://john:doe@logs.google.com:777/es//").
385
+ to_return(:status => 200, :body => "", :headers => {})
386
+ # check if template exists
387
+ stub_request(:get, "https://john:doe@logs.google.com:777/es//_template/logstash1").
388
+ to_return(:status => 200, :body => "", :headers => {})
389
+ stub_request(:get, "https://john:doe@logs.google.com:777/es//_template/logstash2").
390
+ to_return(:status => 200, :body => "", :headers => {})
391
+ stub_request(:get, "https://john:doe@logs.google.com:777/es//_template/logstash3").
392
+ to_return(:status => 200, :body => "", :headers => {}) #exists
393
+
394
+ stub_request(:put, "https://john:doe@logs.google.com:777/es//_template/logstash1").
395
+ to_return(:status => 200, :body => "", :headers => {})
396
+ stub_request(:put, "https://john:doe@logs.google.com:777/es//_template/logstash2").
397
+ to_return(:status => 200, :body => "", :headers => {})
398
+ stub_request(:put, "https://john:doe@logs.google.com:777/es//_template/logstash3").
399
+ to_return(:status => 200, :body => "", :headers => {})
400
+
401
+ driver('test', config)
402
+
403
+ assert_requested(:put, "https://john:doe@logs.google.com:777/es//_template/logstash1", times: 1)
404
+ assert_requested(:put, "https://john:doe@logs.google.com:777/es//_template/logstash2", times: 1)
405
+ assert_requested(:put, "https://john:doe@logs.google.com:777/es//_template/logstash3", times: 1)
406
+ end
407
+
335
408
  def test_templates_not_used
336
409
  cwd = File.dirname(__FILE__)
337
410
  template_file = File.join(cwd, 'test_template.json')
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-elasticsearch
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.12.0
4
+ version: 1.13.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - diogo