fluent-plugin-kubernetes_metadata_filter 1.2.2 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/Gemfile +1 -5
- data/README.md +3 -35
- data/circle.yml +2 -0
- data/fluent-plugin-kubernetes_metadata_filter.gemspec +4 -13
- data/lib/fluent/plugin/filter_kubernetes_metadata.rb +116 -79
- data/lib/fluent/plugin/kubernetes_metadata_cache_strategy.rb +1 -1
- data/lib/fluent/plugin/kubernetes_metadata_common.rb +0 -46
- data/lib/fluent/plugin/kubernetes_metadata_watch_pods.rb +0 -3
- data/test/cassettes/kubernetes_docker_metadata_using_bearer_token.yml +1 -1
- data/test/plugin/test_filter_kubernetes_metadata.rb +247 -345
- data/test/plugin/test_watch_pods.rb +3 -46
- metadata +13 -10
- data/test/cassettes/metadata_from_tag_and_journald_fields.yml +0 -408
- data/test/cassettes/metadata_from_tag_journald_and_kubernetes_fields.yml +0 -540
@@ -18,6 +18,7 @@
|
|
18
18
|
#
|
19
19
|
module KubernetesMetadata
|
20
20
|
module CacheStrategy
|
21
|
+
|
21
22
|
def get_pod_metadata(key, namespace_name, pod_name, record_create_time, batch_miss_cache)
|
22
23
|
metadata = {}
|
23
24
|
ids = @id_cache[key]
|
@@ -83,7 +84,6 @@ module KubernetesMetadata
|
|
83
84
|
end
|
84
85
|
@id_cache[key] = ids unless batch_miss_cache.key?("#{namespace_name}_#{pod_name}")
|
85
86
|
end
|
86
|
-
|
87
87
|
# remove namespace info that is only used for comparison
|
88
88
|
metadata.delete('creation_timestamp')
|
89
89
|
metadata.delete_if{|k,v| v.nil?}
|
@@ -54,30 +54,10 @@ module KubernetesMetadata
|
|
54
54
|
self.de_dot!(labels)
|
55
55
|
self.de_dot!(annotations)
|
56
56
|
end
|
57
|
-
|
58
|
-
# collect container informations
|
59
|
-
container_meta = {}
|
60
|
-
begin
|
61
|
-
pod_object['status']['containerStatuses'].each do|container_status|
|
62
|
-
# get plain container id (eg. docker://hash -> hash)
|
63
|
-
container_id = container_status['containerID'].sub /^[-_a-zA-Z0-9]+:\/\//, ''
|
64
|
-
container_meta[container_id] = {
|
65
|
-
'name' => container_status['name'],
|
66
|
-
'image' => container_status['image'],
|
67
|
-
'image_id' => container_status['imageID']
|
68
|
-
}
|
69
|
-
end
|
70
|
-
rescue
|
71
|
-
log.on_debug do
|
72
|
-
log.debug("parsing container meta information failed for: #{pod_object['metadata']['namespace']}/#{pod_object['metadata']['name']} ")
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
57
|
kubernetes_metadata = {
|
77
58
|
'namespace_name' => pod_object['metadata']['namespace'],
|
78
59
|
'pod_id' => pod_object['metadata']['uid'],
|
79
60
|
'pod_name' => pod_object['metadata']['name'],
|
80
|
-
'containers' => syms_to_strs(container_meta),
|
81
61
|
'labels' => labels,
|
82
62
|
'host' => pod_object['spec']['nodeName'],
|
83
63
|
'master_url' => @kubernetes_url
|
@@ -103,29 +83,3 @@ module KubernetesMetadata
|
|
103
83
|
|
104
84
|
end
|
105
85
|
end
|
106
|
-
|
107
|
-
# copied from activesupport
|
108
|
-
class Object
|
109
|
-
# An object is blank if it's false, empty, or a whitespace string.
|
110
|
-
# For example, +nil+, '', ' ', [], {}, and +false+ are all blank.
|
111
|
-
#
|
112
|
-
# This simplifies
|
113
|
-
#
|
114
|
-
# !address || address.empty?
|
115
|
-
#
|
116
|
-
# to
|
117
|
-
#
|
118
|
-
# address.blank?
|
119
|
-
#
|
120
|
-
# @return [true, false]
|
121
|
-
def blank?
|
122
|
-
respond_to?(:empty?) ? !!empty? : !self
|
123
|
-
end
|
124
|
-
|
125
|
-
# An object is present if it's not blank.
|
126
|
-
#
|
127
|
-
# @return [true, false]
|
128
|
-
def present?
|
129
|
-
!blank?
|
130
|
-
end
|
131
|
-
end
|
@@ -42,9 +42,6 @@ module KubernetesMetadata
|
|
42
42
|
if cached
|
43
43
|
@cache[cache_key] = parse_pod_metadata(notice.object)
|
44
44
|
@stats.bump(:pod_cache_watch_updates)
|
45
|
-
elsif ENV['K8S_NODE_NAME'] == notice.object['spec']['nodeName'] then
|
46
|
-
@cache[cache_key] = parse_pod_metadata(notice.object)
|
47
|
-
@stats.bump(:pod_cache_host_updates)
|
48
45
|
else
|
49
46
|
@stats.bump(:pod_cache_watch_misses)
|
50
47
|
end
|
@@ -174,7 +174,7 @@ http_interactions:
|
|
174
174
|
"restartCount": 2,
|
175
175
|
"image": "fabric8/hawtio-kubernetes:latest",
|
176
176
|
"imageID": "docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303",
|
177
|
-
"containerID": "docker://
|
177
|
+
"containerID": "docker://1b1d1f61c1205fe73328c75b2945e2ce05acfba2fde16299a8103fb22e9ec58a"
|
178
178
|
},
|
179
179
|
{
|
180
180
|
"name": "POD",
|
@@ -17,6 +17,7 @@
|
|
17
17
|
# limitations under the License.
|
18
18
|
#
|
19
19
|
require_relative '../helper'
|
20
|
+
require 'fluent/test/driver/filter'
|
20
21
|
require 'fluent/plugin/filter_kubernetes_metadata'
|
21
22
|
|
22
23
|
require 'webmock/test_unit'
|
@@ -30,8 +31,10 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
30
31
|
@time = Fluent::Engine.now
|
31
32
|
end
|
32
33
|
|
34
|
+
DEFAULT_TAG = 'var.log.containers.fabric8-console-controller-98rqc_default_fabric8-console-container-49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459.log'
|
35
|
+
|
33
36
|
def create_driver(conf = '')
|
34
|
-
Test::
|
37
|
+
Test::Driver::Filter.new(Plugin::KubernetesMetadataFilter).configure(conf)
|
35
38
|
end
|
36
39
|
|
37
40
|
sub_test_case 'configure' do
|
@@ -84,8 +87,8 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
84
87
|
|
85
88
|
Dir.mktmpdir { |dir|
|
86
89
|
# Fake token file and CA crt.
|
87
|
-
expected_cert_path = File.join(dir, KubernetesMetadataFilter::K8_POD_CA_CERT)
|
88
|
-
expected_token_path = File.join(dir, KubernetesMetadataFilter::K8_POD_TOKEN)
|
90
|
+
expected_cert_path = File.join(dir, Plugin::KubernetesMetadataFilter::K8_POD_CA_CERT)
|
91
|
+
expected_token_path = File.join(dir, Plugin::KubernetesMetadataFilter::K8_POD_TOKEN)
|
89
92
|
|
90
93
|
File.open(expected_cert_path, "w") {}
|
91
94
|
File.open(expected_token_path, "w") {}
|
@@ -137,9 +140,16 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
137
140
|
cache_size 1
|
138
141
|
', d: nil)
|
139
142
|
d = create_driver(config) if d.nil?
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
+
if ENV['LOGLEVEL']
|
144
|
+
logger = Logger.new(STDOUT)
|
145
|
+
logger.level = eval("Logger::#{ENV['LOGLEVEL'].upcase}")
|
146
|
+
instance = d.instance
|
147
|
+
instance.instance_variable_set(:@log,logger)
|
148
|
+
end
|
149
|
+
d.run(default_tag: DEFAULT_TAG) {
|
150
|
+
d.feed(@time, msg)
|
151
|
+
}
|
152
|
+
d.filtered.map{|e| e.last}
|
143
153
|
end
|
144
154
|
|
145
155
|
def emit_with_tag(tag, msg={}, config='
|
@@ -148,45 +158,10 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
148
158
|
cache_size 1
|
149
159
|
')
|
150
160
|
d = create_driver(config)
|
151
|
-
d.run {
|
152
|
-
d.
|
153
|
-
}
|
154
|
-
|
155
|
-
|
156
|
-
test 'nil event stream' do
|
157
|
-
#not certain how this is possible but adding test to properly
|
158
|
-
#guard against this condition we have seen - test for nil,
|
159
|
-
#empty, no empty method, not an event stream
|
160
|
-
plugin = create_driver.instance
|
161
|
-
plugin.filter_stream('tag', nil)
|
162
|
-
plugin.filter_stream('tag', Fluent::MultiEventStream.new)
|
163
|
-
end
|
164
|
-
|
165
|
-
test 'inability to connect to the api server handles exception and doensnt block pipeline' do
|
166
|
-
VCR.use_cassette('kubernetes_docker_metadata') do
|
167
|
-
driver = create_driver('
|
168
|
-
kubernetes_url https://localhost:8443
|
169
|
-
watch false
|
170
|
-
cache_size 1
|
171
|
-
')
|
172
|
-
stub_request(:any, 'https://localhost:8443/api/v1/namespaces/default/pods/fabric8-console-controller-98rqc').to_raise(SocketError.new('error from pod fetch'))
|
173
|
-
stub_request(:any, 'https://localhost:8443/api/v1/namespaces/default').to_raise(SocketError.new('socket error from namespace fetch'))
|
174
|
-
es = emit({'time'=>'2015-05-08T09:22:01Z'}, '', :d => driver)
|
175
|
-
expected_kube_metadata = {
|
176
|
-
'time'=>'2015-05-08T09:22:01Z',
|
177
|
-
'docker' => {
|
178
|
-
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
179
|
-
},
|
180
|
-
'kubernetes' => {
|
181
|
-
'pod_name' => 'fabric8-console-controller-98rqc',
|
182
|
-
'container_name' => 'fabric8-console-container',
|
183
|
-
"namespace_id"=>"orphaned",
|
184
|
-
'namespace_name' => '.orphaned',
|
185
|
-
"orphaned_namespace"=>"default"
|
186
|
-
}
|
187
|
-
}
|
188
|
-
assert_equal(expected_kube_metadata, es.instance_variable_get(:@record_array)[0])
|
189
|
-
end
|
161
|
+
d.run(default_tag: tag) {
|
162
|
+
d.feed(@time, msg)
|
163
|
+
}
|
164
|
+
d.filtered.map{|e| e.last}
|
190
165
|
end
|
191
166
|
|
192
167
|
test 'with docker & kubernetes metadata where id cache hit and metadata miss' do
|
@@ -203,22 +178,22 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
203
178
|
}
|
204
179
|
stub_request(:any, 'https://localhost:8443/api/v1/namespaces/default/pods/fabric8-console-controller-98rqc').to_timeout
|
205
180
|
stub_request(:any, 'https://localhost:8443/api/v1/namespaces/default').to_timeout
|
206
|
-
|
181
|
+
filtered = emit({'time'=>'2015-05-08T09:22:01Z'}, '', d:driver)
|
207
182
|
expected_kube_metadata = {
|
208
183
|
'time'=>'2015-05-08T09:22:01Z',
|
209
184
|
'docker' => {
|
210
185
|
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
211
186
|
},
|
212
187
|
'kubernetes' => {
|
213
|
-
'pod_name'
|
214
|
-
'container_name'
|
215
|
-
'namespace_name'
|
216
|
-
'namespace_id'
|
217
|
-
'pod_id'
|
188
|
+
'pod_name' => 'fabric8-console-controller-98rqc',
|
189
|
+
'container_name' => 'fabric8-console-container',
|
190
|
+
'namespace_name' => 'default',
|
191
|
+
'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
|
192
|
+
'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
|
218
193
|
}
|
219
194
|
}
|
220
195
|
|
221
|
-
assert_equal(expected_kube_metadata,
|
196
|
+
assert_equal(expected_kube_metadata, filtered[0])
|
222
197
|
end
|
223
198
|
end
|
224
199
|
|
@@ -234,63 +209,59 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
234
209
|
:pod_id =>'c76927af-f563-11e4-b32d-54ee7527188d',
|
235
210
|
:namespace_id =>'898268c8-4a36-11e5-9d81-42010af0194c'
|
236
211
|
}
|
237
|
-
|
212
|
+
filtered = emit({'time'=>'2015-05-08T09:22:01Z'}, '', d:driver)
|
238
213
|
expected_kube_metadata = {
|
239
214
|
'time'=>'2015-05-08T09:22:01Z',
|
240
215
|
'docker' => {
|
241
216
|
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
242
217
|
},
|
243
218
|
'kubernetes' => {
|
244
|
-
'host'
|
245
|
-
'pod_name'
|
246
|
-
'container_name'
|
247
|
-
'
|
248
|
-
'
|
249
|
-
'
|
250
|
-
'
|
251
|
-
'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
|
252
|
-
'master_url' => 'https://localhost:8443',
|
219
|
+
'host' => 'jimmi-redhat.localnet',
|
220
|
+
'pod_name' => 'fabric8-console-controller-98rqc',
|
221
|
+
'container_name' => 'fabric8-console-container',
|
222
|
+
'namespace_name' => 'default',
|
223
|
+
'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
|
224
|
+
'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
|
225
|
+
'master_url' => 'https://localhost:8443',
|
253
226
|
'labels' => {
|
254
227
|
'component' => 'fabric8Console'
|
255
228
|
}
|
256
229
|
}
|
257
230
|
}
|
258
231
|
|
259
|
-
assert_equal(expected_kube_metadata,
|
232
|
+
assert_equal(expected_kube_metadata, filtered[0])
|
260
233
|
end
|
261
234
|
end
|
262
235
|
|
263
236
|
test 'with docker & kubernetes metadata' do
|
264
237
|
VCR.use_cassette('kubernetes_docker_metadata') do
|
265
|
-
|
238
|
+
filtered = emit({'time'=>'2015-05-08T09:22:01Z'})
|
266
239
|
expected_kube_metadata = {
|
267
240
|
'time'=>'2015-05-08T09:22:01Z',
|
268
241
|
'docker' => {
|
269
242
|
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
270
243
|
},
|
271
244
|
'kubernetes' => {
|
272
|
-
'host'
|
273
|
-
'pod_name'
|
274
|
-
'container_name'
|
275
|
-
'
|
276
|
-
'
|
277
|
-
'
|
278
|
-
'
|
279
|
-
'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
|
280
|
-
'master_url' => 'https://localhost:8443',
|
245
|
+
'host' => 'jimmi-redhat.localnet',
|
246
|
+
'pod_name' => 'fabric8-console-controller-98rqc',
|
247
|
+
'container_name' => 'fabric8-console-container',
|
248
|
+
'namespace_name' => 'default',
|
249
|
+
'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
|
250
|
+
'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
|
251
|
+
'master_url' => 'https://localhost:8443',
|
281
252
|
'labels' => {
|
282
253
|
'component' => 'fabric8Console'
|
283
254
|
}
|
284
255
|
}
|
285
256
|
}
|
286
257
|
|
287
|
-
assert_equal(expected_kube_metadata,
|
258
|
+
assert_equal(expected_kube_metadata, filtered[0])
|
288
259
|
end
|
289
260
|
end
|
290
261
|
|
291
262
|
test 'with docker & kubernetes metadata & namespace_id enabled' do
|
292
263
|
VCR.use_cassette('metadata_with_namespace_id') do
|
293
|
-
|
264
|
+
filtered = emit({}, '
|
294
265
|
kubernetes_url https://localhost:8443
|
295
266
|
watch false
|
296
267
|
cache_size 1
|
@@ -300,27 +271,25 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
300
271
|
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
301
272
|
},
|
302
273
|
'kubernetes' => {
|
303
|
-
'host'
|
304
|
-
'pod_name'
|
305
|
-
'container_name'
|
306
|
-
'
|
307
|
-
'
|
308
|
-
'
|
309
|
-
'
|
310
|
-
'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
|
311
|
-
'master_url' => 'https://localhost:8443',
|
274
|
+
'host' => 'jimmi-redhat.localnet',
|
275
|
+
'pod_name' => 'fabric8-console-controller-98rqc',
|
276
|
+
'container_name' => 'fabric8-console-container',
|
277
|
+
'namespace_name' => 'default',
|
278
|
+
'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
|
279
|
+
'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
|
280
|
+
'master_url' => 'https://localhost:8443',
|
312
281
|
'labels' => {
|
313
282
|
'component' => 'fabric8Console'
|
314
283
|
}
|
315
284
|
}
|
316
285
|
}
|
317
|
-
assert_equal(expected_kube_metadata,
|
286
|
+
assert_equal(expected_kube_metadata, filtered[0])
|
318
287
|
end
|
319
288
|
end
|
320
289
|
|
321
290
|
test 'with docker & kubernetes metadata using bearer token' do
|
322
291
|
VCR.use_cassette('kubernetes_docker_metadata_using_bearer_token') do
|
323
|
-
|
292
|
+
filtered = emit({}, '
|
324
293
|
kubernetes_url https://localhost:8443
|
325
294
|
verify_ssl false
|
326
295
|
watch false
|
@@ -331,37 +300,35 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
331
300
|
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
332
301
|
},
|
333
302
|
'kubernetes' => {
|
334
|
-
'host'
|
335
|
-
'pod_name'
|
336
|
-
'container_name'
|
337
|
-
'
|
338
|
-
'
|
339
|
-
'
|
340
|
-
'
|
341
|
-
'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
|
342
|
-
'master_url' => 'https://localhost:8443',
|
303
|
+
'host' => 'jimmi-redhat.localnet',
|
304
|
+
'pod_name' => 'fabric8-console-controller-98rqc',
|
305
|
+
'container_name' => 'fabric8-console-container',
|
306
|
+
'namespace_name' => 'default',
|
307
|
+
'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
|
308
|
+
'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
|
309
|
+
'master_url' => 'https://localhost:8443',
|
343
310
|
'labels' => {
|
344
311
|
'component' => 'fabric8Console'
|
345
312
|
}
|
346
313
|
}
|
347
314
|
}
|
348
|
-
assert_equal(expected_kube_metadata,
|
315
|
+
assert_equal(expected_kube_metadata, filtered[0])
|
349
316
|
end
|
350
317
|
end
|
351
318
|
|
352
319
|
test 'with docker & kubernetes metadata but no configured api server' do
|
353
|
-
|
320
|
+
filtered = emit({}, '')
|
354
321
|
expected_kube_metadata = {
|
355
322
|
'docker' => {
|
356
323
|
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
357
324
|
},
|
358
325
|
'kubernetes' => {
|
359
|
-
'pod_name'
|
360
|
-
'container_name'
|
361
|
-
'namespace_name'
|
326
|
+
'pod_name' => 'fabric8-console-controller-98rqc',
|
327
|
+
'container_name' => 'fabric8-console-container',
|
328
|
+
'namespace_name' => 'default',
|
362
329
|
}
|
363
330
|
}
|
364
|
-
assert_equal(expected_kube_metadata,
|
331
|
+
assert_equal(expected_kube_metadata, filtered[0])
|
365
332
|
end
|
366
333
|
|
367
334
|
test 'with docker & inaccessible kubernetes metadata' do
|
@@ -372,20 +339,20 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
372
339
|
)
|
373
340
|
stub_request(:any, 'https://localhost:8443/api/v1/namespaces/default/pods/fabric8-console-controller-98rqc').to_timeout
|
374
341
|
stub_request(:any, 'https://localhost:8443/api/v1/namespaces/default').to_timeout
|
375
|
-
|
342
|
+
filtered = emit()
|
376
343
|
expected_kube_metadata = {
|
377
344
|
'docker' => {
|
378
345
|
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
379
346
|
},
|
380
347
|
'kubernetes' => {
|
381
|
-
'pod_name'
|
382
|
-
'container_name'
|
383
|
-
'namespace_name'
|
348
|
+
'pod_name' => 'fabric8-console-controller-98rqc',
|
349
|
+
'container_name' => 'fabric8-console-container',
|
350
|
+
'namespace_name' => '.orphaned',
|
384
351
|
'orphaned_namespace' => 'default',
|
385
|
-
'namespace_id'
|
352
|
+
'namespace_id' => 'orphaned'
|
386
353
|
}
|
387
354
|
}
|
388
|
-
assert_equal(expected_kube_metadata,
|
355
|
+
assert_equal(expected_kube_metadata, filtered[0])
|
389
356
|
end
|
390
357
|
|
391
358
|
test 'with dot in pod name' do
|
@@ -395,23 +362,62 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
395
362
|
}.to_json
|
396
363
|
)
|
397
364
|
stub_request(:any, 'https://localhost:8443/api/v1/namespaces/default/pods/fabric8-console-controller.98rqc').to_timeout
|
398
|
-
|
365
|
+
filtered = emit_with_tag('var.log.containers.fabric8-console-controller.98rqc_default_fabric8-console-container-49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459.log', {}, '')
|
399
366
|
expected_kube_metadata = {
|
400
367
|
'docker' => {
|
401
368
|
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
402
369
|
},
|
403
370
|
'kubernetes' => {
|
404
|
-
'pod_name'
|
405
|
-
'container_name'
|
406
|
-
'namespace_name'
|
371
|
+
'pod_name' => 'fabric8-console-controller.98rqc',
|
372
|
+
'container_name' => 'fabric8-console-container',
|
373
|
+
'namespace_name' => 'default'
|
407
374
|
}
|
408
375
|
}
|
409
|
-
assert_equal(expected_kube_metadata,
|
376
|
+
assert_equal(expected_kube_metadata, filtered[0])
|
410
377
|
end
|
411
378
|
|
412
379
|
test 'with docker metadata, non-kubernetes' do
|
413
|
-
|
414
|
-
assert_false(
|
380
|
+
filtered = emit_with_tag('non-kubernetes', {}, '')
|
381
|
+
assert_false(filtered[0].has_key?(:kubernetes))
|
382
|
+
end
|
383
|
+
|
384
|
+
test 'merges json log data' do
|
385
|
+
json_log = {
|
386
|
+
'hello' => 'world'
|
387
|
+
}
|
388
|
+
msg = {
|
389
|
+
'log' => "#{json_log.to_json}"
|
390
|
+
}
|
391
|
+
filtered = emit_with_tag('non-kubernetes', msg, '')
|
392
|
+
assert_equal(msg.merge(json_log), filtered[0])
|
393
|
+
end
|
394
|
+
|
395
|
+
test 'merges json log data in MESSAGE' do
|
396
|
+
json_log = {
|
397
|
+
'hello' => 'world'
|
398
|
+
}
|
399
|
+
msg = {
|
400
|
+
'MESSAGE' => "#{json_log.to_json}"
|
401
|
+
}
|
402
|
+
filtered = emit_with_tag('non-kubernetes', msg, 'use_journal true')
|
403
|
+
assert_equal(msg.merge(json_log), filtered[0])
|
404
|
+
end
|
405
|
+
|
406
|
+
test 'merges json log data with message field' do
|
407
|
+
json_log = {
|
408
|
+
'timeMillis' => 1459853347608,
|
409
|
+
'thread' => 'main',
|
410
|
+
'level' => 'INFO',
|
411
|
+
'loggerName' => 'org.apache.camel.spring.SpringCamelContext',
|
412
|
+
'message' => 'Total 1 routes, of which 1 is started.',
|
413
|
+
'endOfBatch' => false,
|
414
|
+
'loggerFqcn' => 'org.apache.logging.slf4j.Log4jLogger'
|
415
|
+
}
|
416
|
+
msg = {
|
417
|
+
'log' => "#{json_log.to_json}"
|
418
|
+
}
|
419
|
+
filtered = emit_with_tag('non-kubernetes', msg, '')
|
420
|
+
assert_equal(msg.merge(json_log), filtered[0])
|
415
421
|
end
|
416
422
|
|
417
423
|
test 'ignores invalid json in log field' do
|
@@ -419,13 +425,57 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
419
425
|
msg = {
|
420
426
|
'log' => json_log
|
421
427
|
}
|
422
|
-
|
423
|
-
assert_equal(msg,
|
428
|
+
filtered = emit_with_tag('non-kubernetes', msg, '')
|
429
|
+
assert_equal(msg, filtered[0])
|
430
|
+
end
|
431
|
+
|
432
|
+
test 'merges json log data with message field in MESSAGE' do
|
433
|
+
json_log = {
|
434
|
+
'timeMillis' => 1459853347608,
|
435
|
+
'thread' => 'main',
|
436
|
+
'level' => 'INFO',
|
437
|
+
'loggerName' => 'org.apache.camel.spring.SpringCamelContext',
|
438
|
+
'message' => 'Total 1 routes, of which 1 is started.',
|
439
|
+
'endOfBatch' => false,
|
440
|
+
'loggerFqcn' => 'org.apache.logging.slf4j.Log4jLogger'
|
441
|
+
}
|
442
|
+
msg = {
|
443
|
+
'MESSAGE' => "#{json_log.to_json}"
|
444
|
+
}
|
445
|
+
filtered = emit_with_tag('non-kubernetes', msg, 'use_journal true')
|
446
|
+
assert_equal(msg.merge(json_log), filtered[0])
|
447
|
+
end
|
448
|
+
|
449
|
+
test 'emit individual fields from json, throw out whole original string' do
|
450
|
+
json_log = {
|
451
|
+
'hello' => 'world',
|
452
|
+
'more' => 'data'
|
453
|
+
}
|
454
|
+
msg = {
|
455
|
+
'log' => "#{json_log.to_json}"
|
456
|
+
}
|
457
|
+
filtered = emit_with_tag('non-kubernetes', msg, 'preserve_json_log false')
|
458
|
+
assert_equal(json_log, filtered[0])
|
459
|
+
end
|
460
|
+
|
461
|
+
test 'emit individual fields from json, throw out whole original string in MESSAGE' do
|
462
|
+
json_log = {
|
463
|
+
'hello' => 'world',
|
464
|
+
'more' => 'data'
|
465
|
+
}
|
466
|
+
msg = {
|
467
|
+
'MESSAGE' => "#{json_log.to_json}"
|
468
|
+
}
|
469
|
+
filtered = emit_with_tag('non-kubernetes', msg, '
|
470
|
+
preserve_json_log false
|
471
|
+
use_journal true
|
472
|
+
')
|
473
|
+
assert_equal(json_log, filtered[0])
|
424
474
|
end
|
425
475
|
|
426
476
|
test 'with kubernetes dotted labels, de_dot enabled' do
|
427
477
|
VCR.use_cassette('kubernetes_docker_metadata_dotted_labels') do
|
428
|
-
|
478
|
+
filtered = emit({}, '
|
429
479
|
kubernetes_url https://localhost:8443
|
430
480
|
watch false
|
431
481
|
cache_size 1
|
@@ -435,30 +485,28 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
435
485
|
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
436
486
|
},
|
437
487
|
'kubernetes' => {
|
438
|
-
'host'
|
439
|
-
'pod_name'
|
440
|
-
'container_name'
|
441
|
-
'
|
442
|
-
'
|
443
|
-
'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
|
444
|
-
'namespace_labels' => {
|
488
|
+
'host' => 'jimmi-redhat.localnet',
|
489
|
+
'pod_name' => 'fabric8-console-controller-98rqc',
|
490
|
+
'container_name' => 'fabric8-console-container',
|
491
|
+
'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
|
492
|
+
'namespace_labels' => {
|
445
493
|
'kubernetes_io/namespacetest' => 'somevalue'
|
446
494
|
},
|
447
|
-
'namespace_name'
|
448
|
-
'pod_id'
|
449
|
-
'master_url'
|
495
|
+
'namespace_name' => 'default',
|
496
|
+
'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
|
497
|
+
'master_url' => 'https://localhost:8443',
|
450
498
|
'labels' => {
|
451
499
|
'kubernetes_io/test' => 'somevalue'
|
452
500
|
}
|
453
501
|
}
|
454
502
|
}
|
455
|
-
assert_equal(expected_kube_metadata,
|
503
|
+
assert_equal(expected_kube_metadata, filtered[0])
|
456
504
|
end
|
457
505
|
end
|
458
506
|
|
459
507
|
test 'with kubernetes dotted labels, de_dot disabled' do
|
460
508
|
VCR.use_cassette('kubernetes_docker_metadata_dotted_labels') do
|
461
|
-
|
509
|
+
filtered = emit({}, '
|
462
510
|
kubernetes_url https://localhost:8443
|
463
511
|
watch false
|
464
512
|
cache_size 1
|
@@ -469,24 +517,22 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
469
517
|
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
470
518
|
},
|
471
519
|
'kubernetes' => {
|
472
|
-
'host'
|
473
|
-
'pod_name'
|
474
|
-
'container_name'
|
475
|
-
'
|
476
|
-
'
|
477
|
-
'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
|
478
|
-
'namespace_labels' => {
|
520
|
+
'host' => 'jimmi-redhat.localnet',
|
521
|
+
'pod_name' => 'fabric8-console-controller-98rqc',
|
522
|
+
'container_name' => 'fabric8-console-container',
|
523
|
+
'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
|
524
|
+
'namespace_labels' => {
|
479
525
|
'kubernetes.io/namespacetest' => 'somevalue'
|
480
526
|
},
|
481
|
-
'namespace_name'
|
482
|
-
'pod_id'
|
483
|
-
'master_url'
|
527
|
+
'namespace_name' => 'default',
|
528
|
+
'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
|
529
|
+
'master_url' => 'https://localhost:8443',
|
484
530
|
'labels' => {
|
485
531
|
'kubernetes.io/test' => 'somevalue'
|
486
532
|
}
|
487
533
|
}
|
488
534
|
}
|
489
|
-
assert_equal(expected_kube_metadata,
|
535
|
+
assert_equal(expected_kube_metadata, filtered[0])
|
490
536
|
end
|
491
537
|
end
|
492
538
|
|
@@ -507,7 +553,7 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
507
553
|
'randomfield' => 'randomvalue'
|
508
554
|
}
|
509
555
|
VCR.use_cassette('kubernetes_docker_metadata') do
|
510
|
-
|
556
|
+
filtered = emit_with_tag(tag, msg, '
|
511
557
|
kubernetes_url https://localhost:8443
|
512
558
|
watch false
|
513
559
|
cache_size 1
|
@@ -518,21 +564,19 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
518
564
|
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
519
565
|
},
|
520
566
|
'kubernetes' => {
|
521
|
-
'host'
|
522
|
-
'pod_name'
|
523
|
-
'container_name'
|
524
|
-
'
|
525
|
-
'
|
526
|
-
'
|
527
|
-
'
|
528
|
-
'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
|
529
|
-
'master_url' => 'https://localhost:8443',
|
567
|
+
'host' => 'jimmi-redhat.localnet',
|
568
|
+
'pod_name' => 'fabric8-console-controller-98rqc',
|
569
|
+
'container_name' => 'fabric8-console-container',
|
570
|
+
'namespace_name' => 'default',
|
571
|
+
'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
|
572
|
+
'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
|
573
|
+
'master_url' => 'https://localhost:8443',
|
530
574
|
'labels' => {
|
531
575
|
'component' => 'fabric8Console'
|
532
576
|
}
|
533
577
|
}
|
534
578
|
}.merge(msg)
|
535
|
-
assert_equal(expected_kube_metadata,
|
579
|
+
assert_equal(expected_kube_metadata, filtered[0])
|
536
580
|
end
|
537
581
|
end
|
538
582
|
|
@@ -545,7 +589,7 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
545
589
|
'randomfield' => 'randomvalue'
|
546
590
|
}
|
547
591
|
VCR.use_cassette('metadata_with_namespace_id') do
|
548
|
-
|
592
|
+
filtered = emit_with_tag(tag, msg, '
|
549
593
|
kubernetes_url https://localhost:8443
|
550
594
|
watch false
|
551
595
|
cache_size 1
|
@@ -556,159 +600,25 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
556
600
|
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
557
601
|
},
|
558
602
|
'kubernetes' => {
|
559
|
-
'host'
|
560
|
-
'pod_name'
|
561
|
-
'container_name'
|
562
|
-
'
|
563
|
-
'
|
564
|
-
'
|
565
|
-
'
|
566
|
-
'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
|
567
|
-
'master_url' => 'https://localhost:8443',
|
603
|
+
'host' => 'jimmi-redhat.localnet',
|
604
|
+
'pod_name' => 'fabric8-console-controller-98rqc',
|
605
|
+
'container_name' => 'fabric8-console-container',
|
606
|
+
'namespace_name' => 'default',
|
607
|
+
'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
|
608
|
+
'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
|
609
|
+
'master_url' => 'https://localhost:8443',
|
568
610
|
'labels' => {
|
569
611
|
'component' => 'fabric8Console'
|
570
612
|
}
|
571
613
|
}
|
572
614
|
}.merge(msg)
|
573
|
-
assert_equal(expected_kube_metadata,
|
574
|
-
end
|
575
|
-
end
|
576
|
-
|
577
|
-
test 'with records from journald and docker & kubernetes metadata with use_journal unset' do
|
578
|
-
# with use_journal unset, should still use the journal fields instead of tag fields
|
579
|
-
tag = 'var.log.containers.fabric8-console-controller-98rqc_default_fabric8-console-container-49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459.log'
|
580
|
-
msg = {
|
581
|
-
'CONTAINER_NAME' => 'k8s_journald-container-name.db89db89_journald-pod-name_journald-namespace-name_c76927af-f563-11e4-b32d-54ee7527188d_89db89db',
|
582
|
-
'CONTAINER_ID_FULL' => '838350c64bacba968d39a30a50789b2795291fceca6ccbff55298671d46b0e3b',
|
583
|
-
'kubernetes' => {
|
584
|
-
'namespace_name' => 'k8s-namespace-name',
|
585
|
-
'pod_name' => 'k8s-pod-name',
|
586
|
-
'container_name' => 'k8s-container-name'
|
587
|
-
},
|
588
|
-
'docker' => {'container_id' => 'e463bc0d3ae38f5c89d92dca49b30e049e899799920b79d4d5f705acbe82ba95'},
|
589
|
-
'randomfield' => 'randomvalue'
|
590
|
-
}
|
591
|
-
VCR.use_cassette('metadata_from_tag_journald_and_kubernetes_fields') do
|
592
|
-
es = emit_with_tag(tag, msg, '
|
593
|
-
kubernetes_url https://localhost:8443
|
594
|
-
watch false
|
595
|
-
cache_size 1
|
596
|
-
')
|
597
|
-
expected_kube_metadata = {
|
598
|
-
'docker' => {
|
599
|
-
'container_id' => 'e463bc0d3ae38f5c89d92dca49b30e049e899799920b79d4d5f705acbe82ba95'
|
600
|
-
},
|
601
|
-
'kubernetes' => {
|
602
|
-
'host' => 'jimmi-redhat.localnet',
|
603
|
-
'pod_name' => 'k8s-pod-name',
|
604
|
-
'container_name' => 'k8s-container-name',
|
605
|
-
'container_image' => 'k8s-container-image:latest',
|
606
|
-
'container_image_id' => 'docker://d78c5217c41e9af08d37d9ae2cb070afa1fe3da6bc77bfb18879a8b4bfdf8a34',
|
607
|
-
'namespace_name' => 'k8s-namespace-name',
|
608
|
-
'namespace_id' => '8e0dc8fc-59f2-49f7-a3e2-ed0913e19d9f',
|
609
|
-
'pod_id' => 'ebabf749-5fcd-4750-a3f0-aedd89476da8',
|
610
|
-
'master_url' => 'https://localhost:8443',
|
611
|
-
'labels' => {
|
612
|
-
'component' => 'k8s-test'
|
613
|
-
}
|
614
|
-
}
|
615
|
-
}.merge(msg) {|key,oldval,newval| ((key == 'kubernetes') || (key == 'docker')) ? oldval : newval}
|
616
|
-
assert_equal(expected_kube_metadata, es.instance_variable_get(:@record_array)[0])
|
617
|
-
end
|
618
|
-
end
|
619
|
-
|
620
|
-
test 'with records from journald and docker & kubernetes metadata with lookup_from_k8s_field false' do
|
621
|
-
# with use_journal unset, should still use the journal fields instead of tag fields
|
622
|
-
tag = 'var.log.containers.fabric8-console-controller-98rqc_default_fabric8-console-container-49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459.log'
|
623
|
-
msg = {
|
624
|
-
'CONTAINER_NAME' => 'k8s_journald-container-name.db89db89_journald-pod-name_journald-namespace-name_c76927af-f563-11e4-b32d-54ee7527188d_89db89db',
|
625
|
-
'CONTAINER_ID_FULL' => '838350c64bacba968d39a30a50789b2795291fceca6ccbff55298671d46b0e3b',
|
626
|
-
'kubernetes' => {
|
627
|
-
'namespace_name' => 'k8s-namespace-name',
|
628
|
-
'pod_name' => 'k8s-pod-name',
|
629
|
-
'container_name' => 'k8s-container-name'
|
630
|
-
},
|
631
|
-
'docker' => {'container_id' => 'e463bc0d3ae38f5c89d92dca49b30e049e899799920b79d4d5f705acbe82ba95'},
|
632
|
-
'randomfield' => 'randomvalue'
|
633
|
-
}
|
634
|
-
VCR.use_cassette('metadata_from_tag_and_journald_fields') do
|
635
|
-
es = emit_with_tag(tag, msg, '
|
636
|
-
kubernetes_url https://localhost:8443
|
637
|
-
watch false
|
638
|
-
cache_size 1
|
639
|
-
lookup_from_k8s_field false
|
640
|
-
')
|
641
|
-
expected_kube_metadata = {
|
642
|
-
'docker' => {
|
643
|
-
'container_id' => '838350c64bacba968d39a30a50789b2795291fceca6ccbff55298671d46b0e3b'
|
644
|
-
},
|
645
|
-
'kubernetes' => {
|
646
|
-
'host' => 'jimmi-redhat.localnet',
|
647
|
-
'pod_name' => 'journald-pod-name',
|
648
|
-
'container_name' => 'journald-container-name',
|
649
|
-
'container_image' => 'journald-container-image:latest',
|
650
|
-
'container_image_id' => 'docker://dda4c95705fb7050b701b10a7fe928ca5bc971a1dcb521ae3c339194cbf36b47',
|
651
|
-
'namespace_name' => 'journald-namespace-name',
|
652
|
-
'namespace_id' => '8282888f-733f-4f23-a3d3-1fdfa3bdacf2',
|
653
|
-
'pod_id' => '5e1c1e27-b637-4e81-80b6-6d8a8c404d3b',
|
654
|
-
'master_url' => 'https://localhost:8443',
|
655
|
-
'labels' => {
|
656
|
-
'component' => 'journald-test'
|
657
|
-
}
|
658
|
-
}
|
659
|
-
}.merge(msg) {|key,oldval,newval| ((key == 'kubernetes') || (key == 'docker')) ? oldval : newval}
|
660
|
-
assert_equal(expected_kube_metadata, es.instance_variable_get(:@record_array)[0])
|
661
|
-
end
|
662
|
-
end
|
663
|
-
|
664
|
-
test 'uses metadata from tag if use_journal false and lookup_from_k8s_field false' do
|
665
|
-
# with use_journal unset, should still use the journal fields instead of tag fields
|
666
|
-
tag = 'var.log.containers.fabric8-console-controller-98rqc_default_fabric8-console-container-49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459.log'
|
667
|
-
msg = {
|
668
|
-
'CONTAINER_NAME' => 'k8s_journald-container-name.db89db89_journald-pod-name_journald-namespace-name_c76927af-f563-11e4-b32d-54ee7527188d_89db89db',
|
669
|
-
'CONTAINER_ID_FULL' => '838350c64bacba968d39a30a50789b2795291fceca6ccbff55298671d46b0e3b',
|
670
|
-
'kubernetes' => {
|
671
|
-
'namespace_name' => 'k8s-namespace-name',
|
672
|
-
'pod_name' => 'k8s-pod-name',
|
673
|
-
'container_name' => 'k8s-container-name'
|
674
|
-
},
|
675
|
-
'docker' => {'container_id' => 'e463bc0d3ae38f5c89d92dca49b30e049e899799920b79d4d5f705acbe82ba95'},
|
676
|
-
'randomfield' => 'randomvalue'
|
677
|
-
}
|
678
|
-
VCR.use_cassette('metadata_from_tag_and_journald_fields') do
|
679
|
-
es = emit_with_tag(tag, msg, '
|
680
|
-
kubernetes_url https://localhost:8443
|
681
|
-
watch false
|
682
|
-
cache_size 1
|
683
|
-
lookup_from_k8s_field false
|
684
|
-
use_journal false
|
685
|
-
')
|
686
|
-
expected_kube_metadata = {
|
687
|
-
'docker' => {
|
688
|
-
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
689
|
-
},
|
690
|
-
'kubernetes' => {
|
691
|
-
'host' => 'jimmi-redhat.localnet',
|
692
|
-
'pod_name' => 'fabric8-console-controller-98rqc',
|
693
|
-
'container_name' => 'fabric8-console-container',
|
694
|
-
'container_image' => 'fabric8/hawtio-kubernetes:latest',
|
695
|
-
'container_image_id' => 'docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303',
|
696
|
-
'namespace_name' => 'default',
|
697
|
-
'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
|
698
|
-
'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
|
699
|
-
'master_url' => 'https://localhost:8443',
|
700
|
-
'labels' => {
|
701
|
-
'component' => 'fabric8Console'
|
702
|
-
}
|
703
|
-
}
|
704
|
-
}.merge(msg) {|key,oldval,newval| ((key == 'kubernetes') || (key == 'docker')) ? oldval : newval}
|
705
|
-
assert_equal(expected_kube_metadata, es.instance_variable_get(:@record_array)[0])
|
615
|
+
assert_equal(expected_kube_metadata, filtered[0])
|
706
616
|
end
|
707
617
|
end
|
708
618
|
|
709
619
|
test 'with kubernetes annotations' do
|
710
620
|
VCR.use_cassette('kubernetes_docker_metadata_annotations') do
|
711
|
-
|
621
|
+
filtered = emit({},'
|
712
622
|
kubernetes_url https://localhost:8443
|
713
623
|
watch false
|
714
624
|
cache_size 1
|
@@ -719,16 +629,14 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
719
629
|
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
720
630
|
},
|
721
631
|
'kubernetes' => {
|
722
|
-
'host'
|
723
|
-
'pod_name'
|
724
|
-
'container_name'
|
725
|
-
'
|
726
|
-
'
|
727
|
-
'
|
728
|
-
'
|
729
|
-
'
|
730
|
-
'master_url' => 'https://localhost:8443',
|
731
|
-
'labels' => {
|
632
|
+
'host' => 'jimmi-redhat.localnet',
|
633
|
+
'pod_name' => 'fabric8-console-controller-98rqc',
|
634
|
+
'container_name' => 'fabric8-console-container',
|
635
|
+
'namespace_name' => 'default',
|
636
|
+
'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
|
637
|
+
'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
|
638
|
+
'master_url' => 'https://localhost:8443',
|
639
|
+
'labels' => {
|
732
640
|
'component' => 'fabric8Console'
|
733
641
|
},
|
734
642
|
'annotations' => {
|
@@ -737,7 +645,7 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
737
645
|
}
|
738
646
|
}
|
739
647
|
}
|
740
|
-
assert_equal(expected_kube_metadata,
|
648
|
+
assert_equal(expected_kube_metadata, filtered[0])
|
741
649
|
end
|
742
650
|
end
|
743
651
|
|
@@ -750,7 +658,7 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
750
658
|
'randomfield' => 'randomvalue'
|
751
659
|
}
|
752
660
|
VCR.use_cassette('kubernetes_docker_metadata') do
|
753
|
-
|
661
|
+
filtered = emit_with_tag(tag, msg, '
|
754
662
|
kubernetes_url https://localhost:8443
|
755
663
|
watch false
|
756
664
|
cache_size 1
|
@@ -761,27 +669,25 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
761
669
|
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
762
670
|
},
|
763
671
|
'kubernetes' => {
|
764
|
-
'host'
|
765
|
-
'pod_name'
|
766
|
-
'container_name'
|
767
|
-
'
|
768
|
-
'
|
769
|
-
'
|
770
|
-
'
|
771
|
-
'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
|
772
|
-
'master_url' => 'https://localhost:8443',
|
672
|
+
'host' => 'jimmi-redhat.localnet',
|
673
|
+
'pod_name' => 'fabric8-console-controller-98rqc',
|
674
|
+
'container_name' => 'fabric8-console-container',
|
675
|
+
'namespace_name' => 'default',
|
676
|
+
'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
|
677
|
+
'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
|
678
|
+
'master_url' => 'https://localhost:8443',
|
773
679
|
'labels' => {
|
774
680
|
'component' => 'fabric8Console'
|
775
681
|
}
|
776
682
|
}
|
777
683
|
}.merge(msg)
|
778
|
-
assert_equal(expected_kube_metadata,
|
684
|
+
assert_equal(expected_kube_metadata, filtered[0])
|
779
685
|
end
|
780
686
|
end
|
781
687
|
|
782
688
|
test 'with kubernetes namespace annotations' do
|
783
689
|
VCR.use_cassette('kubernetes_docker_metadata_annotations') do
|
784
|
-
|
690
|
+
filtered = emit({},'
|
785
691
|
kubernetes_url https://localhost:8443
|
786
692
|
watch false
|
787
693
|
cache_size 1
|
@@ -792,16 +698,14 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
792
698
|
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
793
699
|
},
|
794
700
|
'kubernetes' => {
|
795
|
-
'host'
|
796
|
-
'pod_name'
|
797
|
-
'container_name'
|
798
|
-
'namespace_id'
|
799
|
-
'namespace_name'
|
800
|
-
'
|
801
|
-
'
|
802
|
-
'
|
803
|
-
'master_url' => 'https://localhost:8443',
|
804
|
-
'labels' => {
|
701
|
+
'host' => 'jimmi-redhat.localnet',
|
702
|
+
'pod_name' => 'fabric8-console-controller-98rqc',
|
703
|
+
'container_name' => 'fabric8-console-container',
|
704
|
+
'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
|
705
|
+
'namespace_name' => 'default',
|
706
|
+
'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
|
707
|
+
'master_url' => 'https://localhost:8443',
|
708
|
+
'labels' => {
|
805
709
|
'component' => 'fabric8Console'
|
806
710
|
},
|
807
711
|
'annotations' => {
|
@@ -813,13 +717,13 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
813
717
|
}
|
814
718
|
}
|
815
719
|
}
|
816
|
-
assert_equal(expected_kube_metadata,
|
720
|
+
assert_equal(expected_kube_metadata, filtered[0])
|
817
721
|
end
|
818
722
|
end
|
819
723
|
|
820
724
|
test 'with kubernetes namespace annotations no match' do
|
821
725
|
VCR.use_cassette('kubernetes_docker_metadata_annotations') do
|
822
|
-
|
726
|
+
filtered = emit({},'
|
823
727
|
kubernetes_url https://localhost:8443
|
824
728
|
watch false
|
825
729
|
cache_size 1
|
@@ -830,21 +734,19 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
830
734
|
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
831
735
|
},
|
832
736
|
'kubernetes' => {
|
833
|
-
'host'
|
834
|
-
'pod_name'
|
835
|
-
'container_name'
|
836
|
-
'
|
837
|
-
'
|
838
|
-
'
|
839
|
-
'
|
840
|
-
'
|
841
|
-
'master_url' => 'https://localhost:8443',
|
842
|
-
'labels' => {
|
737
|
+
'host' => 'jimmi-redhat.localnet',
|
738
|
+
'pod_name' => 'fabric8-console-controller-98rqc',
|
739
|
+
'container_name' => 'fabric8-console-container',
|
740
|
+
'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
|
741
|
+
'namespace_name' => 'default',
|
742
|
+
'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
|
743
|
+
'master_url' => 'https://localhost:8443',
|
744
|
+
'labels' => {
|
843
745
|
'component' => 'fabric8Console'
|
844
746
|
}
|
845
747
|
}
|
846
748
|
}
|
847
|
-
assert_equal(expected_kube_metadata,
|
749
|
+
assert_equal(expected_kube_metadata, filtered[0])
|
848
750
|
end
|
849
751
|
end
|
850
752
|
test 'with CONTAINER_NAME that does not match' do
|
@@ -855,7 +757,7 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
855
757
|
'randomfield' => 'randomvalue'
|
856
758
|
}
|
857
759
|
VCR.use_cassette('kubernetes_docker_metadata_annotations') do
|
858
|
-
|
760
|
+
filtered = emit_with_tag(tag, msg, '
|
859
761
|
kubernetes_url https://localhost:8443
|
860
762
|
watch false
|
861
763
|
cache_size 1
|
@@ -866,7 +768,7 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
866
768
|
'CONTAINER_ID_FULL' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459',
|
867
769
|
'randomfield' => 'randomvalue'
|
868
770
|
}
|
869
|
-
assert_equal(expected_kube_metadata,
|
771
|
+
assert_equal(expected_kube_metadata, filtered[0])
|
870
772
|
end
|
871
773
|
end
|
872
774
|
test 'with CONTAINER_NAME starts with k8s_ that does not match' do
|
@@ -877,7 +779,7 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
877
779
|
'randomfield' => 'randomvalue'
|
878
780
|
}
|
879
781
|
VCR.use_cassette('kubernetes_docker_metadata_annotations') do
|
880
|
-
|
782
|
+
filtered = emit_with_tag(tag, msg, '
|
881
783
|
kubernetes_url https://localhost:8443
|
882
784
|
watch false
|
883
785
|
cache_size 1
|
@@ -888,7 +790,7 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
888
790
|
'CONTAINER_ID_FULL' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459',
|
889
791
|
'randomfield' => 'randomvalue'
|
890
792
|
}
|
891
|
-
assert_equal(expected_kube_metadata,
|
793
|
+
assert_equal(expected_kube_metadata, filtered[0])
|
892
794
|
end
|
893
795
|
end
|
894
796
|
end
|