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