fluent-plugin-kubernetes_metadata_filter 2.5.3 → 2.7.2
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 +4 -4
- data/.circleci/config.yml +1 -1
- data/.rubocop.yml +57 -0
- data/Gemfile +4 -2
- data/Gemfile.lock +46 -42
- data/README.md +4 -2
- data/Rakefile +15 -11
- data/fluent-plugin-kubernetes_metadata_filter.gemspec +24 -23
- data/lib/fluent/plugin/filter_kubernetes_metadata.rb +82 -72
- data/lib/fluent/plugin/kubernetes_metadata_cache_strategy.rb +22 -18
- data/lib/fluent/plugin/kubernetes_metadata_common.rb +30 -29
- data/lib/fluent/plugin/kubernetes_metadata_stats.rb +6 -6
- data/lib/fluent/plugin/kubernetes_metadata_test_api_adapter.rb +68 -0
- data/lib/fluent/plugin/kubernetes_metadata_util.rb +53 -0
- data/lib/fluent/plugin/kubernetes_metadata_watch_namespaces.rb +65 -65
- data/lib/fluent/plugin/kubernetes_metadata_watch_pods.rb +69 -70
- data/test/helper.rb +5 -3
- data/test/plugin/test_cache_stats.rb +10 -10
- data/test/plugin/test_cache_strategy.rb +158 -157
- data/test/plugin/test_filter_kubernetes_metadata.rb +363 -344
- data/test/plugin/test_utils.rb +56 -0
- data/test/plugin/test_watch_namespaces.rb +191 -190
- data/test/plugin/test_watch_pods.rb +278 -267
- data/test/plugin/watch_test.rb +13 -7
- metadata +46 -42
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
#
|
2
4
|
# Fluentd Kubernetes Metadata Filter Plugin - Enrich Fluentd events with
|
3
5
|
# Kubernetes metadata
|
@@ -33,12 +35,17 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
33
35
|
end
|
34
36
|
|
35
37
|
sub_test_case 'configure' do
|
36
|
-
|
37
38
|
test 'check default' do
|
38
39
|
d = create_driver
|
39
40
|
assert_equal(1000, d.instance.cache_size)
|
40
41
|
end
|
41
42
|
|
43
|
+
test 'check test_api_adapter' do
|
44
|
+
d = create_driver('test_api_adapter KubernetesMetadata::TestApiAdapter')
|
45
|
+
assert_equal('KubernetesMetadata::TestApiAdapter', d.instance.test_api_adapter)
|
46
|
+
end
|
47
|
+
|
48
|
+
|
42
49
|
test 'kubernetes url' do
|
43
50
|
VCR.use_cassette('valid_kubernetes_api_server') do
|
44
51
|
d = create_driver('
|
@@ -77,94 +84,89 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
77
84
|
|
78
85
|
test 'service account credentials' do
|
79
86
|
VCR.use_cassette('valid_kubernetes_api_server') do
|
80
|
-
|
81
|
-
|
82
|
-
ENV['KUBERNETES_SERVICE_PORT'] = '8443'
|
87
|
+
ENV['KUBERNETES_SERVICE_HOST'] = 'localhost'
|
88
|
+
ENV['KUBERNETES_SERVICE_PORT'] = '8443'
|
83
89
|
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
90
|
+
Dir.mktmpdir do |dir|
|
91
|
+
# Fake token file and CA crt.
|
92
|
+
expected_cert_path = File.join(dir, Plugin::KubernetesMetadataFilter::K8_POD_CA_CERT)
|
93
|
+
expected_token_path = File.join(dir, Plugin::KubernetesMetadataFilter::K8_POD_TOKEN)
|
88
94
|
|
89
|
-
|
90
|
-
|
95
|
+
File.open(expected_cert_path, 'w')
|
96
|
+
File.open(expected_token_path, 'w')
|
91
97
|
|
92
|
-
|
98
|
+
d = create_driver("
|
93
99
|
watch false
|
94
100
|
secret_dir #{dir}
|
95
101
|
")
|
96
102
|
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
}
|
101
|
-
ensure
|
102
|
-
ENV['KUBERNETES_SERVICE_HOST'] = nil
|
103
|
-
ENV['KUBERNETES_SERVICE_PORT'] = nil
|
103
|
+
assert_equal(d.instance.kubernetes_url, 'https://localhost:8443/api')
|
104
|
+
assert_equal(d.instance.ca_file, expected_cert_path)
|
105
|
+
assert_equal(d.instance.bearer_token_file, expected_token_path)
|
104
106
|
end
|
107
|
+
ensure
|
108
|
+
ENV['KUBERNETES_SERVICE_HOST'] = nil
|
109
|
+
ENV['KUBERNETES_SERVICE_PORT'] = nil
|
105
110
|
end
|
106
111
|
end
|
107
112
|
|
108
113
|
test 'service account credential files are tested for existence' do
|
109
114
|
VCR.use_cassette('valid_kubernetes_api_server') do
|
110
|
-
|
111
|
-
|
112
|
-
ENV['KUBERNETES_SERVICE_PORT'] = '8443'
|
115
|
+
ENV['KUBERNETES_SERVICE_HOST'] = 'localhost'
|
116
|
+
ENV['KUBERNETES_SERVICE_PORT'] = '8443'
|
113
117
|
|
114
|
-
|
115
|
-
|
118
|
+
Dir.mktmpdir do |dir|
|
119
|
+
d = create_driver("
|
116
120
|
watch false
|
117
121
|
secret_dir #{dir}
|
118
122
|
")
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
}
|
123
|
-
ensure
|
124
|
-
ENV['KUBERNETES_SERVICE_HOST'] = nil
|
125
|
-
ENV['KUBERNETES_SERVICE_PORT'] = nil
|
123
|
+
assert_equal(d.instance.kubernetes_url, 'https://localhost:8443/api')
|
124
|
+
assert_nil(d.instance.ca_file, nil)
|
125
|
+
assert_nil(d.instance.bearer_token_file)
|
126
126
|
end
|
127
|
+
ensure
|
128
|
+
ENV['KUBERNETES_SERVICE_HOST'] = nil
|
129
|
+
ENV['KUBERNETES_SERVICE_PORT'] = nil
|
127
130
|
end
|
128
131
|
end
|
129
132
|
end
|
130
133
|
|
131
|
-
sub_test_case '
|
132
|
-
|
133
|
-
def emit(msg={}, config='
|
134
|
+
sub_test_case 'filter' do
|
135
|
+
def emit(msg = {}, config = '
|
134
136
|
kubernetes_url https://localhost:8443
|
135
137
|
watch false
|
136
138
|
cache_size 1
|
137
139
|
', d: nil)
|
138
140
|
d = create_driver(config) if d.nil?
|
139
|
-
d.run(default_tag: DEFAULT_TAG)
|
141
|
+
d.run(default_tag: DEFAULT_TAG) do
|
140
142
|
d.feed(@time, msg)
|
141
|
-
|
142
|
-
d.filtered.map
|
143
|
+
end
|
144
|
+
d.filtered.map(&:last)
|
143
145
|
end
|
144
146
|
|
145
|
-
def emit_with_tag(tag, msg={}, config='
|
147
|
+
def emit_with_tag(tag, msg = {}, config = '
|
146
148
|
kubernetes_url https://localhost:8443
|
147
149
|
watch false
|
148
150
|
cache_size 1
|
149
151
|
')
|
150
152
|
d = create_driver(config)
|
151
|
-
d.run(default_tag: tag)
|
153
|
+
d.run(default_tag: tag) do
|
152
154
|
d.feed(@time, msg)
|
153
|
-
|
154
|
-
d.filtered.map
|
155
|
+
end
|
156
|
+
d.filtered.map(&:last)
|
155
157
|
end
|
156
158
|
|
157
159
|
test 'nil event stream' do
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
160
|
+
# not certain how this is possible but adding test to properly
|
161
|
+
# guard against this condition we have seen - test for nil,
|
162
|
+
# empty, no empty method, not an event stream
|
163
|
+
plugin = create_driver.instance
|
164
|
+
plugin.filter_stream('tag', nil)
|
165
|
+
plugin.filter_stream('tag', Fluent::MultiEventStream.new)
|
164
166
|
end
|
165
167
|
|
166
168
|
test 'inability to connect to the api server handles exception and doensnt block pipeline' do
|
167
|
-
VCR.use_cassettes([{name: 'valid_kubernetes_api_server'}, {name: 'kubernetes_get_api_v1'}]) do
|
169
|
+
VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' }]) do
|
168
170
|
driver = create_driver('
|
169
171
|
kubernetes_url https://localhost:8443
|
170
172
|
watch false
|
@@ -172,18 +174,18 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
172
174
|
')
|
173
175
|
stub_request(:any, 'https://localhost:8443/api/v1/namespaces/default/pods/fabric8-console-controller-98rqc').to_raise(SocketError.new('error from pod fetch'))
|
174
176
|
stub_request(:any, 'https://localhost:8443/api/v1/namespaces/default').to_raise(SocketError.new('socket error from namespace fetch'))
|
175
|
-
filtered = emit({'time'=>'2015-05-08T09:22:01Z'}, '', :
|
177
|
+
filtered = emit({ 'time' => '2015-05-08T09:22:01Z' }, '', d: driver)
|
176
178
|
expected_kube_metadata = {
|
177
|
-
'time'=>'2015-05-08T09:22:01Z',
|
179
|
+
'time' => '2015-05-08T09:22:01Z',
|
178
180
|
'docker' => {
|
179
|
-
|
181
|
+
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
180
182
|
},
|
181
183
|
'kubernetes' => {
|
182
|
-
'pod_name'
|
184
|
+
'pod_name' => 'fabric8-console-controller-98rqc',
|
183
185
|
'container_name' => 'fabric8-console-container',
|
184
|
-
|
186
|
+
'namespace_id' => 'orphaned',
|
185
187
|
'namespace_name' => '.orphaned',
|
186
|
-
|
188
|
+
'orphaned_namespace' => 'default'
|
187
189
|
}
|
188
190
|
}
|
189
191
|
assert_equal(expected_kube_metadata, filtered[0])
|
@@ -191,7 +193,7 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
191
193
|
end
|
192
194
|
|
193
195
|
test 'with docker & kubernetes metadata where id cache hit and metadata miss' do
|
194
|
-
VCR.use_cassettes([{name: 'valid_kubernetes_api_server'}, {name: 'kubernetes_get_api_v1'}]) do
|
196
|
+
VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' }]) do
|
195
197
|
driver = create_driver('
|
196
198
|
kubernetes_url https://localhost:8443
|
197
199
|
watch false
|
@@ -199,23 +201,23 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
199
201
|
')
|
200
202
|
cache = driver.instance.instance_variable_get(:@id_cache)
|
201
203
|
cache['49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'] = {
|
202
|
-
|
203
|
-
|
204
|
+
pod_id: 'c76927af-f563-11e4-b32d-54ee7527188d',
|
205
|
+
namespace_id: '898268c8-4a36-11e5-9d81-42010af0194c'
|
204
206
|
}
|
205
207
|
stub_request(:any, 'https://localhost:8443/api/v1/namespaces/default/pods/fabric8-console-controller-98rqc').to_timeout
|
206
208
|
stub_request(:any, 'https://localhost:8443/api/v1/namespaces/default').to_timeout
|
207
|
-
filtered = emit({'time'=>'2015-05-08T09:22:01Z'}, '', d:driver)
|
209
|
+
filtered = emit({ 'time' => '2015-05-08T09:22:01Z' }, '', d: driver)
|
208
210
|
expected_kube_metadata = {
|
209
|
-
'time'=>'2015-05-08T09:22:01Z',
|
211
|
+
'time' => '2015-05-08T09:22:01Z',
|
210
212
|
'docker' => {
|
211
|
-
|
213
|
+
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
212
214
|
},
|
213
215
|
'kubernetes' => {
|
214
|
-
'pod_name'
|
215
|
-
'container_name'
|
216
|
-
'namespace_name'
|
217
|
-
'namespace_id'
|
218
|
-
'pod_id'
|
216
|
+
'pod_name' => 'fabric8-console-controller-98rqc',
|
217
|
+
'container_name' => 'fabric8-console-container',
|
218
|
+
'namespace_name' => 'default',
|
219
|
+
'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
|
220
|
+
'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d'
|
219
221
|
}
|
220
222
|
}
|
221
223
|
|
@@ -224,7 +226,7 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
224
226
|
end
|
225
227
|
|
226
228
|
test 'with docker & kubernetes metadata where id cache hit and metadata is reloaded' do
|
227
|
-
VCR.use_cassettes([{name: 'valid_kubernetes_api_server'}, {name: 'kubernetes_get_api_v1'}, {name: 'kubernetes_get_pod'}, {name: 'kubernetes_get_namespace_default'}]) do
|
229
|
+
VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' }, { name: 'kubernetes_get_pod' }, { name: 'kubernetes_get_namespace_default' }]) do
|
228
230
|
driver = create_driver('
|
229
231
|
kubernetes_url https://localhost:8443
|
230
232
|
watch false
|
@@ -232,25 +234,26 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
232
234
|
')
|
233
235
|
cache = driver.instance.instance_variable_get(:@id_cache)
|
234
236
|
cache['49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'] = {
|
235
|
-
|
236
|
-
|
237
|
+
pod_id: 'c76927af-f563-11e4-b32d-54ee7527188d',
|
238
|
+
namespace_id: '898268c8-4a36-11e5-9d81-42010af0194c'
|
237
239
|
}
|
238
|
-
filtered = emit({'time'=>'2015-05-08T09:22:01Z'}, '', d:driver)
|
240
|
+
filtered = emit({ 'time' => '2015-05-08T09:22:01Z' }, '', d: driver)
|
239
241
|
expected_kube_metadata = {
|
240
|
-
'time'=>'2015-05-08T09:22:01Z',
|
242
|
+
'time' => '2015-05-08T09:22:01Z',
|
241
243
|
'docker' => {
|
242
|
-
|
244
|
+
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
243
245
|
},
|
244
246
|
'kubernetes' => {
|
245
|
-
'host'
|
246
|
-
'pod_name'
|
247
|
-
'container_name'
|
248
|
-
'container_image'
|
247
|
+
'host' => 'jimmi-redhat.localnet',
|
248
|
+
'pod_name' => 'fabric8-console-controller-98rqc',
|
249
|
+
'container_name' => 'fabric8-console-container',
|
250
|
+
'container_image' => 'fabric8/hawtio-kubernetes:latest',
|
249
251
|
'container_image_id' => 'docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303',
|
250
|
-
'namespace_name'
|
251
|
-
'namespace_id'
|
252
|
-
'pod_id'
|
253
|
-
'
|
252
|
+
'namespace_name' => 'default',
|
253
|
+
'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
|
254
|
+
'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
|
255
|
+
'pod_ip' => '172.17.0.8',
|
256
|
+
'master_url' => 'https://localhost:8443',
|
254
257
|
'labels' => {
|
255
258
|
'component' => 'fabric8Console'
|
256
259
|
}
|
@@ -262,23 +265,24 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
262
265
|
end
|
263
266
|
|
264
267
|
test 'with docker & kubernetes metadata' do
|
265
|
-
VCR.use_cassettes([{name: 'valid_kubernetes_api_server'}, {name: 'kubernetes_get_api_v1'}, {name: 'kubernetes_get_pod'}, {name: 'kubernetes_get_namespace_default'}]) do
|
266
|
-
filtered = emit({'time'=>'2015-05-08T09:22:01Z'})
|
268
|
+
VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' }, { name: 'kubernetes_get_pod' }, { name: 'kubernetes_get_namespace_default' }]) do
|
269
|
+
filtered = emit({ 'time' => '2015-05-08T09:22:01Z' })
|
267
270
|
expected_kube_metadata = {
|
268
|
-
'time'=>'2015-05-08T09:22:01Z',
|
271
|
+
'time' => '2015-05-08T09:22:01Z',
|
269
272
|
'docker' => {
|
270
|
-
|
273
|
+
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
271
274
|
},
|
272
275
|
'kubernetes' => {
|
273
|
-
'host'
|
274
|
-
'pod_name'
|
275
|
-
'container_name'
|
276
|
-
'container_image'
|
276
|
+
'host' => 'jimmi-redhat.localnet',
|
277
|
+
'pod_name' => 'fabric8-console-controller-98rqc',
|
278
|
+
'container_name' => 'fabric8-console-container',
|
279
|
+
'container_image' => 'fabric8/hawtio-kubernetes:latest',
|
277
280
|
'container_image_id' => 'docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303',
|
278
|
-
'namespace_name'
|
279
|
-
'namespace_id'
|
280
|
-
'pod_id'
|
281
|
-
'
|
281
|
+
'namespace_name' => 'default',
|
282
|
+
'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
|
283
|
+
'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
|
284
|
+
'pod_ip' => '172.17.0.8',
|
285
|
+
'master_url' => 'https://localhost:8443',
|
282
286
|
'labels' => {
|
283
287
|
'component' => 'fabric8Console'
|
284
288
|
}
|
@@ -290,8 +294,8 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
290
294
|
end
|
291
295
|
|
292
296
|
test 'with docker & kubernetes metadata & namespace_id enabled' do
|
293
|
-
VCR.use_cassettes([{name: 'valid_kubernetes_api_server'}, {name: 'kubernetes_get_api_v1'}, {name: 'kubernetes_get_pod'},
|
294
|
-
{name: 'kubernetes_get_namespace_default', options: {allow_playback_repeats: true}}]) do
|
297
|
+
VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' }, { name: 'kubernetes_get_pod' },
|
298
|
+
{ name: 'kubernetes_get_namespace_default', options: { allow_playback_repeats: true } }]) do
|
295
299
|
filtered = emit({}, '
|
296
300
|
kubernetes_url https://localhost:8443
|
297
301
|
watch false
|
@@ -299,18 +303,19 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
299
303
|
')
|
300
304
|
expected_kube_metadata = {
|
301
305
|
'docker' => {
|
302
|
-
|
306
|
+
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
303
307
|
},
|
304
308
|
'kubernetes' => {
|
305
|
-
'host'
|
306
|
-
'pod_name'
|
307
|
-
'container_name'
|
308
|
-
'container_image'
|
309
|
+
'host' => 'jimmi-redhat.localnet',
|
310
|
+
'pod_name' => 'fabric8-console-controller-98rqc',
|
311
|
+
'container_name' => 'fabric8-console-container',
|
312
|
+
'container_image' => 'fabric8/hawtio-kubernetes:latest',
|
309
313
|
'container_image_id' => 'docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303',
|
310
|
-
'namespace_name'
|
311
|
-
'namespace_id'
|
312
|
-
'pod_id'
|
313
|
-
'
|
314
|
+
'namespace_name' => 'default',
|
315
|
+
'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
|
316
|
+
'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
|
317
|
+
'pod_ip' => '172.17.0.8',
|
318
|
+
'master_url' => 'https://localhost:8443',
|
314
319
|
'labels' => {
|
315
320
|
'component' => 'fabric8Console'
|
316
321
|
}
|
@@ -321,8 +326,8 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
321
326
|
end
|
322
327
|
|
323
328
|
test 'with docker & kubernetes metadata using bearer token' do
|
324
|
-
VCR.use_cassettes([{name: 'valid_kubernetes_api_server_using_token'}, {name: 'kubernetes_get_api_v1_using_token'},
|
325
|
-
{name: 'kubernetes_get_pod_using_token'}, {name: 'kubernetes_get_namespace_default_using_token'}]) do
|
329
|
+
VCR.use_cassettes([{ name: 'valid_kubernetes_api_server_using_token' }, { name: 'kubernetes_get_api_v1_using_token' },
|
330
|
+
{ name: 'kubernetes_get_pod_using_token' }, { name: 'kubernetes_get_namespace_default_using_token' }]) do
|
326
331
|
filtered = emit({}, '
|
327
332
|
kubernetes_url https://localhost:8443
|
328
333
|
verify_ssl false
|
@@ -334,15 +339,16 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
334
339
|
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
335
340
|
},
|
336
341
|
'kubernetes' => {
|
337
|
-
'host'
|
338
|
-
'pod_name'
|
339
|
-
'container_name'
|
340
|
-
'container_image'
|
342
|
+
'host' => 'jimmi-redhat.localnet',
|
343
|
+
'pod_name' => 'fabric8-console-controller-98rqc',
|
344
|
+
'container_name' => 'fabric8-console-container',
|
345
|
+
'container_image' => 'fabric8/hawtio-kubernetes:latest',
|
341
346
|
'container_image_id' => 'docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303',
|
342
|
-
'namespace_name'
|
343
|
-
'namespace_id'
|
344
|
-
'pod_id'
|
345
|
-
'
|
347
|
+
'namespace_name' => 'default',
|
348
|
+
'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
|
349
|
+
'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
|
350
|
+
'pod_ip' => '172.17.0.8',
|
351
|
+
'master_url' => 'https://localhost:8443',
|
346
352
|
'labels' => {
|
347
353
|
'component' => 'fabric8Console'
|
348
354
|
}
|
@@ -355,14 +361,14 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
355
361
|
test 'with docker & kubernetes metadata but no configured api server' do
|
356
362
|
filtered = emit({}, '')
|
357
363
|
expected_kube_metadata = {
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
|
364
|
+
'docker' => {
|
365
|
+
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
366
|
+
},
|
367
|
+
'kubernetes' => {
|
368
|
+
'pod_name' => 'fabric8-console-controller-98rqc',
|
369
|
+
'container_name' => 'fabric8-console-container',
|
370
|
+
'namespace_name' => 'default'
|
371
|
+
}
|
366
372
|
}
|
367
373
|
assert_equal(expected_kube_metadata, filtered[0])
|
368
374
|
end
|
@@ -375,17 +381,17 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
375
381
|
)
|
376
382
|
stub_request(:any, 'https://localhost:8443/api/v1/namespaces/default/pods/fabric8-console-controller-98rqc').to_timeout
|
377
383
|
stub_request(:any, 'https://localhost:8443/api/v1/namespaces/default').to_timeout
|
378
|
-
filtered = emit
|
384
|
+
filtered = emit
|
379
385
|
expected_kube_metadata = {
|
380
386
|
'docker' => {
|
381
387
|
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
382
388
|
},
|
383
389
|
'kubernetes' => {
|
384
|
-
'pod_name'
|
385
|
-
'container_name'
|
386
|
-
'namespace_name'
|
390
|
+
'pod_name' => 'fabric8-console-controller-98rqc',
|
391
|
+
'container_name' => 'fabric8-console-container',
|
392
|
+
'namespace_name' => '.orphaned',
|
387
393
|
'orphaned_namespace' => 'default',
|
388
|
-
'namespace_id'
|
394
|
+
'namespace_id' => 'orphaned'
|
389
395
|
}
|
390
396
|
}
|
391
397
|
assert_equal(expected_kube_metadata, filtered[0])
|
@@ -404,9 +410,9 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
404
410
|
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
405
411
|
},
|
406
412
|
'kubernetes' => {
|
407
|
-
'pod_name'
|
408
|
-
'container_name'
|
409
|
-
'namespace_name'
|
413
|
+
'pod_name' => 'fabric8-console-controller.98rqc',
|
414
|
+
'container_name' => 'fabric8-console-container',
|
415
|
+
'namespace_name' => 'default'
|
410
416
|
}
|
411
417
|
}
|
412
418
|
assert_equal(expected_kube_metadata, filtered[0])
|
@@ -414,21 +420,21 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
414
420
|
|
415
421
|
test 'with docker metadata, non-kubernetes' do
|
416
422
|
filtered = emit_with_tag('non-kubernetes', {}, '')
|
417
|
-
assert_false(filtered[0].
|
423
|
+
assert_false(filtered[0].key?(:kubernetes))
|
418
424
|
end
|
419
425
|
|
420
426
|
test 'ignores invalid json in log field' do
|
421
427
|
json_log = "{'foo':123}"
|
422
428
|
msg = {
|
423
|
-
|
429
|
+
'log' => json_log
|
424
430
|
}
|
425
431
|
filtered = emit_with_tag('non-kubernetes', msg, '')
|
426
432
|
assert_equal(msg, filtered[0])
|
427
433
|
end
|
428
434
|
|
429
435
|
test 'with kubernetes dotted labels, de_dot enabled' do
|
430
|
-
VCR.use_cassettes([{name: 'valid_kubernetes_api_server'}, {name: 'kubernetes_get_api_v1'},
|
431
|
-
{name: 'kubernetes_docker_metadata_dotted_labels'}]) do
|
436
|
+
VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' },
|
437
|
+
{ name: 'kubernetes_docker_metadata_dotted_labels' }]) do
|
432
438
|
filtered = emit({}, '
|
433
439
|
kubernetes_url https://localhost:8443
|
434
440
|
watch false
|
@@ -436,21 +442,22 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
436
442
|
')
|
437
443
|
expected_kube_metadata = {
|
438
444
|
'docker' => {
|
439
|
-
|
445
|
+
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
440
446
|
},
|
441
447
|
'kubernetes' => {
|
442
|
-
'host'
|
443
|
-
'pod_name'
|
444
|
-
'container_name'
|
445
|
-
'container_image'
|
448
|
+
'host' => 'jimmi-redhat.localnet',
|
449
|
+
'pod_name' => 'fabric8-console-controller-98rqc',
|
450
|
+
'container_name' => 'fabric8-console-container',
|
451
|
+
'container_image' => 'fabric8/hawtio-kubernetes:latest',
|
446
452
|
'container_image_id' => 'docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303',
|
447
|
-
'namespace_id'
|
448
|
-
'namespace_labels'
|
453
|
+
'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
|
454
|
+
'namespace_labels' => {
|
449
455
|
'kubernetes_io/namespacetest' => 'somevalue'
|
450
456
|
},
|
451
|
-
'namespace_name'
|
452
|
-
'pod_id'
|
453
|
-
'
|
457
|
+
'namespace_name' => 'default',
|
458
|
+
'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
|
459
|
+
'pod_ip' => '172.17.0.8',
|
460
|
+
'master_url' => 'https://localhost:8443',
|
454
461
|
'labels' => {
|
455
462
|
'kubernetes_io/test' => 'somevalue'
|
456
463
|
}
|
@@ -461,8 +468,8 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
461
468
|
end
|
462
469
|
|
463
470
|
test 'with kubernetes dotted labels, de_dot disabled' do
|
464
|
-
VCR.use_cassettes([{name: 'valid_kubernetes_api_server'}, {name: 'kubernetes_get_api_v1'},
|
465
|
-
{name: 'kubernetes_docker_metadata_dotted_labels'}]) do
|
471
|
+
VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' },
|
472
|
+
{ name: 'kubernetes_docker_metadata_dotted_labels' }]) do
|
466
473
|
filtered = emit({}, '
|
467
474
|
kubernetes_url https://localhost:8443
|
468
475
|
watch false
|
@@ -471,21 +478,22 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
471
478
|
')
|
472
479
|
expected_kube_metadata = {
|
473
480
|
'docker' => {
|
474
|
-
|
481
|
+
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
475
482
|
},
|
476
483
|
'kubernetes' => {
|
477
|
-
'host'
|
478
|
-
'pod_name'
|
479
|
-
'container_name'
|
480
|
-
'container_image'
|
484
|
+
'host' => 'jimmi-redhat.localnet',
|
485
|
+
'pod_name' => 'fabric8-console-controller-98rqc',
|
486
|
+
'container_name' => 'fabric8-console-container',
|
487
|
+
'container_image' => 'fabric8/hawtio-kubernetes:latest',
|
481
488
|
'container_image_id' => 'docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303',
|
482
|
-
'namespace_id'
|
483
|
-
'namespace_labels'
|
489
|
+
'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
|
490
|
+
'namespace_labels' => {
|
484
491
|
'kubernetes.io/namespacetest' => 'somevalue'
|
485
492
|
},
|
486
|
-
'namespace_name'
|
487
|
-
'pod_id'
|
488
|
-
'
|
493
|
+
'namespace_name' => 'default',
|
494
|
+
'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
|
495
|
+
'pod_ip' => '172.17.0.8',
|
496
|
+
'master_url' => 'https://localhost:8443',
|
489
497
|
'labels' => {
|
490
498
|
'kubernetes.io/test' => 'somevalue'
|
491
499
|
}
|
@@ -511,8 +519,8 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
511
519
|
'CONTAINER_ID_FULL' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459',
|
512
520
|
'randomfield' => 'randomvalue'
|
513
521
|
}
|
514
|
-
VCR.use_cassettes([{name: 'valid_kubernetes_api_server'}, {name: 'kubernetes_get_api_v1'}, {name: 'kubernetes_get_pod'},
|
515
|
-
{name: 'kubernetes_get_namespace_default'}]) do
|
522
|
+
VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' }, { name: 'kubernetes_get_pod' },
|
523
|
+
{ name: 'kubernetes_get_namespace_default' }]) do
|
516
524
|
filtered = emit_with_tag(tag, msg, '
|
517
525
|
kubernetes_url https://localhost:8443
|
518
526
|
watch false
|
@@ -521,18 +529,19 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
521
529
|
')
|
522
530
|
expected_kube_metadata = {
|
523
531
|
'docker' => {
|
524
|
-
|
532
|
+
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
525
533
|
},
|
526
534
|
'kubernetes' => {
|
527
|
-
'host'
|
528
|
-
'pod_name'
|
529
|
-
'container_name'
|
530
|
-
'container_image'
|
535
|
+
'host' => 'jimmi-redhat.localnet',
|
536
|
+
'pod_name' => 'fabric8-console-controller-98rqc',
|
537
|
+
'container_name' => 'fabric8-console-container',
|
538
|
+
'container_image' => 'fabric8/hawtio-kubernetes:latest',
|
531
539
|
'container_image_id' => 'docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303',
|
532
|
-
'namespace_name'
|
533
|
-
'namespace_id'
|
534
|
-
'pod_id'
|
535
|
-
'
|
540
|
+
'namespace_name' => 'default',
|
541
|
+
'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
|
542
|
+
'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
|
543
|
+
'pod_ip' => '172.17.0.8',
|
544
|
+
'master_url' => 'https://localhost:8443',
|
536
545
|
'labels' => {
|
537
546
|
'component' => 'fabric8Console'
|
538
547
|
}
|
@@ -550,8 +559,8 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
550
559
|
'CONTAINER_ID_FULL' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459',
|
551
560
|
'randomfield' => 'randomvalue'
|
552
561
|
}
|
553
|
-
VCR.use_cassettes([{name: 'valid_kubernetes_api_server'}, {name: 'kubernetes_get_api_v1'}, {name: 'kubernetes_get_pod'},
|
554
|
-
{name: 'kubernetes_get_namespace_default', options: {allow_playback_repeats: true}}]) do
|
562
|
+
VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' }, { name: 'kubernetes_get_pod' },
|
563
|
+
{ name: 'kubernetes_get_namespace_default', options: { allow_playback_repeats: true } }]) do
|
555
564
|
filtered = emit_with_tag(tag, msg, '
|
556
565
|
kubernetes_url https://localhost:8443
|
557
566
|
watch false
|
@@ -560,18 +569,19 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
560
569
|
')
|
561
570
|
expected_kube_metadata = {
|
562
571
|
'docker' => {
|
563
|
-
|
572
|
+
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
564
573
|
},
|
565
574
|
'kubernetes' => {
|
566
|
-
'host'
|
567
|
-
'pod_name'
|
568
|
-
'container_name'
|
569
|
-
'container_image'
|
575
|
+
'host' => 'jimmi-redhat.localnet',
|
576
|
+
'pod_name' => 'fabric8-console-controller-98rqc',
|
577
|
+
'container_name' => 'fabric8-console-container',
|
578
|
+
'container_image' => 'fabric8/hawtio-kubernetes:latest',
|
570
579
|
'container_image_id' => 'docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303',
|
571
|
-
'namespace_name'
|
572
|
-
'namespace_id'
|
573
|
-
'pod_id'
|
574
|
-
'
|
580
|
+
'namespace_name' => 'default',
|
581
|
+
'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
|
582
|
+
'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
|
583
|
+
'pod_ip' => '172.17.0.8',
|
584
|
+
'master_url' => 'https://localhost:8443',
|
575
585
|
'labels' => {
|
576
586
|
'component' => 'fabric8Console'
|
577
587
|
}
|
@@ -592,12 +602,12 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
592
602
|
'pod_name' => 'k8s-pod-name',
|
593
603
|
'container_name' => 'k8s-container-name'
|
594
604
|
},
|
595
|
-
'docker' => {'container_id' => 'e463bc0d3ae38f5c89d92dca49b30e049e899799920b79d4d5f705acbe82ba95'},
|
605
|
+
'docker' => { 'container_id' => 'e463bc0d3ae38f5c89d92dca49b30e049e899799920b79d4d5f705acbe82ba95' },
|
596
606
|
'randomfield' => 'randomvalue'
|
597
607
|
}
|
598
|
-
VCR.use_cassettes([{name: 'valid_kubernetes_api_server'}, {name: 'kubernetes_get_api_v1'}, {name: 'kubernetes_get_pod'},
|
599
|
-
{name: 'kubernetes_get_namespace_default'},
|
600
|
-
{name: 'metadata_from_tag_journald_and_kubernetes_fields'}]) do
|
608
|
+
VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' }, { name: 'kubernetes_get_pod' },
|
609
|
+
{ name: 'kubernetes_get_namespace_default' },
|
610
|
+
{ name: 'metadata_from_tag_journald_and_kubernetes_fields' }]) do
|
601
611
|
es = emit_with_tag(tag, msg, '
|
602
612
|
kubernetes_url https://localhost:8443
|
603
613
|
watch false
|
@@ -605,23 +615,24 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
605
615
|
')
|
606
616
|
expected_kube_metadata = {
|
607
617
|
'docker' => {
|
608
|
-
|
618
|
+
'container_id' => 'e463bc0d3ae38f5c89d92dca49b30e049e899799920b79d4d5f705acbe82ba95'
|
609
619
|
},
|
610
620
|
'kubernetes' => {
|
611
|
-
'host'
|
612
|
-
'pod_name'
|
613
|
-
'container_name'
|
614
|
-
'container_image'
|
621
|
+
'host' => 'jimmi-redhat.localnet',
|
622
|
+
'pod_name' => 'k8s-pod-name',
|
623
|
+
'container_name' => 'k8s-container-name',
|
624
|
+
'container_image' => 'k8s-container-image:latest',
|
615
625
|
'container_image_id' => 'docker://d78c5217c41e9af08d37d9ae2cb070afa1fe3da6bc77bfb18879a8b4bfdf8a34',
|
616
|
-
'namespace_name'
|
617
|
-
'namespace_id'
|
618
|
-
'pod_id'
|
619
|
-
'
|
626
|
+
'namespace_name' => 'k8s-namespace-name',
|
627
|
+
'namespace_id' => '8e0dc8fc-59f2-49f7-a3e2-ed0913e19d9f',
|
628
|
+
'pod_id' => 'ebabf749-5fcd-4750-a3f0-aedd89476da8',
|
629
|
+
'pod_ip' => '172.17.0.8',
|
630
|
+
'master_url' => 'https://localhost:8443',
|
620
631
|
'labels' => {
|
621
632
|
'component' => 'k8s-test'
|
622
633
|
}
|
623
634
|
}
|
624
|
-
}.merge(msg) {|key,oldval,newval| (
|
635
|
+
}.merge(msg) { |key, oldval, newval| (key == 'kubernetes') || (key == 'docker') ? oldval : newval }
|
625
636
|
assert_equal(expected_kube_metadata, es[0])
|
626
637
|
end
|
627
638
|
end
|
@@ -637,12 +648,12 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
637
648
|
'pod_name' => 'k8s-pod-name',
|
638
649
|
'container_name' => 'k8s-container-name'
|
639
650
|
},
|
640
|
-
'docker' => {'container_id' => 'e463bc0d3ae38f5c89d92dca49b30e049e899799920b79d4d5f705acbe82ba95'},
|
651
|
+
'docker' => { 'container_id' => 'e463bc0d3ae38f5c89d92dca49b30e049e899799920b79d4d5f705acbe82ba95' },
|
641
652
|
'randomfield' => 'randomvalue'
|
642
653
|
}
|
643
|
-
VCR.use_cassettes([{name: 'valid_kubernetes_api_server'}, {name: 'kubernetes_get_api_v1'}, {name: 'kubernetes_get_pod'},
|
644
|
-
{name: 'kubernetes_get_namespace_default', options: {allow_playback_repeats: true}},
|
645
|
-
{name: 'metadata_from_tag_and_journald_fields'}]) do
|
654
|
+
VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' }, { name: 'kubernetes_get_pod' },
|
655
|
+
{ name: 'kubernetes_get_namespace_default', options: { allow_playback_repeats: true } },
|
656
|
+
{ name: 'metadata_from_tag_and_journald_fields' }]) do
|
646
657
|
es = emit_with_tag(tag, msg, '
|
647
658
|
kubernetes_url https://localhost:8443
|
648
659
|
watch false
|
@@ -651,23 +662,24 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
651
662
|
')
|
652
663
|
expected_kube_metadata = {
|
653
664
|
'docker' => {
|
654
|
-
|
665
|
+
'container_id' => '838350c64bacba968d39a30a50789b2795291fceca6ccbff55298671d46b0e3b'
|
655
666
|
},
|
656
667
|
'kubernetes' => {
|
657
|
-
'host'
|
658
|
-
'pod_name'
|
659
|
-
'container_name'
|
660
|
-
'container_image'
|
668
|
+
'host' => 'jimmi-redhat.localnet',
|
669
|
+
'pod_name' => 'journald-pod-name',
|
670
|
+
'container_name' => 'journald-container-name',
|
671
|
+
'container_image' => 'journald-container-image:latest',
|
661
672
|
'container_image_id' => 'docker://dda4c95705fb7050b701b10a7fe928ca5bc971a1dcb521ae3c339194cbf36b47',
|
662
|
-
'namespace_name'
|
663
|
-
'namespace_id'
|
664
|
-
'pod_id'
|
665
|
-
'
|
673
|
+
'namespace_name' => 'journald-namespace-name',
|
674
|
+
'namespace_id' => '8282888f-733f-4f23-a3d3-1fdfa3bdacf2',
|
675
|
+
'pod_id' => '5e1c1e27-b637-4e81-80b6-6d8a8c404d3b',
|
676
|
+
'pod_ip' => '172.17.0.8',
|
677
|
+
'master_url' => 'https://localhost:8443',
|
666
678
|
'labels' => {
|
667
679
|
'component' => 'journald-test'
|
668
680
|
}
|
669
681
|
}
|
670
|
-
}.merge(msg) {|key,oldval,newval| (
|
682
|
+
}.merge(msg) { |key, oldval, newval| (key == 'kubernetes') || (key == 'docker') ? oldval : newval }
|
671
683
|
assert_equal(expected_kube_metadata, es[0])
|
672
684
|
end
|
673
685
|
end
|
@@ -683,12 +695,12 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
683
695
|
'pod_name' => 'k8s-pod-name',
|
684
696
|
'container_name' => 'k8s-container-name'
|
685
697
|
},
|
686
|
-
'docker' => {'container_id' => 'e463bc0d3ae38f5c89d92dca49b30e049e899799920b79d4d5f705acbe82ba95'},
|
698
|
+
'docker' => { 'container_id' => 'e463bc0d3ae38f5c89d92dca49b30e049e899799920b79d4d5f705acbe82ba95' },
|
687
699
|
'randomfield' => 'randomvalue'
|
688
700
|
}
|
689
|
-
VCR.use_cassettes([{name: 'valid_kubernetes_api_server'}, {name: 'kubernetes_get_api_v1'}, {name: 'kubernetes_get_pod'},
|
690
|
-
{name: 'kubernetes_get_namespace_default', options: {allow_playback_repeats: true}},
|
691
|
-
{name: 'metadata_from_tag_and_journald_fields'}]) do
|
701
|
+
VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' }, { name: 'kubernetes_get_pod' },
|
702
|
+
{ name: 'kubernetes_get_namespace_default', options: { allow_playback_repeats: true } },
|
703
|
+
{ name: 'metadata_from_tag_and_journald_fields' }]) do
|
692
704
|
es = emit_with_tag(tag, msg, '
|
693
705
|
kubernetes_url https://localhost:8443
|
694
706
|
watch false
|
@@ -698,59 +710,61 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
698
710
|
')
|
699
711
|
expected_kube_metadata = {
|
700
712
|
'docker' => {
|
701
|
-
|
713
|
+
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
702
714
|
},
|
703
715
|
'kubernetes' => {
|
704
|
-
'host'
|
705
|
-
'pod_name'
|
706
|
-
'container_name'
|
707
|
-
'container_image'
|
716
|
+
'host' => 'jimmi-redhat.localnet',
|
717
|
+
'pod_name' => 'fabric8-console-controller-98rqc',
|
718
|
+
'container_name' => 'fabric8-console-container',
|
719
|
+
'container_image' => 'fabric8/hawtio-kubernetes:latest',
|
708
720
|
'container_image_id' => 'docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303',
|
709
|
-
'namespace_name'
|
710
|
-
'namespace_id'
|
711
|
-
'pod_id'
|
712
|
-
'
|
721
|
+
'namespace_name' => 'default',
|
722
|
+
'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
|
723
|
+
'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
|
724
|
+
'pod_ip' => '172.17.0.8',
|
725
|
+
'master_url' => 'https://localhost:8443',
|
713
726
|
'labels' => {
|
714
727
|
'component' => 'fabric8Console'
|
715
728
|
}
|
716
729
|
}
|
717
|
-
}.merge(msg) {|key,oldval,newval| (
|
730
|
+
}.merge(msg) { |key, oldval, newval| (key == 'kubernetes') || (key == 'docker') ? oldval : newval }
|
718
731
|
assert_equal(expected_kube_metadata, es[0])
|
719
732
|
end
|
720
733
|
end
|
721
734
|
|
722
735
|
test 'with kubernetes annotations' do
|
723
|
-
VCR.use_cassettes([{name: 'valid_kubernetes_api_server'}, {name: 'kubernetes_get_api_v1'},
|
724
|
-
{name: 'kubernetes_docker_metadata_annotations'},
|
725
|
-
{name: 'kubernetes_get_namespace_default'}]) do
|
726
|
-
filtered = emit({},'
|
736
|
+
VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' },
|
737
|
+
{ name: 'kubernetes_docker_metadata_annotations' },
|
738
|
+
{ name: 'kubernetes_get_namespace_default' }]) do
|
739
|
+
filtered = emit({}, '
|
727
740
|
kubernetes_url https://localhost:8443
|
728
741
|
watch false
|
729
742
|
cache_size 1
|
730
743
|
annotation_match [ "^custom.+", "two"]
|
731
744
|
')
|
732
745
|
expected_kube_metadata = {
|
733
|
-
|
734
|
-
|
746
|
+
'docker' => {
|
747
|
+
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
748
|
+
},
|
749
|
+
'kubernetes' => {
|
750
|
+
'host' => 'jimmi-redhat.localnet',
|
751
|
+
'pod_name' => 'fabric8-console-controller-98rqc',
|
752
|
+
'container_name' => 'fabric8-console-container',
|
753
|
+
'container_image' => 'fabric8/hawtio-kubernetes:latest',
|
754
|
+
'container_image_id' => 'docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303',
|
755
|
+
'namespace_name' => 'default',
|
756
|
+
'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
|
757
|
+
'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
|
758
|
+
'pod_ip' => '172.17.0.8',
|
759
|
+
'master_url' => 'https://localhost:8443',
|
760
|
+
'labels' => {
|
761
|
+
'component' => 'fabric8Console'
|
735
762
|
},
|
736
|
-
'
|
737
|
-
|
738
|
-
|
739
|
-
'container_name' => 'fabric8-console-container',
|
740
|
-
'container_image' => 'fabric8/hawtio-kubernetes:latest',
|
741
|
-
'container_image_id' => 'docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303',
|
742
|
-
'namespace_name' => 'default',
|
743
|
-
'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
|
744
|
-
'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
|
745
|
-
'master_url' => 'https://localhost:8443',
|
746
|
-
'labels' => {
|
747
|
-
'component' => 'fabric8Console'
|
748
|
-
},
|
749
|
-
'annotations' => {
|
750
|
-
'custom_field1' => 'hello_kitty',
|
751
|
-
'field_two' => 'value'
|
752
|
-
}
|
763
|
+
'annotations' => {
|
764
|
+
'custom_field1' => 'hello_kitty',
|
765
|
+
'field_two' => 'value'
|
753
766
|
}
|
767
|
+
}
|
754
768
|
}
|
755
769
|
assert_equal(expected_kube_metadata, filtered[0])
|
756
770
|
end
|
@@ -765,12 +779,12 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
765
779
|
'randomfield' => 'randomvalue'
|
766
780
|
}
|
767
781
|
VCR.use_cassettes([
|
768
|
-
|
769
|
-
|
770
|
-
|
771
|
-
|
772
|
-
|
773
|
-
|
782
|
+
{ name: 'valid_kubernetes_api_server' },
|
783
|
+
{ name: 'kubernetes_get_api_v1' },
|
784
|
+
{ name: 'kubernetes_get_pod' },
|
785
|
+
{ name: 'kubernetes_get_namespace_default' },
|
786
|
+
{ name: 'metadata_from_tag_and_journald_fields' }
|
787
|
+
]) do
|
774
788
|
filtered = emit_with_tag(tag, msg, '
|
775
789
|
kubernetes_url https://localhost:8443
|
776
790
|
watch false
|
@@ -779,18 +793,19 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
779
793
|
')
|
780
794
|
expected_kube_metadata = {
|
781
795
|
'docker' => {
|
782
|
-
|
796
|
+
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
783
797
|
},
|
784
798
|
'kubernetes' => {
|
785
|
-
'host'
|
786
|
-
'pod_name'
|
787
|
-
'container_name'
|
788
|
-
'container_image'
|
799
|
+
'host' => 'jimmi-redhat.localnet',
|
800
|
+
'pod_name' => 'fabric8-console-controller-98rqc',
|
801
|
+
'container_name' => 'fabric8-console-container',
|
802
|
+
'container_image' => 'fabric8/hawtio-kubernetes:latest',
|
789
803
|
'container_image_id' => 'docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303',
|
790
|
-
'namespace_name'
|
791
|
-
'namespace_id'
|
792
|
-
'pod_id'
|
793
|
-
'
|
804
|
+
'namespace_name' => 'default',
|
805
|
+
'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
|
806
|
+
'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
|
807
|
+
'pod_ip' => '172.17.0.8',
|
808
|
+
'master_url' => 'https://localhost:8443',
|
794
809
|
'labels' => {
|
795
810
|
'component' => 'fabric8Console'
|
796
811
|
}
|
@@ -801,73 +816,75 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
801
816
|
end
|
802
817
|
|
803
818
|
test 'with kubernetes namespace annotations' do
|
804
|
-
VCR.use_cassettes([{name: 'valid_kubernetes_api_server'}, {name: 'kubernetes_get_api_v1'},
|
805
|
-
{name: 'kubernetes_docker_metadata_annotations'},
|
806
|
-
{name: 'kubernetes_get_namespace_default'}]) do
|
807
|
-
filtered = emit({},'
|
819
|
+
VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' },
|
820
|
+
{ name: 'kubernetes_docker_metadata_annotations' },
|
821
|
+
{ name: 'kubernetes_get_namespace_default' }]) do
|
822
|
+
filtered = emit({}, '
|
808
823
|
kubernetes_url https://localhost:8443
|
809
824
|
watch false
|
810
825
|
cache_size 1
|
811
826
|
annotation_match [ "^custom.+", "two", "workspace*"]
|
812
827
|
')
|
813
828
|
expected_kube_metadata = {
|
814
|
-
|
815
|
-
|
829
|
+
'docker' => {
|
830
|
+
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
831
|
+
},
|
832
|
+
'kubernetes' => {
|
833
|
+
'host' => 'jimmi-redhat.localnet',
|
834
|
+
'pod_name' => 'fabric8-console-controller-98rqc',
|
835
|
+
'container_name' => 'fabric8-console-container',
|
836
|
+
'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
|
837
|
+
'namespace_name' => 'default',
|
838
|
+
'container_image' => 'fabric8/hawtio-kubernetes:latest',
|
839
|
+
'container_image_id' => 'docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303',
|
840
|
+
'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
|
841
|
+
'pod_ip' => '172.17.0.8',
|
842
|
+
'master_url' => 'https://localhost:8443',
|
843
|
+
'labels' => {
|
844
|
+
'component' => 'fabric8Console'
|
845
|
+
},
|
846
|
+
'annotations' => {
|
847
|
+
'custom_field1' => 'hello_kitty',
|
848
|
+
'field_two' => 'value'
|
816
849
|
},
|
817
|
-
'
|
818
|
-
|
819
|
-
'pod_name' => 'fabric8-console-controller-98rqc',
|
820
|
-
'container_name' => 'fabric8-console-container',
|
821
|
-
'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
|
822
|
-
'namespace_name' => 'default',
|
823
|
-
'container_image' => 'fabric8/hawtio-kubernetes:latest',
|
824
|
-
'container_image_id' => 'docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303',
|
825
|
-
'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
|
826
|
-
'master_url' => 'https://localhost:8443',
|
827
|
-
'labels' => {
|
828
|
-
'component' => 'fabric8Console'
|
829
|
-
},
|
830
|
-
'annotations' => {
|
831
|
-
'custom_field1' => 'hello_kitty',
|
832
|
-
'field_two' => 'value'
|
833
|
-
},
|
834
|
-
'namespace_annotations' => {
|
835
|
-
'workspaceId' => 'myWorkspaceName'
|
836
|
-
}
|
850
|
+
'namespace_annotations' => {
|
851
|
+
'workspaceId' => 'myWorkspaceName'
|
837
852
|
}
|
853
|
+
}
|
838
854
|
}
|
839
855
|
assert_equal(expected_kube_metadata, filtered[0])
|
840
856
|
end
|
841
857
|
end
|
842
858
|
|
843
859
|
test 'with kubernetes namespace annotations no match' do
|
844
|
-
VCR.use_cassettes([{name: 'valid_kubernetes_api_server'}, {name: 'kubernetes_get_api_v1'},
|
845
|
-
{name: 'kubernetes_docker_metadata_annotations'},
|
846
|
-
{name: 'kubernetes_get_namespace_default'}]) do
|
847
|
-
filtered = emit({},'
|
860
|
+
VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' },
|
861
|
+
{ name: 'kubernetes_docker_metadata_annotations' },
|
862
|
+
{ name: 'kubernetes_get_namespace_default' }]) do
|
863
|
+
filtered = emit({}, '
|
848
864
|
kubernetes_url https://localhost:8443
|
849
865
|
watch false
|
850
866
|
cache_size 1
|
851
867
|
annotation_match [ "noMatch*"]
|
852
868
|
')
|
853
869
|
expected_kube_metadata = {
|
854
|
-
|
855
|
-
|
856
|
-
|
857
|
-
|
858
|
-
|
859
|
-
|
860
|
-
|
861
|
-
|
862
|
-
|
863
|
-
|
864
|
-
|
865
|
-
|
866
|
-
|
867
|
-
|
868
|
-
|
869
|
-
|
870
|
+
'docker' => {
|
871
|
+
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
872
|
+
},
|
873
|
+
'kubernetes' => {
|
874
|
+
'host' => 'jimmi-redhat.localnet',
|
875
|
+
'pod_name' => 'fabric8-console-controller-98rqc',
|
876
|
+
'container_name' => 'fabric8-console-container',
|
877
|
+
'container_image' => 'fabric8/hawtio-kubernetes:latest',
|
878
|
+
'container_image_id' => 'docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303',
|
879
|
+
'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
|
880
|
+
'namespace_name' => 'default',
|
881
|
+
'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
|
882
|
+
'pod_ip' => '172.17.0.8',
|
883
|
+
'master_url' => 'https://localhost:8443',
|
884
|
+
'labels' => {
|
885
|
+
'component' => 'fabric8Console'
|
870
886
|
}
|
887
|
+
}
|
871
888
|
}
|
872
889
|
assert_equal(expected_kube_metadata, filtered[0])
|
873
890
|
end
|
@@ -880,9 +897,9 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
880
897
|
'CONTAINER_ID_FULL' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459',
|
881
898
|
'randomfield' => 'randomvalue'
|
882
899
|
}
|
883
|
-
VCR.use_cassettes([{name: 'valid_kubernetes_api_server'}, {name: 'kubernetes_get_api_v1'},
|
884
|
-
{name: 'kubernetes_docker_metadata_annotations'},
|
885
|
-
{name: 'kubernetes_get_namespace_default'}]) do
|
900
|
+
VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' },
|
901
|
+
{ name: 'kubernetes_docker_metadata_annotations' },
|
902
|
+
{ name: 'kubernetes_get_namespace_default' }]) do
|
886
903
|
filtered = emit_with_tag(tag, msg, '
|
887
904
|
kubernetes_url https://localhost:8443
|
888
905
|
watch false
|
@@ -905,9 +922,9 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
905
922
|
'CONTAINER_ID_FULL' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459',
|
906
923
|
'randomfield' => 'randomvalue'
|
907
924
|
}
|
908
|
-
VCR.use_cassettes([{name: 'valid_kubernetes_api_server'}, {name: 'kubernetes_get_api_v1'},
|
909
|
-
{name: 'kubernetes_docker_metadata_annotations'},
|
910
|
-
{name: 'kubernetes_get_namespace_default'}]) do
|
925
|
+
VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' },
|
926
|
+
{ name: 'kubernetes_docker_metadata_annotations' },
|
927
|
+
{ name: 'kubernetes_get_namespace_default' }]) do
|
911
928
|
filtered = emit_with_tag(tag, msg, '
|
912
929
|
kubernetes_url https://localhost:8443
|
913
930
|
watch false
|
@@ -924,10 +941,10 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
924
941
|
end
|
925
942
|
|
926
943
|
test 'processes all events when reading from MessagePackEventStream' do
|
927
|
-
VCR.use_cassettes([{name: 'valid_kubernetes_api_server'}, {name: 'kubernetes_get_api_v1'},
|
928
|
-
{name: 'kubernetes_get_pod'},
|
929
|
-
{name: 'kubernetes_get_namespace_default'}]) do
|
930
|
-
entries = [[@time, {'time'=>'2015-05-08T09:22:01Z'}], [@time, {'time'=>'2015-05-08T09:22:01Z'}]]
|
944
|
+
VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' },
|
945
|
+
{ name: 'kubernetes_get_pod' },
|
946
|
+
{ name: 'kubernetes_get_namespace_default' }]) do
|
947
|
+
entries = [[@time, { 'time' => '2015-05-08T09:22:01Z' }], [@time, { 'time' => '2015-05-08T09:22:01Z' }]]
|
931
948
|
array_stream = Fluent::ArrayEventStream.new(entries)
|
932
949
|
msgpack_stream = Fluent::MessagePackEventStream.new(array_stream.to_msgpack_stream)
|
933
950
|
|
@@ -936,30 +953,31 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
936
953
|
watch false
|
937
954
|
cache_size 1
|
938
955
|
')
|
939
|
-
d.run
|
956
|
+
d.run do
|
940
957
|
d.feed(DEFAULT_TAG, msgpack_stream)
|
941
|
-
|
942
|
-
filtered = d.filtered.map
|
958
|
+
end
|
959
|
+
filtered = d.filtered.map(&:last)
|
943
960
|
|
944
961
|
expected_kube_metadata = {
|
945
|
-
|
946
|
-
|
947
|
-
|
948
|
-
|
949
|
-
|
950
|
-
|
951
|
-
|
952
|
-
|
953
|
-
|
954
|
-
|
955
|
-
|
956
|
-
|
957
|
-
|
958
|
-
|
959
|
-
|
960
|
-
|
961
|
-
|
962
|
+
'time' => '2015-05-08T09:22:01Z',
|
963
|
+
'docker' => {
|
964
|
+
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
965
|
+
},
|
966
|
+
'kubernetes' => {
|
967
|
+
'host' => 'jimmi-redhat.localnet',
|
968
|
+
'pod_name' => 'fabric8-console-controller-98rqc',
|
969
|
+
'container_name' => 'fabric8-console-container',
|
970
|
+
'container_image' => 'fabric8/hawtio-kubernetes:latest',
|
971
|
+
'container_image_id' => 'docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303',
|
972
|
+
'namespace_name' => 'default',
|
973
|
+
'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
|
974
|
+
'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
|
975
|
+
'pod_ip' => '172.17.0.8',
|
976
|
+
'master_url' => 'https://localhost:8443',
|
977
|
+
'labels' => {
|
978
|
+
'component' => 'fabric8Console'
|
962
979
|
}
|
980
|
+
}
|
963
981
|
}
|
964
982
|
|
965
983
|
assert_equal(expected_kube_metadata, filtered[0])
|
@@ -968,9 +986,9 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
968
986
|
end
|
969
987
|
|
970
988
|
test 'with docker & kubernetes metadata using skip config params' do
|
971
|
-
VCR.use_cassettes([{name: 'valid_kubernetes_api_server'}, {name: 'kubernetes_get_api_v1'}, {name: 'kubernetes_get_pod'},
|
972
|
-
{name: 'kubernetes_get_namespace_default'}]) do
|
973
|
-
filtered = emit({},'
|
989
|
+
VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' }, { name: 'kubernetes_get_pod' },
|
990
|
+
{ name: 'kubernetes_get_namespace_default' }]) do
|
991
|
+
filtered = emit({}, '
|
974
992
|
kubernetes_url https://localhost:8443
|
975
993
|
watch false
|
976
994
|
cache_size 1
|
@@ -980,16 +998,17 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
980
998
|
skip_namespace_metadata true
|
981
999
|
')
|
982
1000
|
expected_kube_metadata = {
|
983
|
-
|
984
|
-
|
985
|
-
|
986
|
-
|
987
|
-
|
988
|
-
|
989
|
-
|
990
|
-
|
991
|
-
|
992
|
-
|
1001
|
+
'docker' => {
|
1002
|
+
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
1003
|
+
},
|
1004
|
+
'kubernetes' => {
|
1005
|
+
'host' => 'jimmi-redhat.localnet',
|
1006
|
+
'pod_name' => 'fabric8-console-controller-98rqc',
|
1007
|
+
'container_name' => 'fabric8-console-container',
|
1008
|
+
'namespace_name' => 'default',
|
1009
|
+
'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
|
1010
|
+
'pod_ip' => '172.17.0.8'
|
1011
|
+
}
|
993
1012
|
}
|
994
1013
|
|
995
1014
|
assert_equal(expected_kube_metadata, filtered[0])
|