fluent-plugin-kubernetes-objects 1.1.2 → 1.1.3

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: 4aae816406243c2739dc9b849522ca0fd8fed9e58e17df93de18e748b11b6758
4
- data.tar.gz: da9469b542011a7b1f26572862d72ba94683f511458dcca47c083d95e9b2960f
3
+ metadata.gz: 483397cd1c9ccdc7009f104b3c6e8ef94ecf5f56822406e862980301bb846d64
4
+ data.tar.gz: 523e83eda243fc7d3faf5d2ef9fac4cf9540e84f814b33d03d2f2c93006df4cb
5
5
  SHA512:
6
- metadata.gz: 6c390d0544d347cfce5c8a06e374ccd27d55d61dba8785069505615ecccf6b22bc2c1063aa2aaba4f3c2ca4d98c160a837e6939fd62333503f9ff3591b5c72cd
7
- data.tar.gz: 464880a76e0e38103e71587ad40e1dde8629183e458a16096508b07c8b7ec8a49f6b000ee617c2f6759983ba9d46fc2dab8383e77a88e2e57ae87c1e9a498162
6
+ metadata.gz: 9c6502046925124ec272b53251d3e08fcb6c0ee69a45f35f7ba87618dac86e4fa7f5665f6340f529d2bd207418314151715df0cc29b24bf0e894ce43c3c0a0b5
7
+ data.tar.gz: d58d7d3e507c8f77597751868918f04a3fc624785d78956b7deeeaaa7491dabfd4175bf8f331ea2e82a72c93e2e36fbda25185338c09632f37b659debb80f809
@@ -1,64 +1,72 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- fluent-plugin-kubernetes-objects (1.1.1)
5
- fluentd (~> 1.4)
6
- kubeclient (~> 4.2)
4
+ fluent-plugin-kubernetes-objects (1.1.3)
5
+ fluentd (~> 1.9.1)
6
+ http_parser.rb (= 0.5.3)
7
+ kubeclient (~> 4.6.0)
7
8
 
8
9
  GEM
9
10
  remote: https://rubygems.org/
10
11
  specs:
11
12
  addressable (2.6.0)
12
13
  public_suffix (>= 2.0.2, < 4.0)
13
- cool.io (1.5.3)
14
+ concurrent-ruby (1.1.6)
15
+ cool.io (1.6.0)
14
16
  crack (0.4.3)
15
17
  safe_yaml (~> 1.0.0)
16
- dig_rb (1.0.1)
17
18
  docile (1.3.1)
18
- domain_name (0.5.20180417)
19
+ domain_name (0.5.20190701)
19
20
  unf (>= 0.0.5, < 1.0.0)
20
- fluentd (1.4.1)
21
+ ffi (1.12.2)
22
+ ffi-compiler (1.0.1)
23
+ ffi (>= 1.0.0)
24
+ rake
25
+ fluentd (1.9.2)
21
26
  cool.io (>= 1.4.5, < 2.0.0)
22
- dig_rb (~> 1.0.0)
23
27
  http_parser.rb (>= 0.5.1, < 0.7.0)
24
- msgpack (>= 0.7.0, < 2.0.0)
28
+ msgpack (>= 1.3.1, < 2.0.0)
25
29
  serverengine (>= 2.0.4, < 3.0.0)
26
30
  sigdump (~> 0.2.2)
27
31
  strptime (>= 0.2.2, < 1.0.0)
28
- tzinfo (~> 1.0)
32
+ tzinfo (>= 1.0, < 3.0)
29
33
  tzinfo-data (~> 1.0)
30
34
  yajl-ruby (~> 1.0)
31
35
  hashdiff (0.3.8)
32
- http (3.3.0)
36
+ http (4.3.0)
33
37
  addressable (~> 2.3)
34
38
  http-cookie (~> 1.0)
35
- http-form_data (~> 2.0)
36
- http_parser.rb (~> 0.6.0)
39
+ http-form_data (~> 2.2)
40
+ http-parser (~> 1.2.0)
41
+ http-accept (1.7.0)
37
42
  http-cookie (1.0.3)
38
43
  domain_name (~> 0.5)
39
- http-form_data (2.1.1)
40
- http_parser.rb (0.6.0)
44
+ http-form_data (2.2.0)
45
+ http-parser (1.2.1)
46
+ ffi-compiler (>= 1.0, < 2.0)
47
+ http_parser.rb (0.5.3)
41
48
  json (2.1.0)
42
- kubeclient (4.3.0)
43
- http (~> 3.0)
49
+ kubeclient (4.6.0)
50
+ http (>= 3.0, < 5.0)
44
51
  recursive-open-struct (~> 1.0, >= 1.0.4)
45
52
  rest-client (~> 2.0)
46
- mime-types (3.2.2)
53
+ mime-types (3.3.1)
47
54
  mime-types-data (~> 3.2015)
48
- mime-types-data (3.2018.0812)
55
+ mime-types-data (3.2019.1009)
49
56
  minitest (5.11.3)
50
- msgpack (1.2.9)
57
+ msgpack (1.3.3)
51
58
  netrc (0.11.0)
52
59
  power_assert (1.1.3)
53
60
  public_suffix (3.0.3)
54
61
  rake (12.3.2)
55
62
  recursive-open-struct (1.1.0)
56
- rest-client (2.0.2)
63
+ rest-client (2.1.0)
64
+ http-accept (>= 1.7.0, < 2.0)
57
65
  http-cookie (>= 1.0.2, < 2.0)
58
66
  mime-types (>= 1.16, < 4.0)
59
67
  netrc (~> 0.8)
60
68
  safe_yaml (1.0.4)
61
- serverengine (2.1.0)
69
+ serverengine (2.2.1)
62
70
  sigdump (~> 0.2.2)
63
71
  sigdump (0.2.4)
64
72
  simplecov (0.16.1)
@@ -69,14 +77,13 @@ GEM
69
77
  strptime (0.2.3)
70
78
  test-unit (3.3.0)
71
79
  power_assert
72
- thread_safe (0.3.6)
73
- tzinfo (1.2.5)
74
- thread_safe (~> 0.1)
75
- tzinfo-data (1.2019.1)
80
+ tzinfo (2.0.1)
81
+ concurrent-ruby (~> 1.0)
82
+ tzinfo-data (1.2019.3)
76
83
  tzinfo (>= 1.0.0)
77
84
  unf (0.1.4)
78
85
  unf_ext
79
- unf_ext (0.0.7.5)
86
+ unf_ext (0.0.7.6)
80
87
  webmock (3.5.1)
81
88
  addressable (>= 2.3.6)
82
89
  crack (>= 0.3.2)
@@ -90,10 +97,10 @@ DEPENDENCIES
90
97
  bundler (~> 2.0)
91
98
  fluent-plugin-kubernetes-objects!
92
99
  minitest (~> 5.11)
93
- rake (~> 12.3)
100
+ rake (~> 12.0)
94
101
  simplecov
95
102
  test-unit (~> 3.3)
96
103
  webmock (~> 3.5)
97
104
 
98
105
  BUNDLED WITH
99
- 2.0.1
106
+ 2.1.4
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 1.1.3
@@ -24,20 +24,19 @@ Gem::Specification.new do |spec|
24
24
  CODE_OF_CONDUCT.md README.md LICENSE
25
25
  fluent-plugin-kubernetes-objects.gemspec
26
26
  Gemfile Gemfile.lock
27
- Rakefile
27
+ Rakefile VERSION
28
28
  ] + Dir.glob('lib/**/**').reject(&File.method(:directory?))
29
29
 
30
30
  spec.bindir = 'exe'
31
31
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
32
-
33
32
  spec.required_ruby_version = '>= 2.3.0'
34
-
35
- spec.add_runtime_dependency 'fluentd', '~> 1.4'
36
- spec.add_runtime_dependency 'kubeclient', '~> 4.2'
33
+ spec.add_runtime_dependency 'fluentd', '~> 1.9.1'
34
+ spec.add_runtime_dependency 'kubeclient', '~> 4.6.0'
35
+ spec.add_runtime_dependency 'http_parser.rb', '= 0.5.3'
37
36
 
38
37
  spec.add_development_dependency 'bundler', '~> 2.0'
39
38
  spec.add_development_dependency 'minitest', '~> 5.11'
40
- spec.add_development_dependency 'rake', '~> 12.3'
39
+ spec.add_development_dependency 'rake', '~> 12.0'
41
40
  spec.add_development_dependency 'test-unit', '~> 3.3' # required by fluent/test.rb
42
41
  spec.add_development_dependency 'webmock', '~> 3.5'
43
42
  end
@@ -102,7 +102,6 @@ module Fluent::Plugin
102
102
  end
103
103
 
104
104
  def close
105
- @watchers.each &:finish if @watchers
106
105
  super
107
106
  end
108
107
 
@@ -118,6 +117,21 @@ module Fluent::Plugin
118
117
  [@tag_prefix, item_name, @tag_suffix].join
119
118
  end
120
119
 
120
+ def init_with_kubeconfig()
121
+ options = {}
122
+ config = Kubeclient::Config.read @kubeconfig
123
+ current_context = config.context
124
+
125
+ @client = Kubeclient::Client.new(
126
+ current_context.api_endpoint,
127
+ current_context.api_version,
128
+ options.merge(
129
+ ssl_options: current_context.ssl_options,
130
+ auth_options: current_context.auth_options
131
+ )
132
+ )
133
+ end
134
+
121
135
  def initialize_client
122
136
  # mostly borrowed from Fluentd Kubernetes Metadata Filter Plugin
123
137
  if @kubernetes_url.nil?
@@ -173,16 +187,7 @@ module Fluent::Plugin
173
187
  end
174
188
 
175
189
  def start_watchers
176
- @watchers = @watch_objects.map do |o|
177
- o = o.to_h.dup
178
- o[:as] = :raw
179
- resource_name = o.delete(:resource_name)
180
- watch_interval = o.delete(:interval)
181
-
182
- version = @storage.get(resource_name)
183
- o[:resource_version] = version if version
184
- create_watcher_thread resource_name, o, watch_interval
185
- end
190
+ @watch_objects.each(&method(:create_watcher_thread))
186
191
  end
187
192
 
188
193
  def create_pull_thread(conf)
@@ -225,19 +230,35 @@ module Fluent::Plugin
225
230
  end
226
231
  end
227
232
 
228
- def create_watcher_thread(object_name, watcher, interval)
229
- thread_create(:"watch_#{object_name}") do
230
- @client.public_send("watch_#{object_name}", watcher).tap { |watcher|
231
- tag = generate_tag "#{object_name}.watch"
232
- watcher.each do |entity|
233
- log.trace { "Received new object from watching #{object_name}" }
234
- entity = JSON.parse(entity)
235
- router.emit tag, Fluent::Engine.now, entity
236
- @storage.put object_name, entity['object']['metadata']['resourceVersion']
237
- sleep(interval)
233
+ def create_watcher_thread(conf)
234
+ options = conf.to_h.dup
235
+ options[:as] = :raw
236
+ resource_name = options[:resource_name]
237
+ version = @storage.get(resource_name)
238
+ if version
239
+ options[:resource_version] = version
240
+ else
241
+ options[:resource_version] = 0
242
+ end
243
+
244
+ thread_create :"watch_#{resource_name}" do
245
+ while thread_current_running?
246
+ @client.public_send("watch_#{resource_name}", options).tap do |watcher|
247
+ tag = generate_tag "#{resource_name}"
248
+ watcher.each do |entity|
249
+ begin
250
+ entity = JSON.parse(entity)
251
+ router.emit tag, Fluent::Engine.now, entity
252
+ options[:resource_version] = entity['object']['metadata']['resourceVersion']
253
+ @storage.put resource_name, entity['object']['metadata']['resourceVersion']
254
+ rescue => e
255
+ log.info "Got exception #{e} parsing entity #{entity}. Resetting watcher."
256
+ end
257
+ end
238
258
  end
239
- }
259
+ end
240
260
  end
241
261
  end
242
262
  end
243
263
  end
264
+
@@ -1,4 +1,5 @@
1
1
  require "test_helper"
2
+ require 'fluent/plugin/in_kubernetes_objects.rb'
2
3
 
3
4
  describe Fluent::Plugin::KubernetesObjectsInput do
4
5
  include Fluent::Test::Helpers
@@ -109,9 +110,12 @@ describe Fluent::Plugin::KubernetesObjectsInput do
109
110
  </watch>
110
111
  CONF
111
112
 
113
+ stub_k8s_events params: {resourceVersion: "0"}
114
+ stub_k8s_events params: {resourceVersion: "6621683"}
115
+
112
116
  d.run expect_emits: 1, timeout: 3
113
117
  events = d.events
114
- expect(events.all? { |e| e[0] == 'kubernetes.events.watch'}).must_equal true
118
+ expect(events.all? { |e| e[0] == 'kubernetes.events'}).must_equal true
115
119
  end
116
120
 
117
121
  it "should use checkpoints for watching" do
@@ -133,6 +137,7 @@ describe Fluent::Plugin::KubernetesObjectsInput do
133
137
  CONF
134
138
 
135
139
  stub_k8s_events params: {resourceVersion: "123456"}
140
+ stub_k8s_events params: {resourceVersion: "6621683"}
136
141
 
137
142
  d.run expect_emits: 1, timeout: 3
138
143
  ensure
@@ -1,13 +1,12 @@
1
1
  require 'simplecov'
2
2
  SimpleCov.start
3
3
 
4
- $LOAD_PATH.unshift File.expand_path('../lib', __dir__)
4
+ $LOAD_PATH.unshift(File.expand_path('..', __dir__))
5
5
 
6
6
  # suppress warning, when require the 'http' library shows circle require warning
7
7
  # which is pretty annoying (kubeclient depends on http for watch_stream)
8
8
  _verbose = $VERBOSE
9
9
  $VERBOSE = nil
10
- require 'fluent/plugin/in_kubernetes_objects'
11
10
  $VERBOSE = _verbose
12
11
 
13
12
  require 'fluent/test'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-kubernetes-objects
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.2
4
+ version: 1.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Splunk Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-07-23 00:00:00.000000000 Z
11
+ date: 2020-02-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fluentd
@@ -16,28 +16,42 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.4'
19
+ version: 1.9.1
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.4'
26
+ version: 1.9.1
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: kubeclient
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '4.2'
33
+ version: 4.6.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '4.2'
40
+ version: 4.6.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: http_parser.rb
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '='
46
+ - !ruby/object:Gem::Version
47
+ version: 0.5.3
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '='
53
+ - !ruby/object:Gem::Version
54
+ version: 0.5.3
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: bundler
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -72,14 +86,14 @@ dependencies:
72
86
  requirements:
73
87
  - - "~>"
74
88
  - !ruby/object:Gem::Version
75
- version: '12.3'
89
+ version: '12.0'
76
90
  type: :development
77
91
  prerelease: false
78
92
  version_requirements: !ruby/object:Gem::Requirement
79
93
  requirements:
80
94
  - - "~>"
81
95
  - !ruby/object:Gem::Version
82
- version: '12.3'
96
+ version: '12.0'
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: test-unit
85
99
  requirement: !ruby/object:Gem::Requirement
@@ -122,6 +136,7 @@ files:
122
136
  - LICENSE
123
137
  - README.md
124
138
  - Rakefile
139
+ - VERSION
125
140
  - fluent-plugin-kubernetes-objects.gemspec
126
141
  - lib/fluent/plugin/in_kubernetes_objects.rb
127
142
  - test/fluent/plugin/in_kubernetes_objects_test.rb
@@ -152,7 +167,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
152
167
  - !ruby/object:Gem::Version
153
168
  version: '0'
154
169
  requirements: []
155
- rubygems_version: 3.0.2
170
+ rubygems_version: 3.1.1
156
171
  signing_key:
157
172
  specification_version: 4
158
173
  summary: Fluentd Plugin for Kubernetes Objects.