fluent-plugin-kubernetes_metadata_filter 2.5.2 → 2.11.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.circleci/config.yml +10 -14
- data/.rubocop.yml +57 -0
- data/Gemfile +4 -2
- data/Gemfile.lock +62 -60
- data/README.md +10 -37
- data/Rakefile +15 -11
- data/fluent-plugin-kubernetes_metadata_filter.gemspec +25 -27
- data/lib/fluent/plugin/filter_kubernetes_metadata.rb +178 -137
- data/lib/fluent/plugin/kubernetes_metadata_cache_strategy.rb +23 -21
- data/lib/fluent/plugin/kubernetes_metadata_common.rb +51 -67
- 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 +91 -53
- data/lib/fluent/plugin/kubernetes_metadata_watch_pods.rb +109 -60
- data/release_notes.md +42 -0
- data/test/cassettes/kubernetes_get_pod_container_init.yml +145 -0
- 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 +464 -360
- data/test/plugin/test_utils.rb +56 -0
- data/test/plugin/test_watch_namespaces.rb +181 -158
- data/test/plugin/test_watch_pods.rb +275 -235
- data/test/plugin/watch_test.rb +16 -15
- metadata +60 -67
- /data/test/cassettes/{kubernetes_docker_metadata_dotted_labels.yml → kubernetes_docker_metadata_dotted_slashed_labels.yml} +0 -0
@@ -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
|
@@ -31,19 +28,24 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
31
28
|
@time = Fluent::Engine.now
|
32
29
|
end
|
33
30
|
|
34
|
-
|
31
|
+
VAR_LOG_CONTAINER_TAG = 'var.log.containers.fabric8-console-controller-98rqc_default_fabric8-console-container-49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459.log'
|
32
|
+
VAR_LOG_POD_TAG = 'var.log.pods.default_fabric8-console-controller-98rqc_c76927af-f563-11e4-b32d-54ee7527188d.fabric8-console-container.0.log'
|
35
33
|
|
36
34
|
def create_driver(conf = '')
|
37
35
|
Test::Driver::Filter.new(Plugin::KubernetesMetadataFilter).configure(conf)
|
38
36
|
end
|
39
37
|
|
40
38
|
sub_test_case 'configure' do
|
41
|
-
|
42
39
|
test 'check default' do
|
43
40
|
d = create_driver
|
44
41
|
assert_equal(1000, d.instance.cache_size)
|
45
42
|
end
|
46
43
|
|
44
|
+
test 'check test_api_adapter' do
|
45
|
+
d = create_driver('test_api_adapter KubernetesMetadata::TestApiAdapter')
|
46
|
+
assert_equal('KubernetesMetadata::TestApiAdapter', d.instance.test_api_adapter)
|
47
|
+
end
|
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,159 @@ 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:
|
141
|
+
d.run(default_tag: VAR_LOG_CONTAINER_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)
|
166
|
+
end
|
167
|
+
|
168
|
+
sub_test_case 'parsing_pod_metadata when container_status is missing from the pod status' do
|
169
|
+
test 'using the tag_to_kubernetes_name_regexp for /var/log/containers ' do
|
170
|
+
VCR.use_cassettes(
|
171
|
+
[
|
172
|
+
{ name: 'valid_kubernetes_api_server' },
|
173
|
+
{ name: 'kubernetes_get_api_v1' },
|
174
|
+
{ name: 'kubernetes_get_namespace_default' },
|
175
|
+
{ name: 'kubernetes_get_pod_container_init' }
|
176
|
+
]) do
|
177
|
+
filtered = emit({}, "
|
178
|
+
kubernetes_url https://localhost:8443
|
179
|
+
watch false
|
180
|
+
cache_size 1
|
181
|
+
")
|
182
|
+
expected_kube_metadata = {
|
183
|
+
'docker' => {
|
184
|
+
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
185
|
+
},
|
186
|
+
'kubernetes' => {
|
187
|
+
'container_image'=>'fabric8/hawtio-kubernetes:latest',
|
188
|
+
'container_name'=>'fabric8-console-container',
|
189
|
+
'host' => 'jimmi-redhat.localnet',
|
190
|
+
'pod_name' => 'fabric8-console-controller-98rqc',
|
191
|
+
'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
|
192
|
+
'namespace_name' => 'default',
|
193
|
+
'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
|
194
|
+
'pod_ip' => '172.17.0.8',
|
195
|
+
'master_url' => 'https://localhost:8443',
|
196
|
+
'labels' => {
|
197
|
+
'component' => 'fabric8Console'
|
198
|
+
}
|
199
|
+
}
|
200
|
+
}
|
201
|
+
assert_equal(expected_kube_metadata, filtered[0])
|
202
|
+
end
|
203
|
+
end
|
204
|
+
test 'using the tag_to_kubernetes_name_regexp for /var/log/pods' do
|
205
|
+
VCR.use_cassettes(
|
206
|
+
[
|
207
|
+
{ name: 'valid_kubernetes_api_server' },
|
208
|
+
{ name: 'kubernetes_get_api_v1' },
|
209
|
+
{ name: 'kubernetes_get_namespace_default' },
|
210
|
+
{ name: 'kubernetes_get_pod_container_init' }
|
211
|
+
]) do
|
212
|
+
filtered = emit_with_tag(VAR_LOG_POD_TAG,{}, "
|
213
|
+
kubernetes_url https://localhost:8443
|
214
|
+
watch false
|
215
|
+
cache_size 1
|
216
|
+
")
|
217
|
+
expected_kube_metadata = {
|
218
|
+
'kubernetes' => {
|
219
|
+
'container_image'=>'fabric8/hawtio-kubernetes:latest',
|
220
|
+
'container_name'=>'fabric8-console-container',
|
221
|
+
'host' => 'jimmi-redhat.localnet',
|
222
|
+
'pod_name' => 'fabric8-console-controller-98rqc',
|
223
|
+
'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
|
224
|
+
'namespace_name' => 'default',
|
225
|
+
'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
|
226
|
+
'pod_ip' => '172.17.0.8',
|
227
|
+
'master_url' => 'https://localhost:8443',
|
228
|
+
'labels' => {
|
229
|
+
'component' => 'fabric8Console'
|
230
|
+
}
|
231
|
+
}
|
232
|
+
}
|
233
|
+
assert_equal(expected_kube_metadata, filtered[0])
|
234
|
+
end
|
235
|
+
end
|
169
236
|
end
|
170
237
|
|
171
238
|
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
|
239
|
+
VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' }]) do
|
173
240
|
driver = create_driver('
|
174
241
|
kubernetes_url https://localhost:8443
|
175
242
|
watch false
|
@@ -177,18 +244,18 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
177
244
|
')
|
178
245
|
stub_request(:any, 'https://localhost:8443/api/v1/namespaces/default/pods/fabric8-console-controller-98rqc').to_raise(SocketError.new('error from pod fetch'))
|
179
246
|
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'}, '', :
|
247
|
+
filtered = emit({ 'time' => '2015-05-08T09:22:01Z' }, '', d: driver)
|
181
248
|
expected_kube_metadata = {
|
182
|
-
'time'=>'2015-05-08T09:22:01Z',
|
183
|
-
'docker'
|
184
|
-
|
249
|
+
'time' => '2015-05-08T09:22:01Z',
|
250
|
+
'docker'=>{
|
251
|
+
'container_id'=>'49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
185
252
|
},
|
186
253
|
'kubernetes' => {
|
187
|
-
'pod_name'
|
254
|
+
'pod_name' => 'fabric8-console-controller-98rqc',
|
188
255
|
'container_name' => 'fabric8-console-container',
|
189
|
-
|
256
|
+
'namespace_id' => 'orphaned',
|
190
257
|
'namespace_name' => '.orphaned',
|
191
|
-
|
258
|
+
'orphaned_namespace' => 'default'
|
192
259
|
}
|
193
260
|
}
|
194
261
|
assert_equal(expected_kube_metadata, filtered[0])
|
@@ -196,7 +263,7 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
196
263
|
end
|
197
264
|
|
198
265
|
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
|
266
|
+
VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' }]) do
|
200
267
|
driver = create_driver('
|
201
268
|
kubernetes_url https://localhost:8443
|
202
269
|
watch false
|
@@ -204,23 +271,23 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
204
271
|
')
|
205
272
|
cache = driver.instance.instance_variable_get(:@id_cache)
|
206
273
|
cache['49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'] = {
|
207
|
-
|
208
|
-
|
274
|
+
pod_id: 'c76927af-f563-11e4-b32d-54ee7527188d',
|
275
|
+
namespace_id: '898268c8-4a36-11e5-9d81-42010af0194c'
|
209
276
|
}
|
210
277
|
stub_request(:any, 'https://localhost:8443/api/v1/namespaces/default/pods/fabric8-console-controller-98rqc').to_timeout
|
211
278
|
stub_request(:any, 'https://localhost:8443/api/v1/namespaces/default').to_timeout
|
212
|
-
filtered = emit({'time'=>'2015-05-08T09:22:01Z'}, '', d:driver)
|
279
|
+
filtered = emit({ 'time' => '2015-05-08T09:22:01Z' }, '', d: driver)
|
213
280
|
expected_kube_metadata = {
|
214
|
-
'time'=>'2015-05-08T09:22:01Z',
|
281
|
+
'time' => '2015-05-08T09:22:01Z',
|
215
282
|
'docker' => {
|
216
|
-
|
283
|
+
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
217
284
|
},
|
218
285
|
'kubernetes' => {
|
219
|
-
'pod_name'
|
220
|
-
'container_name'
|
221
|
-
'namespace_name'
|
222
|
-
'namespace_id'
|
223
|
-
'pod_id'
|
286
|
+
'pod_name' => 'fabric8-console-controller-98rqc',
|
287
|
+
'container_name' => 'fabric8-console-container',
|
288
|
+
'namespace_name' => 'default',
|
289
|
+
'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
|
290
|
+
'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d'
|
224
291
|
}
|
225
292
|
}
|
226
293
|
|
@@ -229,7 +296,7 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
229
296
|
end
|
230
297
|
|
231
298
|
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
|
299
|
+
VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' }, { name: 'kubernetes_get_pod' }, { name: 'kubernetes_get_namespace_default' }]) do
|
233
300
|
driver = create_driver('
|
234
301
|
kubernetes_url https://localhost:8443
|
235
302
|
watch false
|
@@ -237,25 +304,26 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
237
304
|
')
|
238
305
|
cache = driver.instance.instance_variable_get(:@id_cache)
|
239
306
|
cache['49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'] = {
|
240
|
-
|
241
|
-
|
307
|
+
pod_id: 'c76927af-f563-11e4-b32d-54ee7527188d',
|
308
|
+
namespace_id: '898268c8-4a36-11e5-9d81-42010af0194c'
|
242
309
|
}
|
243
|
-
filtered = emit({'time'=>'2015-05-08T09:22:01Z'}, '', d:driver)
|
310
|
+
filtered = emit({ 'time' => '2015-05-08T09:22:01Z' }, '', d: driver)
|
244
311
|
expected_kube_metadata = {
|
245
|
-
'time'=>'2015-05-08T09:22:01Z',
|
312
|
+
'time' => '2015-05-08T09:22:01Z',
|
246
313
|
'docker' => {
|
247
|
-
|
314
|
+
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
248
315
|
},
|
249
316
|
'kubernetes' => {
|
250
|
-
'host'
|
251
|
-
'pod_name'
|
252
|
-
'container_name'
|
253
|
-
'container_image'
|
317
|
+
'host' => 'jimmi-redhat.localnet',
|
318
|
+
'pod_name' => 'fabric8-console-controller-98rqc',
|
319
|
+
'container_name' => 'fabric8-console-container',
|
320
|
+
'container_image' => 'fabric8/hawtio-kubernetes:latest',
|
254
321
|
'container_image_id' => 'docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303',
|
255
|
-
'namespace_name'
|
256
|
-
'namespace_id'
|
257
|
-
'pod_id'
|
258
|
-
'
|
322
|
+
'namespace_name' => 'default',
|
323
|
+
'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
|
324
|
+
'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
|
325
|
+
'pod_ip' => '172.17.0.8',
|
326
|
+
'master_url' => 'https://localhost:8443',
|
259
327
|
'labels' => {
|
260
328
|
'component' => 'fabric8Console'
|
261
329
|
}
|
@@ -267,23 +335,25 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
267
335
|
end
|
268
336
|
|
269
337
|
test 'with docker & kubernetes metadata' do
|
270
|
-
|
271
|
-
|
338
|
+
|
339
|
+
VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' }, { name: 'kubernetes_get_pod' }, { name: 'kubernetes_get_namespace_default' }]) do
|
340
|
+
filtered = emit({ 'time' => '2015-05-08T09:22:01Z' })
|
272
341
|
expected_kube_metadata = {
|
273
|
-
'time'=>'2015-05-08T09:22:01Z',
|
342
|
+
'time' => '2015-05-08T09:22:01Z',
|
274
343
|
'docker' => {
|
275
|
-
|
344
|
+
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
276
345
|
},
|
277
346
|
'kubernetes' => {
|
278
|
-
'host'
|
279
|
-
'pod_name'
|
280
|
-
'container_name'
|
281
|
-
'container_image'
|
347
|
+
'host' => 'jimmi-redhat.localnet',
|
348
|
+
'pod_name' => 'fabric8-console-controller-98rqc',
|
349
|
+
'container_name' => 'fabric8-console-container',
|
350
|
+
'container_image' => 'fabric8/hawtio-kubernetes:latest',
|
282
351
|
'container_image_id' => 'docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303',
|
283
|
-
'namespace_name'
|
284
|
-
'namespace_id'
|
285
|
-
'pod_id'
|
286
|
-
'
|
352
|
+
'namespace_name' => 'default',
|
353
|
+
'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
|
354
|
+
'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
|
355
|
+
'pod_ip' => '172.17.0.8',
|
356
|
+
'master_url' => 'https://localhost:8443',
|
287
357
|
'labels' => {
|
288
358
|
'component' => 'fabric8Console'
|
289
359
|
}
|
@@ -295,8 +365,8 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
295
365
|
end
|
296
366
|
|
297
367
|
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
|
368
|
+
VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' }, { name: 'kubernetes_get_pod' },
|
369
|
+
{ name: 'kubernetes_get_namespace_default', options: { allow_playback_repeats: true } }]) do
|
300
370
|
filtered = emit({}, '
|
301
371
|
kubernetes_url https://localhost:8443
|
302
372
|
watch false
|
@@ -304,18 +374,19 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
304
374
|
')
|
305
375
|
expected_kube_metadata = {
|
306
376
|
'docker' => {
|
307
|
-
|
377
|
+
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
308
378
|
},
|
309
379
|
'kubernetes' => {
|
310
|
-
'host'
|
311
|
-
'pod_name'
|
312
|
-
'container_name'
|
313
|
-
'container_image'
|
380
|
+
'host' => 'jimmi-redhat.localnet',
|
381
|
+
'pod_name' => 'fabric8-console-controller-98rqc',
|
382
|
+
'container_name' => 'fabric8-console-container',
|
383
|
+
'container_image' => 'fabric8/hawtio-kubernetes:latest',
|
314
384
|
'container_image_id' => 'docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303',
|
315
|
-
'namespace_name'
|
316
|
-
'namespace_id'
|
317
|
-
'pod_id'
|
318
|
-
'
|
385
|
+
'namespace_name' => 'default',
|
386
|
+
'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
|
387
|
+
'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
|
388
|
+
'pod_ip' => '172.17.0.8',
|
389
|
+
'master_url' => 'https://localhost:8443',
|
319
390
|
'labels' => {
|
320
391
|
'component' => 'fabric8Console'
|
321
392
|
}
|
@@ -326,8 +397,8 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
326
397
|
end
|
327
398
|
|
328
399
|
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
|
400
|
+
VCR.use_cassettes([{ name: 'valid_kubernetes_api_server_using_token' }, { name: 'kubernetes_get_api_v1_using_token' },
|
401
|
+
{ name: 'kubernetes_get_pod_using_token' }, { name: 'kubernetes_get_namespace_default_using_token' }]) do
|
331
402
|
filtered = emit({}, '
|
332
403
|
kubernetes_url https://localhost:8443
|
333
404
|
verify_ssl false
|
@@ -339,15 +410,16 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
339
410
|
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
340
411
|
},
|
341
412
|
'kubernetes' => {
|
342
|
-
'host'
|
343
|
-
'pod_name'
|
344
|
-
'container_name'
|
345
|
-
'container_image'
|
413
|
+
'host' => 'jimmi-redhat.localnet',
|
414
|
+
'pod_name' => 'fabric8-console-controller-98rqc',
|
415
|
+
'container_name' => 'fabric8-console-container',
|
416
|
+
'container_image' => 'fabric8/hawtio-kubernetes:latest',
|
346
417
|
'container_image_id' => 'docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303',
|
347
|
-
'namespace_name'
|
348
|
-
'namespace_id'
|
349
|
-
'pod_id'
|
350
|
-
'
|
418
|
+
'namespace_name' => 'default',
|
419
|
+
'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
|
420
|
+
'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
|
421
|
+
'pod_ip' => '172.17.0.8',
|
422
|
+
'master_url' => 'https://localhost:8443',
|
351
423
|
'labels' => {
|
352
424
|
'component' => 'fabric8Console'
|
353
425
|
}
|
@@ -360,14 +432,14 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
360
432
|
test 'with docker & kubernetes metadata but no configured api server' do
|
361
433
|
filtered = emit({}, '')
|
362
434
|
expected_kube_metadata = {
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
|
435
|
+
'docker'=>{
|
436
|
+
'container_id'=>'49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
437
|
+
},
|
438
|
+
'kubernetes' => {
|
439
|
+
'pod_name' => 'fabric8-console-controller-98rqc',
|
440
|
+
'container_name' => 'fabric8-console-container',
|
441
|
+
'namespace_name' => 'default'
|
442
|
+
}
|
371
443
|
}
|
372
444
|
assert_equal(expected_kube_metadata, filtered[0])
|
373
445
|
end
|
@@ -380,17 +452,17 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
380
452
|
)
|
381
453
|
stub_request(:any, 'https://localhost:8443/api/v1/namespaces/default/pods/fabric8-console-controller-98rqc').to_timeout
|
382
454
|
stub_request(:any, 'https://localhost:8443/api/v1/namespaces/default').to_timeout
|
383
|
-
filtered = emit
|
455
|
+
filtered = emit
|
384
456
|
expected_kube_metadata = {
|
385
|
-
'docker'
|
386
|
-
'container_id'
|
457
|
+
'docker'=>{
|
458
|
+
'container_id'=>'49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
387
459
|
},
|
388
460
|
'kubernetes' => {
|
389
|
-
'pod_name'
|
390
|
-
'container_name'
|
391
|
-
'namespace_name'
|
461
|
+
'pod_name' => 'fabric8-console-controller-98rqc',
|
462
|
+
'container_name' => 'fabric8-console-container',
|
463
|
+
'namespace_name' => '.orphaned',
|
392
464
|
'orphaned_namespace' => 'default',
|
393
|
-
'namespace_id'
|
465
|
+
'namespace_id' => 'orphaned'
|
394
466
|
}
|
395
467
|
}
|
396
468
|
assert_equal(expected_kube_metadata, filtered[0])
|
@@ -405,13 +477,13 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
405
477
|
stub_request(:any, 'https://localhost:8443/api/v1/namespaces/default/pods/fabric8-console-controller.98rqc').to_timeout
|
406
478
|
filtered = emit_with_tag('var.log.containers.fabric8-console-controller.98rqc_default_fabric8-console-container-49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459.log', {}, '')
|
407
479
|
expected_kube_metadata = {
|
408
|
-
'docker'
|
409
|
-
'container_id'
|
480
|
+
'docker'=>{
|
481
|
+
'container_id'=>'49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
410
482
|
},
|
411
483
|
'kubernetes' => {
|
412
|
-
'pod_name'
|
413
|
-
'container_name'
|
414
|
-
'namespace_name'
|
484
|
+
'pod_name' => 'fabric8-console-controller.98rqc',
|
485
|
+
'container_name' => 'fabric8-console-container',
|
486
|
+
'namespace_name' => 'default'
|
415
487
|
}
|
416
488
|
}
|
417
489
|
assert_equal(expected_kube_metadata, filtered[0])
|
@@ -419,45 +491,48 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
419
491
|
|
420
492
|
test 'with docker metadata, non-kubernetes' do
|
421
493
|
filtered = emit_with_tag('non-kubernetes', {}, '')
|
422
|
-
assert_false(filtered[0].
|
494
|
+
assert_false(filtered[0].key?(:kubernetes))
|
423
495
|
end
|
424
496
|
|
425
497
|
test 'ignores invalid json in log field' do
|
426
498
|
json_log = "{'foo':123}"
|
427
499
|
msg = {
|
428
|
-
|
500
|
+
'log' => json_log
|
429
501
|
}
|
430
502
|
filtered = emit_with_tag('non-kubernetes', msg, '')
|
431
503
|
assert_equal(msg, filtered[0])
|
432
504
|
end
|
433
505
|
|
434
|
-
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: '
|
506
|
+
test 'with kubernetes dotted and slashed labels, de_dot and de_slash enabled' do
|
507
|
+
VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' },
|
508
|
+
{ name: 'kubernetes_docker_metadata_dotted_slashed_labels' }]) do
|
437
509
|
filtered = emit({}, '
|
438
510
|
kubernetes_url https://localhost:8443
|
439
511
|
watch false
|
440
512
|
cache_size 1
|
513
|
+
de_dot true
|
514
|
+
de_slash true
|
441
515
|
')
|
442
516
|
expected_kube_metadata = {
|
443
517
|
'docker' => {
|
444
|
-
|
518
|
+
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
445
519
|
},
|
446
520
|
'kubernetes' => {
|
447
|
-
'host'
|
448
|
-
'pod_name'
|
449
|
-
'container_name'
|
450
|
-
'container_image'
|
521
|
+
'host' => 'jimmi-redhat.localnet',
|
522
|
+
'pod_name' => 'fabric8-console-controller-98rqc',
|
523
|
+
'container_name' => 'fabric8-console-container',
|
524
|
+
'container_image' => 'fabric8/hawtio-kubernetes:latest',
|
451
525
|
'container_image_id' => 'docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303',
|
452
|
-
'namespace_id'
|
453
|
-
'namespace_labels'
|
454
|
-
'
|
526
|
+
'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
|
527
|
+
'namespace_labels' => {
|
528
|
+
'kubernetes_io__namespacetest' => 'somevalue'
|
455
529
|
},
|
456
|
-
'namespace_name'
|
457
|
-
'pod_id'
|
458
|
-
'
|
530
|
+
'namespace_name' => 'default',
|
531
|
+
'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
|
532
|
+
'pod_ip' => '172.17.0.8',
|
533
|
+
'master_url' => 'https://localhost:8443',
|
459
534
|
'labels' => {
|
460
|
-
'
|
535
|
+
'kubernetes_io__test' => 'somevalue'
|
461
536
|
}
|
462
537
|
}
|
463
538
|
}
|
@@ -465,32 +540,34 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
465
540
|
end
|
466
541
|
end
|
467
542
|
|
468
|
-
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: '
|
543
|
+
test 'with kubernetes dotted and slashed labels, de_dot and de_slash disabled' do
|
544
|
+
VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' },
|
545
|
+
{ name: 'kubernetes_docker_metadata_dotted_slashed_labels' }]) do
|
471
546
|
filtered = emit({}, '
|
472
547
|
kubernetes_url https://localhost:8443
|
473
548
|
watch false
|
474
549
|
cache_size 1
|
475
550
|
de_dot false
|
551
|
+
de_slash false
|
476
552
|
')
|
477
553
|
expected_kube_metadata = {
|
478
554
|
'docker' => {
|
479
|
-
|
555
|
+
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
480
556
|
},
|
481
557
|
'kubernetes' => {
|
482
|
-
'host'
|
483
|
-
'pod_name'
|
484
|
-
'container_name'
|
485
|
-
'container_image'
|
558
|
+
'host' => 'jimmi-redhat.localnet',
|
559
|
+
'pod_name' => 'fabric8-console-controller-98rqc',
|
560
|
+
'container_name' => 'fabric8-console-container',
|
561
|
+
'container_image' => 'fabric8/hawtio-kubernetes:latest',
|
486
562
|
'container_image_id' => 'docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303',
|
487
|
-
'namespace_id'
|
488
|
-
'namespace_labels'
|
563
|
+
'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
|
564
|
+
'namespace_labels' => {
|
489
565
|
'kubernetes.io/namespacetest' => 'somevalue'
|
490
566
|
},
|
491
|
-
'namespace_name'
|
492
|
-
'pod_id'
|
493
|
-
'
|
567
|
+
'namespace_name' => 'default',
|
568
|
+
'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
|
569
|
+
'pod_ip' => '172.17.0.8',
|
570
|
+
'master_url' => 'https://localhost:8443',
|
494
571
|
'labels' => {
|
495
572
|
'kubernetes.io/test' => 'somevalue'
|
496
573
|
}
|
@@ -503,11 +580,21 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
503
580
|
test 'invalid de_dot_separator config' do
|
504
581
|
assert_raise Fluent::ConfigError do
|
505
582
|
create_driver('
|
583
|
+
de_dot true
|
506
584
|
de_dot_separator contains.
|
507
585
|
')
|
508
586
|
end
|
509
587
|
end
|
510
588
|
|
589
|
+
test 'invalid de_slash_separator config' do
|
590
|
+
assert_raise Fluent::ConfigError do
|
591
|
+
create_driver('
|
592
|
+
de_slash true
|
593
|
+
de_slash_separator contains/
|
594
|
+
')
|
595
|
+
end
|
596
|
+
end
|
597
|
+
|
511
598
|
test 'with records from journald and docker & kubernetes metadata' do
|
512
599
|
# with use_journal true should ignore tags and use CONTAINER_NAME and CONTAINER_ID_FULL
|
513
600
|
tag = 'var.log.containers.junk1_junk2_junk3-49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed450.log'
|
@@ -516,8 +603,8 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
516
603
|
'CONTAINER_ID_FULL' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459',
|
517
604
|
'randomfield' => 'randomvalue'
|
518
605
|
}
|
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
|
606
|
+
VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' }, { name: 'kubernetes_get_pod' },
|
607
|
+
{ name: 'kubernetes_get_namespace_default' }]) do
|
521
608
|
filtered = emit_with_tag(tag, msg, '
|
522
609
|
kubernetes_url https://localhost:8443
|
523
610
|
watch false
|
@@ -526,18 +613,19 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
526
613
|
')
|
527
614
|
expected_kube_metadata = {
|
528
615
|
'docker' => {
|
529
|
-
|
616
|
+
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
530
617
|
},
|
531
618
|
'kubernetes' => {
|
532
|
-
'host'
|
533
|
-
'pod_name'
|
534
|
-
'container_name'
|
535
|
-
'container_image'
|
619
|
+
'host' => 'jimmi-redhat.localnet',
|
620
|
+
'pod_name' => 'fabric8-console-controller-98rqc',
|
621
|
+
'container_name' => 'fabric8-console-container',
|
622
|
+
'container_image' => 'fabric8/hawtio-kubernetes:latest',
|
536
623
|
'container_image_id' => 'docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303',
|
537
|
-
'namespace_name'
|
538
|
-
'namespace_id'
|
539
|
-
'pod_id'
|
540
|
-
'
|
624
|
+
'namespace_name' => 'default',
|
625
|
+
'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
|
626
|
+
'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
|
627
|
+
'pod_ip' => '172.17.0.8',
|
628
|
+
'master_url' => 'https://localhost:8443',
|
541
629
|
'labels' => {
|
542
630
|
'component' => 'fabric8Console'
|
543
631
|
}
|
@@ -555,8 +643,8 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
555
643
|
'CONTAINER_ID_FULL' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459',
|
556
644
|
'randomfield' => 'randomvalue'
|
557
645
|
}
|
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
|
646
|
+
VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' }, { name: 'kubernetes_get_pod' },
|
647
|
+
{ name: 'kubernetes_get_namespace_default', options: { allow_playback_repeats: true } }]) do
|
560
648
|
filtered = emit_with_tag(tag, msg, '
|
561
649
|
kubernetes_url https://localhost:8443
|
562
650
|
watch false
|
@@ -565,18 +653,19 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
565
653
|
')
|
566
654
|
expected_kube_metadata = {
|
567
655
|
'docker' => {
|
568
|
-
|
656
|
+
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
569
657
|
},
|
570
658
|
'kubernetes' => {
|
571
|
-
'host'
|
572
|
-
'pod_name'
|
573
|
-
'container_name'
|
574
|
-
'container_image'
|
659
|
+
'host' => 'jimmi-redhat.localnet',
|
660
|
+
'pod_name' => 'fabric8-console-controller-98rqc',
|
661
|
+
'container_name' => 'fabric8-console-container',
|
662
|
+
'container_image' => 'fabric8/hawtio-kubernetes:latest',
|
575
663
|
'container_image_id' => 'docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303',
|
576
|
-
'namespace_name'
|
577
|
-
'namespace_id'
|
578
|
-
'pod_id'
|
579
|
-
'
|
664
|
+
'namespace_name' => 'default',
|
665
|
+
'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
|
666
|
+
'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
|
667
|
+
'pod_ip' => '172.17.0.8',
|
668
|
+
'master_url' => 'https://localhost:8443',
|
580
669
|
'labels' => {
|
581
670
|
'component' => 'fabric8Console'
|
582
671
|
}
|
@@ -597,12 +686,12 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
597
686
|
'pod_name' => 'k8s-pod-name',
|
598
687
|
'container_name' => 'k8s-container-name'
|
599
688
|
},
|
600
|
-
'docker' => {'container_id' => 'e463bc0d3ae38f5c89d92dca49b30e049e899799920b79d4d5f705acbe82ba95'},
|
689
|
+
'docker' => { 'container_id' => 'e463bc0d3ae38f5c89d92dca49b30e049e899799920b79d4d5f705acbe82ba95' },
|
601
690
|
'randomfield' => 'randomvalue'
|
602
691
|
}
|
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
|
692
|
+
VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' }, { name: 'kubernetes_get_pod' },
|
693
|
+
{ name: 'kubernetes_get_namespace_default' },
|
694
|
+
{ name: 'metadata_from_tag_journald_and_kubernetes_fields' }]) do
|
606
695
|
es = emit_with_tag(tag, msg, '
|
607
696
|
kubernetes_url https://localhost:8443
|
608
697
|
watch false
|
@@ -610,23 +699,24 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
610
699
|
')
|
611
700
|
expected_kube_metadata = {
|
612
701
|
'docker' => {
|
613
|
-
|
702
|
+
'container_id' => 'e463bc0d3ae38f5c89d92dca49b30e049e899799920b79d4d5f705acbe82ba95'
|
614
703
|
},
|
615
704
|
'kubernetes' => {
|
616
|
-
'host'
|
617
|
-
'pod_name'
|
618
|
-
'container_name'
|
619
|
-
'container_image'
|
705
|
+
'host' => 'jimmi-redhat.localnet',
|
706
|
+
'pod_name' => 'k8s-pod-name',
|
707
|
+
'container_name' => 'k8s-container-name',
|
708
|
+
'container_image' => 'k8s-container-image:latest',
|
620
709
|
'container_image_id' => 'docker://d78c5217c41e9af08d37d9ae2cb070afa1fe3da6bc77bfb18879a8b4bfdf8a34',
|
621
|
-
'namespace_name'
|
622
|
-
'namespace_id'
|
623
|
-
'pod_id'
|
624
|
-
'
|
710
|
+
'namespace_name' => 'k8s-namespace-name',
|
711
|
+
'namespace_id' => '8e0dc8fc-59f2-49f7-a3e2-ed0913e19d9f',
|
712
|
+
'pod_id' => 'ebabf749-5fcd-4750-a3f0-aedd89476da8',
|
713
|
+
'pod_ip' => '172.17.0.8',
|
714
|
+
'master_url' => 'https://localhost:8443',
|
625
715
|
'labels' => {
|
626
716
|
'component' => 'k8s-test'
|
627
717
|
}
|
628
718
|
}
|
629
|
-
}.merge(msg) {|key,oldval,newval| (
|
719
|
+
}.merge(msg) { |key, oldval, newval| (key == 'kubernetes') || (key == 'docker') ? oldval : newval }
|
630
720
|
assert_equal(expected_kube_metadata, es[0])
|
631
721
|
end
|
632
722
|
end
|
@@ -642,12 +732,12 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
642
732
|
'pod_name' => 'k8s-pod-name',
|
643
733
|
'container_name' => 'k8s-container-name'
|
644
734
|
},
|
645
|
-
'docker' => {'container_id' => 'e463bc0d3ae38f5c89d92dca49b30e049e899799920b79d4d5f705acbe82ba95'},
|
735
|
+
'docker' => { 'container_id' => 'e463bc0d3ae38f5c89d92dca49b30e049e899799920b79d4d5f705acbe82ba95' },
|
646
736
|
'randomfield' => 'randomvalue'
|
647
737
|
}
|
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
|
738
|
+
VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' }, { name: 'kubernetes_get_pod' },
|
739
|
+
{ name: 'kubernetes_get_namespace_default', options: { allow_playback_repeats: true } },
|
740
|
+
{ name: 'metadata_from_tag_and_journald_fields' }]) do
|
651
741
|
es = emit_with_tag(tag, msg, '
|
652
742
|
kubernetes_url https://localhost:8443
|
653
743
|
watch false
|
@@ -656,30 +746,30 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
656
746
|
')
|
657
747
|
expected_kube_metadata = {
|
658
748
|
'docker' => {
|
659
|
-
|
749
|
+
'container_id' => '838350c64bacba968d39a30a50789b2795291fceca6ccbff55298671d46b0e3b'
|
660
750
|
},
|
661
751
|
'kubernetes' => {
|
662
|
-
'host'
|
663
|
-
'pod_name'
|
664
|
-
'container_name'
|
665
|
-
'container_image'
|
752
|
+
'host' => 'jimmi-redhat.localnet',
|
753
|
+
'pod_name' => 'journald-pod-name',
|
754
|
+
'container_name' => 'journald-container-name',
|
755
|
+
'container_image' => 'journald-container-image:latest',
|
666
756
|
'container_image_id' => 'docker://dda4c95705fb7050b701b10a7fe928ca5bc971a1dcb521ae3c339194cbf36b47',
|
667
|
-
'namespace_name'
|
668
|
-
'namespace_id'
|
669
|
-
'pod_id'
|
670
|
-
'
|
757
|
+
'namespace_name' => 'journald-namespace-name',
|
758
|
+
'namespace_id' => '8282888f-733f-4f23-a3d3-1fdfa3bdacf2',
|
759
|
+
'pod_id' => '5e1c1e27-b637-4e81-80b6-6d8a8c404d3b',
|
760
|
+
'pod_ip' => '172.17.0.8',
|
761
|
+
'master_url' => 'https://localhost:8443',
|
671
762
|
'labels' => {
|
672
763
|
'component' => 'journald-test'
|
673
764
|
}
|
674
765
|
}
|
675
|
-
}.merge(msg) {|key,oldval,newval| (
|
766
|
+
}.merge(msg) { |key, oldval, newval| (key == 'kubernetes') || (key == 'docker') ? oldval : newval }
|
676
767
|
assert_equal(expected_kube_metadata, es[0])
|
677
768
|
end
|
678
769
|
end
|
679
770
|
|
680
771
|
test 'uses metadata from tag if use_journal false and lookup_from_k8s_field false' do
|
681
772
|
# with use_journal unset, should still use the journal fields instead of tag fields
|
682
|
-
tag = 'var.log.containers.fabric8-console-controller-98rqc_default_fabric8-console-container-49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459.log'
|
683
773
|
msg = {
|
684
774
|
'CONTAINER_NAME' => 'k8s_journald-container-name.db89db89_journald-pod-name_journald-namespace-name_c76927af-f563-11e4-b32d-54ee7527188d_89db89db',
|
685
775
|
'CONTAINER_ID_FULL' => '838350c64bacba968d39a30a50789b2795291fceca6ccbff55298671d46b0e3b',
|
@@ -688,74 +778,76 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
688
778
|
'pod_name' => 'k8s-pod-name',
|
689
779
|
'container_name' => 'k8s-container-name'
|
690
780
|
},
|
691
|
-
'docker' => {'container_id' => 'e463bc0d3ae38f5c89d92dca49b30e049e899799920b79d4d5f705acbe82ba95'},
|
781
|
+
'docker' => { 'container_id' => 'e463bc0d3ae38f5c89d92dca49b30e049e899799920b79d4d5f705acbe82ba95' },
|
692
782
|
'randomfield' => 'randomvalue'
|
693
783
|
}
|
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
|
697
|
-
es = emit_with_tag(
|
784
|
+
VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' }, { name: 'kubernetes_get_pod' },
|
785
|
+
{ name: 'kubernetes_get_namespace_default', options: { allow_playback_repeats: true } },
|
786
|
+
{ name: 'metadata_from_tag_and_journald_fields' }]) do
|
787
|
+
es = emit_with_tag(VAR_LOG_CONTAINER_TAG, msg, "
|
698
788
|
kubernetes_url https://localhost:8443
|
699
789
|
watch false
|
700
790
|
cache_size 1
|
701
791
|
lookup_from_k8s_field false
|
702
792
|
use_journal false
|
703
|
-
|
793
|
+
")
|
704
794
|
expected_kube_metadata = {
|
705
795
|
'docker' => {
|
706
|
-
|
796
|
+
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
707
797
|
},
|
708
798
|
'kubernetes' => {
|
709
|
-
'host'
|
710
|
-
'pod_name'
|
711
|
-
'container_name'
|
712
|
-
'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',
|
713
803
|
'container_image_id' => 'docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303',
|
714
|
-
'namespace_name'
|
715
|
-
'namespace_id'
|
716
|
-
'pod_id'
|
717
|
-
'
|
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',
|
718
809
|
'labels' => {
|
719
810
|
'component' => 'fabric8Console'
|
720
811
|
}
|
721
812
|
}
|
722
|
-
}.merge(msg) {|key,oldval,newval| (
|
813
|
+
}.merge(msg) { |key, oldval, newval| (key == 'kubernetes') || (key == 'docker') ? oldval : newval }
|
723
814
|
assert_equal(expected_kube_metadata, es[0])
|
724
815
|
end
|
725
816
|
end
|
726
817
|
|
727
818
|
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({},'
|
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({}, '
|
732
823
|
kubernetes_url https://localhost:8443
|
733
824
|
watch false
|
734
825
|
cache_size 1
|
735
826
|
annotation_match [ "^custom.+", "two"]
|
736
827
|
')
|
737
828
|
expected_kube_metadata = {
|
738
|
-
|
739
|
-
|
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
|
+
'container_image' => 'fabric8/hawtio-kubernetes:latest',
|
837
|
+
'container_image_id' => 'docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303',
|
838
|
+
'namespace_name' => 'default',
|
839
|
+
'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
|
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'
|
740
845
|
},
|
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
|
-
}
|
846
|
+
'annotations' => {
|
847
|
+
'custom_field1' => 'hello_kitty',
|
848
|
+
'field_two' => 'value'
|
758
849
|
}
|
850
|
+
}
|
759
851
|
}
|
760
852
|
assert_equal(expected_kube_metadata, filtered[0])
|
761
853
|
end
|
@@ -769,9 +861,13 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
769
861
|
'CONTAINER_ID_FULL' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459',
|
770
862
|
'randomfield' => 'randomvalue'
|
771
863
|
}
|
772
|
-
VCR.use_cassettes([
|
773
|
-
|
774
|
-
|
864
|
+
VCR.use_cassettes([
|
865
|
+
{ name: 'valid_kubernetes_api_server' },
|
866
|
+
{ name: 'kubernetes_get_api_v1' },
|
867
|
+
{ name: 'kubernetes_get_pod' },
|
868
|
+
{ name: 'kubernetes_get_namespace_default' },
|
869
|
+
{ name: 'metadata_from_tag_and_journald_fields' }
|
870
|
+
]) do
|
775
871
|
filtered = emit_with_tag(tag, msg, '
|
776
872
|
kubernetes_url https://localhost:8443
|
777
873
|
watch false
|
@@ -780,18 +876,19 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
780
876
|
')
|
781
877
|
expected_kube_metadata = {
|
782
878
|
'docker' => {
|
783
|
-
|
879
|
+
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
784
880
|
},
|
785
881
|
'kubernetes' => {
|
786
|
-
'host'
|
787
|
-
'pod_name'
|
788
|
-
'container_name'
|
789
|
-
'container_image'
|
882
|
+
'host' => 'jimmi-redhat.localnet',
|
883
|
+
'pod_name' => 'fabric8-console-controller-98rqc',
|
884
|
+
'container_name' => 'fabric8-console-container',
|
885
|
+
'container_image' => 'fabric8/hawtio-kubernetes:latest',
|
790
886
|
'container_image_id' => 'docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303',
|
791
|
-
'namespace_name'
|
792
|
-
'namespace_id'
|
793
|
-
'pod_id'
|
794
|
-
'
|
887
|
+
'namespace_name' => 'default',
|
888
|
+
'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
|
889
|
+
'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
|
890
|
+
'pod_ip' => '172.17.0.8',
|
891
|
+
'master_url' => 'https://localhost:8443',
|
795
892
|
'labels' => {
|
796
893
|
'component' => 'fabric8Console'
|
797
894
|
}
|
@@ -802,77 +899,80 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
802
899
|
end
|
803
900
|
|
804
901
|
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({},'
|
902
|
+
VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' },
|
903
|
+
{ name: 'kubernetes_docker_metadata_annotations' },
|
904
|
+
{ name: 'kubernetes_get_namespace_default' }]) do
|
905
|
+
filtered = emit({}, '
|
809
906
|
kubernetes_url https://localhost:8443
|
810
907
|
watch false
|
811
908
|
cache_size 1
|
812
909
|
annotation_match [ "^custom.+", "two", "workspace*"]
|
813
910
|
')
|
814
911
|
expected_kube_metadata = {
|
815
|
-
|
816
|
-
|
912
|
+
'docker' => {
|
913
|
+
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
914
|
+
},
|
915
|
+
'kubernetes' => {
|
916
|
+
'host' => 'jimmi-redhat.localnet',
|
917
|
+
'pod_name' => 'fabric8-console-controller-98rqc',
|
918
|
+
'container_name' => 'fabric8-console-container',
|
919
|
+
'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
|
920
|
+
'namespace_name' => 'default',
|
921
|
+
'container_image' => 'fabric8/hawtio-kubernetes:latest',
|
922
|
+
'container_image_id' => 'docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303',
|
923
|
+
'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
|
924
|
+
'pod_ip' => '172.17.0.8',
|
925
|
+
'master_url' => 'https://localhost:8443',
|
926
|
+
'labels' => {
|
927
|
+
'component' => 'fabric8Console'
|
817
928
|
},
|
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
|
-
}
|
929
|
+
'annotations' => {
|
930
|
+
'custom_field1' => 'hello_kitty',
|
931
|
+
'field_two' => 'value'
|
932
|
+
},
|
933
|
+
'namespace_annotations' => {
|
934
|
+
'workspaceId' => 'myWorkspaceName'
|
838
935
|
}
|
936
|
+
}
|
839
937
|
}
|
840
938
|
assert_equal(expected_kube_metadata, filtered[0])
|
841
939
|
end
|
842
940
|
end
|
843
941
|
|
844
942
|
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({},'
|
943
|
+
VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' },
|
944
|
+
{ name: 'kubernetes_docker_metadata_annotations' },
|
945
|
+
{ name: 'kubernetes_get_namespace_default' }]) do
|
946
|
+
filtered = emit({}, '
|
849
947
|
kubernetes_url https://localhost:8443
|
850
948
|
watch false
|
851
949
|
cache_size 1
|
852
950
|
annotation_match [ "noMatch*"]
|
853
951
|
')
|
854
952
|
expected_kube_metadata = {
|
855
|
-
|
856
|
-
|
857
|
-
|
858
|
-
|
859
|
-
|
860
|
-
|
861
|
-
|
862
|
-
|
863
|
-
|
864
|
-
|
865
|
-
|
866
|
-
|
867
|
-
|
868
|
-
|
869
|
-
|
870
|
-
|
953
|
+
'docker' => {
|
954
|
+
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
955
|
+
},
|
956
|
+
'kubernetes' => {
|
957
|
+
'host' => 'jimmi-redhat.localnet',
|
958
|
+
'pod_name' => 'fabric8-console-controller-98rqc',
|
959
|
+
'container_name' => 'fabric8-console-container',
|
960
|
+
'container_image' => 'fabric8/hawtio-kubernetes:latest',
|
961
|
+
'container_image_id' => 'docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303',
|
962
|
+
'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
|
963
|
+
'namespace_name' => 'default',
|
964
|
+
'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
|
965
|
+
'pod_ip' => '172.17.0.8',
|
966
|
+
'master_url' => 'https://localhost:8443',
|
967
|
+
'labels' => {
|
968
|
+
'component' => 'fabric8Console'
|
871
969
|
}
|
970
|
+
}
|
872
971
|
}
|
873
972
|
assert_equal(expected_kube_metadata, filtered[0])
|
874
973
|
end
|
875
974
|
end
|
975
|
+
|
876
976
|
test 'with CONTAINER_NAME that does not match' do
|
877
977
|
tag = 'var.log.containers.junk4_junk5_junk6-49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed450.log'
|
878
978
|
msg = {
|
@@ -880,9 +980,9 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
880
980
|
'CONTAINER_ID_FULL' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459',
|
881
981
|
'randomfield' => 'randomvalue'
|
882
982
|
}
|
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
|
983
|
+
VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' },
|
984
|
+
{ name: 'kubernetes_docker_metadata_annotations' },
|
985
|
+
{ name: 'kubernetes_get_namespace_default' }]) do
|
886
986
|
filtered = emit_with_tag(tag, msg, '
|
887
987
|
kubernetes_url https://localhost:8443
|
888
988
|
watch false
|
@@ -897,6 +997,7 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
897
997
|
assert_equal(expected_kube_metadata, filtered[0])
|
898
998
|
end
|
899
999
|
end
|
1000
|
+
|
900
1001
|
test 'with CONTAINER_NAME starts with k8s_ that does not match' do
|
901
1002
|
tag = 'var.log.containers.junk4_junk5_junk6-49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed450.log'
|
902
1003
|
msg = {
|
@@ -904,9 +1005,9 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
904
1005
|
'CONTAINER_ID_FULL' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459',
|
905
1006
|
'randomfield' => 'randomvalue'
|
906
1007
|
}
|
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
|
1008
|
+
VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' },
|
1009
|
+
{ name: 'kubernetes_docker_metadata_annotations' },
|
1010
|
+
{ name: 'kubernetes_get_namespace_default' }]) do
|
910
1011
|
filtered = emit_with_tag(tag, msg, '
|
911
1012
|
kubernetes_url https://localhost:8443
|
912
1013
|
watch false
|
@@ -923,10 +1024,11 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
923
1024
|
end
|
924
1025
|
|
925
1026
|
test 'processes all events when reading from MessagePackEventStream' do
|
926
|
-
VCR.use_cassettes([{name: 'valid_kubernetes_api_server'},
|
927
|
-
{name: '
|
928
|
-
{name: '
|
929
|
-
|
1027
|
+
VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' },
|
1028
|
+
{ name: 'kubernetes_get_api_v1' },
|
1029
|
+
{ name: 'kubernetes_get_pod' },
|
1030
|
+
{ name: 'kubernetes_get_namespace_default' }]) do
|
1031
|
+
entries = [[@time, { 'time' => '2015-05-08T09:22:01Z' }], [@time, { 'time' => '2015-05-08T09:22:01Z' }]]
|
930
1032
|
array_stream = Fluent::ArrayEventStream.new(entries)
|
931
1033
|
msgpack_stream = Fluent::MessagePackEventStream.new(array_stream.to_msgpack_stream)
|
932
1034
|
|
@@ -935,30 +1037,31 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
935
1037
|
watch false
|
936
1038
|
cache_size 1
|
937
1039
|
')
|
938
|
-
d.run
|
939
|
-
d.feed(
|
940
|
-
|
941
|
-
filtered = d.filtered.map
|
1040
|
+
d.run do
|
1041
|
+
d.feed(VAR_LOG_CONTAINER_TAG, msgpack_stream)
|
1042
|
+
end
|
1043
|
+
filtered = d.filtered.map(&:last)
|
942
1044
|
|
943
1045
|
expected_kube_metadata = {
|
944
|
-
|
945
|
-
|
946
|
-
|
947
|
-
|
948
|
-
|
949
|
-
|
950
|
-
|
951
|
-
|
952
|
-
|
953
|
-
|
954
|
-
|
955
|
-
|
956
|
-
|
957
|
-
|
958
|
-
|
959
|
-
|
960
|
-
|
1046
|
+
'time' => '2015-05-08T09:22:01Z',
|
1047
|
+
'docker' => {
|
1048
|
+
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
1049
|
+
},
|
1050
|
+
'kubernetes' => {
|
1051
|
+
'host' => 'jimmi-redhat.localnet',
|
1052
|
+
'pod_name' => 'fabric8-console-controller-98rqc',
|
1053
|
+
'container_name' => 'fabric8-console-container',
|
1054
|
+
'container_image' => 'fabric8/hawtio-kubernetes:latest',
|
1055
|
+
'container_image_id' => 'docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303',
|
1056
|
+
'namespace_name' => 'default',
|
1057
|
+
'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
|
1058
|
+
'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
|
1059
|
+
'pod_ip' => '172.17.0.8',
|
1060
|
+
'master_url' => 'https://localhost:8443',
|
1061
|
+
'labels' => {
|
1062
|
+
'component' => 'fabric8Console'
|
961
1063
|
}
|
1064
|
+
}
|
962
1065
|
}
|
963
1066
|
|
964
1067
|
assert_equal(expected_kube_metadata, filtered[0])
|
@@ -967,9 +1070,9 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
967
1070
|
end
|
968
1071
|
|
969
1072
|
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({},'
|
1073
|
+
VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' }, { name: 'kubernetes_get_pod' },
|
1074
|
+
{ name: 'kubernetes_get_namespace_default' }]) do
|
1075
|
+
filtered = emit({}, '
|
973
1076
|
kubernetes_url https://localhost:8443
|
974
1077
|
watch false
|
975
1078
|
cache_size 1
|
@@ -979,16 +1082,17 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
979
1082
|
skip_namespace_metadata true
|
980
1083
|
')
|
981
1084
|
expected_kube_metadata = {
|
982
|
-
|
983
|
-
|
984
|
-
|
985
|
-
|
986
|
-
|
987
|
-
|
988
|
-
|
989
|
-
|
990
|
-
|
991
|
-
|
1085
|
+
'docker'=>{
|
1086
|
+
'container_id'=>'49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
1087
|
+
},
|
1088
|
+
'kubernetes' => {
|
1089
|
+
'host' => 'jimmi-redhat.localnet',
|
1090
|
+
'pod_name' => 'fabric8-console-controller-98rqc',
|
1091
|
+
'container_name' => 'fabric8-console-container',
|
1092
|
+
'namespace_name' => 'default',
|
1093
|
+
'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
|
1094
|
+
'pod_ip' => '172.17.0.8'
|
1095
|
+
}
|
992
1096
|
}
|
993
1097
|
|
994
1098
|
assert_equal(expected_kube_metadata, filtered[0])
|