fluent-plugin-kubernetes_metadata_filter 1.2.2 → 2.0.0
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 +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
|