fluent-plugin-kubernetes-objects 1.1.2 → 1.1.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4aae816406243c2739dc9b849522ca0fd8fed9e58e17df93de18e748b11b6758
4
- data.tar.gz: da9469b542011a7b1f26572862d72ba94683f511458dcca47c083d95e9b2960f
3
+ metadata.gz: 68aac663e52efbd624bb1f17d99ffd0ef02c93c238c4d1172914d07eaa45d1a5
4
+ data.tar.gz: 76b6f78a9a60a172d919e31dec6430379993c4991d03cba54221275816c21233
5
5
  SHA512:
6
- metadata.gz: 6c390d0544d347cfce5c8a06e374ccd27d55d61dba8785069505615ecccf6b22bc2c1063aa2aaba4f3c2ca4d98c160a837e6939fd62333503f9ff3591b5c72cd
7
- data.tar.gz: 464880a76e0e38103e71587ad40e1dde8629183e458a16096508b07c8b7ec8a49f6b000ee617c2f6759983ba9d46fc2dab8383e77a88e2e57ae87c1e9a498162
6
+ metadata.gz: 3cd55f6524fa3ca47d053085f912e3e8a5a7fe76220fe48132882ecb7867f982d9998be1b06e569a39c40677d12c359cbec75d4fa3cbdbdce50ac70e169c2117
7
+ data.tar.gz: 2420f3c1de9ef618ebaf4acf1e7805d17b93570c09c516e9b2d2fddd515b2b7729cc7034fbae9729b9cf7854f3b4c02753a104b3df37776780befb0e5b06e94d
data/Gemfile.lock CHANGED
@@ -1,86 +1,96 @@
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.6)
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
- addressable (2.6.0)
12
- public_suffix (>= 2.0.2, < 4.0)
13
- cool.io (1.5.3)
14
- crack (0.4.3)
15
- safe_yaml (~> 1.0.0)
16
- dig_rb (1.0.1)
17
- docile (1.3.1)
18
- domain_name (0.5.20180417)
12
+ addressable (2.8.0)
13
+ public_suffix (>= 2.0.2, < 5.0)
14
+ concurrent-ruby (1.1.9)
15
+ cool.io (1.7.1)
16
+ crack (0.4.5)
17
+ rexml
18
+ docile (1.4.0)
19
+ domain_name (0.5.20190701)
19
20
  unf (>= 0.0.5, < 1.0.0)
20
- fluentd (1.4.1)
21
+ ffi (1.15.3)
22
+ ffi-compiler (1.0.1)
23
+ ffi (>= 1.0.0)
24
+ rake
25
+ fluentd (1.13.2)
26
+ bundler
21
27
  cool.io (>= 1.4.5, < 2.0.0)
22
- dig_rb (~> 1.0.0)
23
- http_parser.rb (>= 0.5.1, < 0.7.0)
24
- msgpack (>= 0.7.0, < 2.0.0)
25
- serverengine (>= 2.0.4, < 3.0.0)
28
+ http_parser.rb (>= 0.5.1, < 0.8.0)
29
+ msgpack (>= 1.3.1, < 2.0.0)
30
+ serverengine (>= 2.2.2, < 3.0.0)
26
31
  sigdump (~> 0.2.2)
27
32
  strptime (>= 0.2.2, < 1.0.0)
28
- tzinfo (~> 1.0)
33
+ tzinfo (>= 1.0, < 3.0)
29
34
  tzinfo-data (~> 1.0)
35
+ webrick (>= 1.4.2, < 1.8.0)
30
36
  yajl-ruby (~> 1.0)
31
- hashdiff (0.3.8)
32
- http (3.3.0)
37
+ hashdiff (1.0.1)
38
+ http (4.4.1)
33
39
  addressable (~> 2.3)
34
40
  http-cookie (~> 1.0)
35
- http-form_data (~> 2.0)
36
- http_parser.rb (~> 0.6.0)
37
- http-cookie (1.0.3)
41
+ http-form_data (~> 2.2)
42
+ http-parser (~> 1.2.0)
43
+ http-accept (1.7.0)
44
+ http-cookie (1.0.4)
38
45
  domain_name (~> 0.5)
39
- http-form_data (2.1.1)
40
- http_parser.rb (0.6.0)
41
- json (2.1.0)
42
- kubeclient (4.3.0)
43
- http (~> 3.0)
46
+ http-form_data (2.3.0)
47
+ http-parser (1.2.3)
48
+ ffi-compiler (>= 1.0, < 2.0)
49
+ http_parser.rb (0.5.3)
50
+ kubeclient (4.6.0)
51
+ http (>= 3.0, < 5.0)
44
52
  recursive-open-struct (~> 1.0, >= 1.0.4)
45
53
  rest-client (~> 2.0)
46
- mime-types (3.2.2)
54
+ mime-types (3.3.1)
47
55
  mime-types-data (~> 3.2015)
48
- mime-types-data (3.2018.0812)
49
- minitest (5.11.3)
50
- msgpack (1.2.9)
56
+ mime-types-data (3.2021.0704)
57
+ minitest (5.14.4)
58
+ msgpack (1.4.2)
51
59
  netrc (0.11.0)
52
- power_assert (1.1.3)
53
- public_suffix (3.0.3)
54
- rake (12.3.2)
55
- recursive-open-struct (1.1.0)
56
- rest-client (2.0.2)
60
+ power_assert (2.0.0)
61
+ public_suffix (4.0.6)
62
+ rake (13.0.6)
63
+ recursive-open-struct (1.1.3)
64
+ rest-client (2.1.0)
65
+ http-accept (>= 1.7.0, < 2.0)
57
66
  http-cookie (>= 1.0.2, < 2.0)
58
67
  mime-types (>= 1.16, < 4.0)
59
68
  netrc (~> 0.8)
60
- safe_yaml (1.0.4)
61
- serverengine (2.1.0)
69
+ rexml (3.2.5)
70
+ serverengine (2.2.4)
62
71
  sigdump (~> 0.2.2)
63
72
  sigdump (0.2.4)
64
- simplecov (0.16.1)
73
+ simplecov (0.21.2)
65
74
  docile (~> 1.1)
66
- json (>= 1.8, < 3)
67
- simplecov-html (~> 0.10.0)
68
- simplecov-html (0.10.2)
69
- strptime (0.2.3)
70
- test-unit (3.3.0)
75
+ simplecov-html (~> 0.11)
76
+ simplecov_json_formatter (~> 0.1)
77
+ simplecov-html (0.12.3)
78
+ simplecov_json_formatter (0.1.3)
79
+ strptime (0.2.5)
80
+ test-unit (3.4.4)
71
81
  power_assert
72
- thread_safe (0.3.6)
73
- tzinfo (1.2.5)
74
- thread_safe (~> 0.1)
75
- tzinfo-data (1.2019.1)
82
+ tzinfo (2.0.4)
83
+ concurrent-ruby (~> 1.0)
84
+ tzinfo-data (1.2021.1)
76
85
  tzinfo (>= 1.0.0)
77
86
  unf (0.1.4)
78
87
  unf_ext
79
- unf_ext (0.0.7.5)
80
- webmock (3.5.1)
88
+ unf_ext (0.0.7.7)
89
+ webmock (3.13.0)
81
90
  addressable (>= 2.3.6)
82
91
  crack (>= 0.3.2)
83
- hashdiff
92
+ hashdiff (>= 0.4.0, < 2.0.0)
93
+ webrick (1.7.0)
84
94
  yajl-ruby (1.4.1)
85
95
 
86
96
  PLATFORMS
@@ -90,10 +100,10 @@ DEPENDENCIES
90
100
  bundler (~> 2.0)
91
101
  fluent-plugin-kubernetes-objects!
92
102
  minitest (~> 5.11)
93
- rake (~> 12.3)
103
+ rake (>= 12.0)
94
104
  simplecov
95
105
  test-unit (~> 3.3)
96
106
  webmock (~> 3.5)
97
107
 
98
108
  BUNDLED WITH
99
- 2.0.1
109
+ 2.2.23
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 1.1.6
@@ -9,35 +9,25 @@ Gem::Specification.new do |spec|
9
9
  spec.homepage = 'https://github.com/splunk/fluent-plugin-kubernetes-objects'
10
10
  spec.license = 'Apache-2.0'
11
11
 
12
- # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
13
- # to allow pushing to a single host or delete this section to allow pushing to any host.
14
- # if spec.respond_to?(:metadata)
15
- # spec.metadata['allowed_push_host'] = "TODO: Set to 'http://mygemserver.com'"
16
- # else
17
- # raise 'RubyGems 2.0 or newer is required to protect against ' \
18
- # 'public gem pushes.'
19
- # end
20
-
21
12
  spec.require_paths = ['lib']
22
13
  spec.test_files = Dir.glob('test/**/**.rb')
23
14
  spec.files = %w[
24
15
  CODE_OF_CONDUCT.md README.md LICENSE
25
16
  fluent-plugin-kubernetes-objects.gemspec
26
17
  Gemfile Gemfile.lock
27
- Rakefile
18
+ Rakefile VERSION
28
19
  ] + Dir.glob('lib/**/**').reject(&File.method(:directory?))
29
20
 
30
21
  spec.bindir = 'exe'
31
22
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
32
-
33
23
  spec.required_ruby_version = '>= 2.3.0'
34
-
35
- spec.add_runtime_dependency 'fluentd', '~> 1.4'
36
- spec.add_runtime_dependency 'kubeclient', '~> 4.2'
24
+ spec.add_runtime_dependency 'fluentd', '>= 1.9.1'
25
+ spec.add_runtime_dependency 'kubeclient', '~> 4.6.0'
26
+ spec.add_runtime_dependency 'http_parser.rb', '= 0.5.3'
37
27
 
38
28
  spec.add_development_dependency 'bundler', '~> 2.0'
39
29
  spec.add_development_dependency 'minitest', '~> 5.11'
40
- spec.add_development_dependency 'rake', '~> 12.3'
30
+ spec.add_development_dependency 'rake', '>= 12.0'
41
31
  spec.add_development_dependency 'test-unit', '~> 3.3' # required by fluent/test.rb
42
32
  spec.add_development_dependency 'webmock', '~> 3.5'
43
33
  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
data/test/test_helper.rb CHANGED
@@ -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,43 +1,57 @@
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.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Splunk Inc.
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-07-23 00:00:00.000000000 Z
11
+ date: 2021-07-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fluentd
15
15
  requirement: !ruby/object:Gem::Requirement
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
@@ -70,16 +84,16 @@ dependencies:
70
84
  name: rake
71
85
  requirement: !ruby/object:Gem::Requirement
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
@@ -137,7 +152,7 @@ homepage: https://github.com/splunk/fluent-plugin-kubernetes-objects
137
152
  licenses:
138
153
  - Apache-2.0
139
154
  metadata: {}
140
- post_install_message:
155
+ post_install_message:
141
156
  rdoc_options: []
142
157
  require_paths:
143
158
  - lib
@@ -152,8 +167,8 @@ 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
156
- signing_key:
170
+ rubygems_version: 3.1.4
171
+ signing_key:
157
172
  specification_version: 4
158
173
  summary: Fluentd Plugin for Kubernetes Objects.
159
174
  test_files: