fluent-plugin-kubernetes_metadata_filter_fix 2.2.0.pre.1

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.
Files changed (33) hide show
  1. checksums.yaml +7 -0
  2. data/.circleci/config.yml +56 -0
  3. data/.gitignore +20 -0
  4. data/Gemfile +7 -0
  5. data/LICENSE.txt +201 -0
  6. data/README.md +210 -0
  7. data/Rakefile +37 -0
  8. data/fluent-plugin-kubernetes_metadata_filter.gemspec +36 -0
  9. data/lib/fluent/plugin/filter_kubernetes_metadata.rb +387 -0
  10. data/lib/fluent/plugin/kubernetes_metadata_cache_strategy.rb +98 -0
  11. data/lib/fluent/plugin/kubernetes_metadata_common.rb +113 -0
  12. data/lib/fluent/plugin/kubernetes_metadata_stats.rb +46 -0
  13. data/lib/fluent/plugin/kubernetes_metadata_watch_namespaces.rb +60 -0
  14. data/lib/fluent/plugin/kubernetes_metadata_watch_pods.rb +63 -0
  15. data/test/cassettes/invalid_api_server_config.yml +53 -0
  16. data/test/cassettes/kubernetes_docker_metadata.yml +228 -0
  17. data/test/cassettes/kubernetes_docker_metadata_annotations.yml +239 -0
  18. data/test/cassettes/kubernetes_docker_metadata_dotted_labels.yml +231 -0
  19. data/test/cassettes/kubernetes_docker_metadata_using_bearer_token.yml +248 -0
  20. data/test/cassettes/metadata_from_tag_and_journald_fields.yml +408 -0
  21. data/test/cassettes/metadata_from_tag_journald_and_kubernetes_fields.yml +540 -0
  22. data/test/cassettes/metadata_with_namespace_id.yml +276 -0
  23. data/test/cassettes/non_kubernetes_docker_metadata.yml +97 -0
  24. data/test/cassettes/valid_kubernetes_api_server.yml +55 -0
  25. data/test/helper.rb +64 -0
  26. data/test/plugin/test.token +1 -0
  27. data/test/plugin/test_cache_stats.rb +36 -0
  28. data/test/plugin/test_cache_strategy.rb +196 -0
  29. data/test/plugin/test_filter_kubernetes_metadata.rb +970 -0
  30. data/test/plugin/test_watch_namespaces.rb +91 -0
  31. data/test/plugin/test_watch_pods.rb +145 -0
  32. data/test/plugin/watch_test.rb +57 -0
  33. metadata +280 -0
@@ -0,0 +1,91 @@
1
+ #
2
+ # Fluentd Kubernetes Metadata Filter Plugin - Enrich Fluentd events with
3
+ # Kubernetes metadata
4
+ #
5
+ # Copyright 2015 Red Hat, Inc.
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+ #
19
+ require_relative '../helper'
20
+ require 'ostruct'
21
+ require_relative 'watch_test'
22
+
23
+ class WatchNamespacesTestTest < WatchTest
24
+
25
+ include KubernetesMetadata::WatchNamespaces
26
+
27
+ setup do
28
+ @created = OpenStruct.new(
29
+ type: 'CREATED',
30
+ object: {
31
+ 'metadata' => {
32
+ 'name' => 'created',
33
+ 'uid' => 'created_uid'
34
+ }
35
+ }
36
+ )
37
+ @modified = OpenStruct.new(
38
+ type: 'MODIFIED',
39
+ object: {
40
+ 'metadata' => {
41
+ 'name' => 'foo',
42
+ 'uid' => 'modified_uid'
43
+ }
44
+ }
45
+ )
46
+ @deleted = OpenStruct.new(
47
+ type: 'DELETED',
48
+ object: {
49
+ 'metadata' => {
50
+ 'name' => 'deleteme',
51
+ 'uid' => 'deleted_uid'
52
+ }
53
+ }
54
+ )
55
+ end
56
+
57
+ test 'namespace watch ignores CREATED' do
58
+ @client.stub :watch_namespaces, [@created] do
59
+ start_namespace_watch
60
+ assert_equal(false, @namespace_cache.key?('created_uid'))
61
+ assert_equal(1, @stats[:namespace_cache_watch_ignored])
62
+ end
63
+ end
64
+
65
+ test 'namespace watch ignores MODIFIED when info not in cache' do
66
+ @client.stub :watch_namespaces, [@modified] do
67
+ start_namespace_watch
68
+ assert_equal(false, @namespace_cache.key?('modified_uid'))
69
+ assert_equal(1, @stats[:namespace_cache_watch_misses])
70
+ end
71
+ end
72
+
73
+ test 'namespace watch updates cache when MODIFIED is received and info is cached' do
74
+ @namespace_cache['modified_uid'] = {}
75
+ @client.stub :watch_namespaces, [@modified] do
76
+ start_namespace_watch
77
+ assert_equal(true, @namespace_cache.key?('modified_uid'))
78
+ assert_equal(1, @stats[:namespace_cache_watch_updates])
79
+ end
80
+ end
81
+
82
+ test 'namespace watch ignores DELETED' do
83
+ @namespace_cache['deleted_uid'] = {}
84
+ @client.stub :watch_namespaces, [@deleted] do
85
+ start_namespace_watch
86
+ assert_equal(true, @namespace_cache.key?('deleted_uid'))
87
+ assert_equal(1, @stats[:namespace_cache_watch_deletes_ignored])
88
+ end
89
+ end
90
+
91
+ end
@@ -0,0 +1,145 @@
1
+ #
2
+ # Fluentd Kubernetes Metadata Filter Plugin - Enrich Fluentd events with
3
+ # Kubernetes metadata
4
+ #
5
+ # Copyright 2015 Red Hat, Inc.
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+ #
19
+ require_relative '../helper'
20
+ require 'ostruct'
21
+ require_relative 'watch_test'
22
+
23
+ class DefaultPodWatchStrategyTest < WatchTest
24
+
25
+ include KubernetesMetadata::WatchPods
26
+
27
+ setup do
28
+ @created = OpenStruct.new(
29
+ type: 'CREATED',
30
+ object: {
31
+ 'metadata' => {
32
+ 'name' => 'created',
33
+ 'namespace' => 'create',
34
+ 'uid' => 'created_uid',
35
+ 'labels' => {},
36
+ },
37
+ 'spec' => {
38
+ 'nodeName' => 'aNodeName',
39
+ 'containers' => [{
40
+ 'name' => 'foo',
41
+ 'image' => 'bar',
42
+ }, {
43
+ 'name' => 'bar',
44
+ 'image' => 'foo',
45
+ }]
46
+ }
47
+ }
48
+ )
49
+ @modified = OpenStruct.new(
50
+ type: 'MODIFIED',
51
+ object: {
52
+ 'metadata' => {
53
+ 'name' => 'foo',
54
+ 'namespace' => 'modified',
55
+ 'uid' => 'modified_uid',
56
+ 'labels' => {},
57
+ },
58
+ 'spec' => {
59
+ 'nodeName' => 'aNodeName',
60
+ 'containers' => [{
61
+ 'name' => 'foo',
62
+ 'image' => 'bar',
63
+ }, {
64
+ 'name' => 'bar',
65
+ 'image' => 'foo',
66
+ }]
67
+ },
68
+ 'status' => {
69
+ 'containerStatuses' => [
70
+ {
71
+ 'name' => 'fabric8-console-container',
72
+ 'state' => {
73
+ 'running' => {
74
+ 'startedAt' => '2015-05-08T09:22:44Z'
75
+ }
76
+ },
77
+ 'lastState' => {},
78
+ 'ready' => true,
79
+ 'restartCount' => 0,
80
+ 'image' => 'fabric8/hawtio-kubernetes:latest',
81
+ 'imageID' => 'docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303',
82
+ 'containerID' => 'docker://49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
83
+ }
84
+ ]
85
+ }
86
+ }
87
+ )
88
+ @deleted = OpenStruct.new(
89
+ type: 'DELETED',
90
+ object: {
91
+ 'metadata' => {
92
+ 'name' => 'deleteme',
93
+ 'namespace' => 'deleted',
94
+ 'uid' => 'deleted_uid'
95
+ }
96
+ }
97
+ )
98
+ end
99
+
100
+ test 'pod watch notice ignores CREATED' do
101
+ @client.stub :watch_pods, [@created] do
102
+ start_pod_watch
103
+ assert_equal(false, @cache.key?('created_uid'))
104
+ assert_equal(1, @stats[:pod_cache_watch_ignored])
105
+ end
106
+ end
107
+
108
+ test 'pod watch notice is ignored when info not cached and MODIFIED is received' do
109
+ @client.stub :watch_pods, [@modified] do
110
+ start_pod_watch
111
+ assert_equal(false, @cache.key?('modified_uid'))
112
+ assert_equal(1, @stats[:pod_cache_watch_misses])
113
+ end
114
+ end
115
+
116
+ test 'pod MODIFIED cached when hostname matches' do
117
+ orig_env_val = ENV['K8S_NODE_NAME']
118
+ ENV['K8S_NODE_NAME'] = 'aNodeName'
119
+ @client.stub :watch_pods, [@modified] do
120
+ start_pod_watch
121
+ assert_equal(true, @cache.key?('modified_uid'))
122
+ assert_equal(1, @stats[:pod_cache_host_updates])
123
+ end
124
+ ENV['K8S_NODE_NAME'] = orig_env_val
125
+ end
126
+
127
+ test 'pod watch notice is updated when MODIFIED is received' do
128
+ @cache['modified_uid'] = {}
129
+ @client.stub :watch_pods, [@modified] do
130
+ start_pod_watch
131
+ assert_equal(true, @cache.key?('modified_uid'))
132
+ assert_equal(1, @stats[:pod_cache_watch_updates])
133
+ end
134
+ end
135
+
136
+ test 'pod watch notice is ignored when delete is received' do
137
+ @cache['deleted_uid'] = {}
138
+ @client.stub :watch_pods, [@deleted] do
139
+ start_pod_watch
140
+ assert_equal(true, @cache.key?('deleted_uid'))
141
+ assert_equal(1, @stats[:pod_cache_watch_delete_ignored])
142
+ end
143
+ end
144
+
145
+ end
@@ -0,0 +1,57 @@
1
+ #
2
+ # Fluentd Kubernetes Metadata Filter Plugin - Enrich Fluentd events with
3
+ # Kubernetes metadata
4
+ #
5
+ # Copyright 2015 Red Hat, Inc.
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+ #
19
+ require_relative '../helper'
20
+ require 'ostruct'
21
+
22
+ class WatchTest < Test::Unit::TestCase
23
+
24
+ setup do
25
+ @annotations_regexps = []
26
+ @namespace_cache = {}
27
+ @cache = {}
28
+ @stats = KubernetesMetadata::Stats.new
29
+ @client = OpenStruct.new
30
+ def @client.resourceVersion
31
+ '12345'
32
+ end
33
+ def @client.watch_pods(value)
34
+ []
35
+ end
36
+ def @client.watch_namespaces(value)
37
+ []
38
+ end
39
+ def @client.get_namespaces
40
+ self
41
+ end
42
+ def @client.get_pods
43
+ self
44
+ end
45
+ end
46
+
47
+ def watcher=(value)
48
+ end
49
+
50
+ def log
51
+ logger = {}
52
+ def logger.debug(message)
53
+ end
54
+ logger
55
+ end
56
+
57
+ end
metadata ADDED
@@ -0,0 +1,280 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: fluent-plugin-kubernetes_metadata_filter_fix
3
+ version: !ruby/object:Gem::Version
4
+ version: 2.2.0.pre.1
5
+ platform: ruby
6
+ authors:
7
+ - Jimmi Dyson
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-08-01 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: fluentd
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 0.14.0
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '2'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: 0.14.0
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '2'
33
+ - !ruby/object:Gem::Dependency
34
+ name: lru_redux
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ type: :runtime
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ - !ruby/object:Gem::Dependency
48
+ name: kubeclient
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: 1.1.4
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: 1.1.4
61
+ - !ruby/object:Gem::Dependency
62
+ name: bundler
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: 2.0.2
68
+ type: :development
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: 2.0.2
75
+ - !ruby/object:Gem::Dependency
76
+ name: rake
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ type: :development
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ - !ruby/object:Gem::Dependency
90
+ name: minitest
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - "~>"
94
+ - !ruby/object:Gem::Version
95
+ version: '4.0'
96
+ type: :development
97
+ prerelease: false
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - "~>"
101
+ - !ruby/object:Gem::Version
102
+ version: '4.0'
103
+ - !ruby/object:Gem::Dependency
104
+ name: test-unit
105
+ requirement: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: 3.0.2
110
+ type: :development
111
+ prerelease: false
112
+ version_requirements: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - "~>"
115
+ - !ruby/object:Gem::Version
116
+ version: 3.0.2
117
+ - !ruby/object:Gem::Dependency
118
+ name: test-unit-rr
119
+ requirement: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - "~>"
122
+ - !ruby/object:Gem::Version
123
+ version: 1.0.3
124
+ type: :development
125
+ prerelease: false
126
+ version_requirements: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - "~>"
129
+ - !ruby/object:Gem::Version
130
+ version: 1.0.3
131
+ - !ruby/object:Gem::Dependency
132
+ name: copyright-header
133
+ requirement: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - ">="
136
+ - !ruby/object:Gem::Version
137
+ version: '0'
138
+ type: :development
139
+ prerelease: false
140
+ version_requirements: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - ">="
143
+ - !ruby/object:Gem::Version
144
+ version: '0'
145
+ - !ruby/object:Gem::Dependency
146
+ name: webmock
147
+ requirement: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - ">="
150
+ - !ruby/object:Gem::Version
151
+ version: '0'
152
+ type: :development
153
+ prerelease: false
154
+ version_requirements: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - ">="
157
+ - !ruby/object:Gem::Version
158
+ version: '0'
159
+ - !ruby/object:Gem::Dependency
160
+ name: vcr
161
+ requirement: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - ">="
164
+ - !ruby/object:Gem::Version
165
+ version: '0'
166
+ type: :development
167
+ prerelease: false
168
+ version_requirements: !ruby/object:Gem::Requirement
169
+ requirements:
170
+ - - ">="
171
+ - !ruby/object:Gem::Version
172
+ version: '0'
173
+ - !ruby/object:Gem::Dependency
174
+ name: bump
175
+ requirement: !ruby/object:Gem::Requirement
176
+ requirements:
177
+ - - ">="
178
+ - !ruby/object:Gem::Version
179
+ version: '0'
180
+ type: :development
181
+ prerelease: false
182
+ version_requirements: !ruby/object:Gem::Requirement
183
+ requirements:
184
+ - - ">="
185
+ - !ruby/object:Gem::Version
186
+ version: '0'
187
+ - !ruby/object:Gem::Dependency
188
+ name: yajl-ruby
189
+ requirement: !ruby/object:Gem::Requirement
190
+ requirements:
191
+ - - ">="
192
+ - !ruby/object:Gem::Version
193
+ version: '0'
194
+ type: :development
195
+ prerelease: false
196
+ version_requirements: !ruby/object:Gem::Requirement
197
+ requirements:
198
+ - - ">="
199
+ - !ruby/object:Gem::Version
200
+ version: '0'
201
+ description: Filter plugin to add Kubernetes metadata
202
+ email:
203
+ - jimmidyson@gmail.com
204
+ executables: []
205
+ extensions: []
206
+ extra_rdoc_files: []
207
+ files:
208
+ - ".circleci/config.yml"
209
+ - ".gitignore"
210
+ - Gemfile
211
+ - LICENSE.txt
212
+ - README.md
213
+ - Rakefile
214
+ - fluent-plugin-kubernetes_metadata_filter.gemspec
215
+ - lib/fluent/plugin/filter_kubernetes_metadata.rb
216
+ - lib/fluent/plugin/kubernetes_metadata_cache_strategy.rb
217
+ - lib/fluent/plugin/kubernetes_metadata_common.rb
218
+ - lib/fluent/plugin/kubernetes_metadata_stats.rb
219
+ - lib/fluent/plugin/kubernetes_metadata_watch_namespaces.rb
220
+ - lib/fluent/plugin/kubernetes_metadata_watch_pods.rb
221
+ - test/cassettes/invalid_api_server_config.yml
222
+ - test/cassettes/kubernetes_docker_metadata.yml
223
+ - test/cassettes/kubernetes_docker_metadata_annotations.yml
224
+ - test/cassettes/kubernetes_docker_metadata_dotted_labels.yml
225
+ - test/cassettes/kubernetes_docker_metadata_using_bearer_token.yml
226
+ - test/cassettes/metadata_from_tag_and_journald_fields.yml
227
+ - test/cassettes/metadata_from_tag_journald_and_kubernetes_fields.yml
228
+ - test/cassettes/metadata_with_namespace_id.yml
229
+ - test/cassettes/non_kubernetes_docker_metadata.yml
230
+ - test/cassettes/valid_kubernetes_api_server.yml
231
+ - test/helper.rb
232
+ - test/plugin/test.token
233
+ - test/plugin/test_cache_stats.rb
234
+ - test/plugin/test_cache_strategy.rb
235
+ - test/plugin/test_filter_kubernetes_metadata.rb
236
+ - test/plugin/test_watch_namespaces.rb
237
+ - test/plugin/test_watch_pods.rb
238
+ - test/plugin/watch_test.rb
239
+ homepage: https://github.com/vitkovskii/fluent-plugin-kubernetes_metadata_filter
240
+ licenses:
241
+ - Apache-2.0
242
+ metadata: {}
243
+ post_install_message:
244
+ rdoc_options: []
245
+ require_paths:
246
+ - lib
247
+ required_ruby_version: !ruby/object:Gem::Requirement
248
+ requirements:
249
+ - - ">="
250
+ - !ruby/object:Gem::Version
251
+ version: 2.1.0
252
+ required_rubygems_version: !ruby/object:Gem::Requirement
253
+ requirements:
254
+ - - ">"
255
+ - !ruby/object:Gem::Version
256
+ version: 1.3.1
257
+ requirements: []
258
+ rubygems_version: 3.0.3
259
+ signing_key:
260
+ specification_version: 4
261
+ summary: Fluentd filter plugin to add Kubernetes metadata
262
+ test_files:
263
+ - test/cassettes/invalid_api_server_config.yml
264
+ - test/cassettes/kubernetes_docker_metadata.yml
265
+ - test/cassettes/kubernetes_docker_metadata_annotations.yml
266
+ - test/cassettes/kubernetes_docker_metadata_dotted_labels.yml
267
+ - test/cassettes/kubernetes_docker_metadata_using_bearer_token.yml
268
+ - test/cassettes/metadata_from_tag_and_journald_fields.yml
269
+ - test/cassettes/metadata_from_tag_journald_and_kubernetes_fields.yml
270
+ - test/cassettes/metadata_with_namespace_id.yml
271
+ - test/cassettes/non_kubernetes_docker_metadata.yml
272
+ - test/cassettes/valid_kubernetes_api_server.yml
273
+ - test/helper.rb
274
+ - test/plugin/test.token
275
+ - test/plugin/test_cache_stats.rb
276
+ - test/plugin/test_cache_strategy.rb
277
+ - test/plugin/test_filter_kubernetes_metadata.rb
278
+ - test/plugin/test_watch_namespaces.rb
279
+ - test/plugin/test_watch_pods.rb
280
+ - test/plugin/watch_test.rb