fluent-plugin-kubernetes_metadata_filter 2.1.4 → 2.9.4
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 +57 -0
- data/.gitignore +0 -1
- data/.rubocop.yml +57 -0
- data/Gemfile +4 -2
- data/Gemfile.lock +158 -0
- data/README.md +48 -28
- data/Rakefile +15 -11
- data/fluent-plugin-kubernetes_metadata_filter.gemspec +25 -28
- data/lib/fluent/plugin/filter_kubernetes_metadata.rb +185 -131
- data/lib/fluent/plugin/kubernetes_metadata_cache_strategy.rb +27 -20
- data/lib/fluent/plugin/kubernetes_metadata_common.rb +59 -33
- 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 +121 -27
- data/lib/fluent/plugin/kubernetes_metadata_watch_pods.rb +138 -29
- data/release_notes.md +42 -0
- data/test/cassettes/kubernetes_docker_metadata_annotations.yml +0 -34
- data/test/cassettes/{kubernetes_docker_metadata_dotted_labels.yml → kubernetes_docker_metadata_dotted_slashed_labels.yml} +0 -34
- data/test/cassettes/kubernetes_get_api_v1.yml +193 -0
- data/test/cassettes/kubernetes_get_api_v1_using_token.yml +195 -0
- data/test/cassettes/kubernetes_get_namespace_default.yml +69 -0
- data/test/cassettes/kubernetes_get_namespace_default_using_token.yml +71 -0
- data/test/cassettes/{kubernetes_docker_metadata.yml → kubernetes_get_pod.yml} +0 -82
- data/test/cassettes/{metadata_with_namespace_id.yml → kubernetes_get_pod_container_init.yml} +3 -134
- data/test/cassettes/{kubernetes_docker_metadata_using_bearer_token.yml → kubernetes_get_pod_using_token.yml} +5 -105
- data/test/cassettes/metadata_from_tag_and_journald_fields.yml +0 -255
- data/test/cassettes/metadata_from_tag_journald_and_kubernetes_fields.yml +0 -255
- data/test/cassettes/{non_kubernetes_docker_metadata.yml → valid_kubernetes_api_server_using_token.yml} +4 -44
- 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 +480 -320
- data/test/plugin/test_utils.rb +56 -0
- data/test/plugin/test_watch_namespaces.rb +209 -55
- data/test/plugin/test_watch_pods.rb +302 -103
- data/test/plugin/watch_test.rb +52 -33
- metadata +69 -72
- data/circle.yml +0 -17
@@ -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,7 +28,8 @@ 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)
|
@@ -43,6 +41,11 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
43
41
|
assert_equal(1000, d.instance.cache_size)
|
44
42
|
end
|
45
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
|
+
|
46
49
|
test 'kubernetes url' do
|
47
50
|
VCR.use_cassette('valid_kubernetes_api_server') do
|
48
51
|
d = create_driver('
|
@@ -81,94 +84,159 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
81
84
|
|
82
85
|
test 'service account credentials' do
|
83
86
|
VCR.use_cassette('valid_kubernetes_api_server') do
|
84
|
-
|
85
|
-
|
86
|
-
ENV['KUBERNETES_SERVICE_PORT'] = '8443'
|
87
|
+
ENV['KUBERNETES_SERVICE_HOST'] = 'localhost'
|
88
|
+
ENV['KUBERNETES_SERVICE_PORT'] = '8443'
|
87
89
|
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
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)
|
92
94
|
|
93
|
-
|
94
|
-
|
95
|
+
File.open(expected_cert_path, 'w')
|
96
|
+
File.open(expected_token_path, 'w')
|
95
97
|
|
96
|
-
|
98
|
+
d = create_driver("
|
97
99
|
watch false
|
98
100
|
secret_dir #{dir}
|
99
101
|
")
|
100
102
|
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
}
|
105
|
-
ensure
|
106
|
-
ENV['KUBERNETES_SERVICE_HOST'] = nil
|
107
|
-
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)
|
108
106
|
end
|
107
|
+
ensure
|
108
|
+
ENV['KUBERNETES_SERVICE_HOST'] = nil
|
109
|
+
ENV['KUBERNETES_SERVICE_PORT'] = nil
|
109
110
|
end
|
110
111
|
end
|
111
112
|
|
112
113
|
test 'service account credential files are tested for existence' do
|
113
114
|
VCR.use_cassette('valid_kubernetes_api_server') do
|
114
|
-
|
115
|
-
|
116
|
-
ENV['KUBERNETES_SERVICE_PORT'] = '8443'
|
115
|
+
ENV['KUBERNETES_SERVICE_HOST'] = 'localhost'
|
116
|
+
ENV['KUBERNETES_SERVICE_PORT'] = '8443'
|
117
117
|
|
118
|
-
|
119
|
-
|
118
|
+
Dir.mktmpdir do |dir|
|
119
|
+
d = create_driver("
|
120
120
|
watch false
|
121
121
|
secret_dir #{dir}
|
122
122
|
")
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
}
|
127
|
-
ensure
|
128
|
-
ENV['KUBERNETES_SERVICE_HOST'] = nil
|
129
|
-
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)
|
130
126
|
end
|
127
|
+
ensure
|
128
|
+
ENV['KUBERNETES_SERVICE_HOST'] = nil
|
129
|
+
ENV['KUBERNETES_SERVICE_PORT'] = nil
|
131
130
|
end
|
132
131
|
end
|
133
132
|
end
|
134
133
|
|
135
|
-
sub_test_case '
|
136
|
-
|
137
|
-
def emit(msg={}, config='
|
134
|
+
sub_test_case 'filter' do
|
135
|
+
def emit(msg = {}, config = '
|
138
136
|
kubernetes_url https://localhost:8443
|
139
137
|
watch false
|
140
138
|
cache_size 1
|
141
139
|
', d: nil)
|
142
140
|
d = create_driver(config) if d.nil?
|
143
|
-
d.run(default_tag:
|
141
|
+
d.run(default_tag: VAR_LOG_CONTAINER_TAG) do
|
144
142
|
d.feed(@time, msg)
|
145
|
-
|
146
|
-
d.filtered.map
|
143
|
+
end
|
144
|
+
d.filtered.map(&:last)
|
147
145
|
end
|
148
146
|
|
149
|
-
def emit_with_tag(tag, msg={}, config='
|
147
|
+
def emit_with_tag(tag, msg = {}, config = '
|
150
148
|
kubernetes_url https://localhost:8443
|
151
149
|
watch false
|
152
150
|
cache_size 1
|
153
151
|
')
|
154
152
|
d = create_driver(config)
|
155
|
-
d.run(default_tag: tag)
|
153
|
+
d.run(default_tag: tag) do
|
156
154
|
d.feed(@time, msg)
|
157
|
-
|
158
|
-
d.filtered.map
|
155
|
+
end
|
156
|
+
d.filtered.map(&:last)
|
159
157
|
end
|
160
158
|
|
161
159
|
test 'nil event stream' do
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
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
|
168
236
|
end
|
169
237
|
|
170
238
|
test 'inability to connect to the api server handles exception and doensnt block pipeline' do
|
171
|
-
VCR.
|
239
|
+
VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' }]) do
|
172
240
|
driver = create_driver('
|
173
241
|
kubernetes_url https://localhost:8443
|
174
242
|
watch false
|
@@ -176,18 +244,18 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
176
244
|
')
|
177
245
|
stub_request(:any, 'https://localhost:8443/api/v1/namespaces/default/pods/fabric8-console-controller-98rqc').to_raise(SocketError.new('error from pod fetch'))
|
178
246
|
stub_request(:any, 'https://localhost:8443/api/v1/namespaces/default').to_raise(SocketError.new('socket error from namespace fetch'))
|
179
|
-
filtered = emit({'time'=>'2015-05-08T09:22:01Z'}, '', :
|
247
|
+
filtered = emit({ 'time' => '2015-05-08T09:22:01Z' }, '', d: driver)
|
180
248
|
expected_kube_metadata = {
|
181
|
-
'time'=>'2015-05-08T09:22:01Z',
|
182
|
-
'docker'
|
183
|
-
|
249
|
+
'time' => '2015-05-08T09:22:01Z',
|
250
|
+
'docker'=>{
|
251
|
+
'container_id'=>'49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
184
252
|
},
|
185
253
|
'kubernetes' => {
|
186
|
-
'pod_name'
|
254
|
+
'pod_name' => 'fabric8-console-controller-98rqc',
|
187
255
|
'container_name' => 'fabric8-console-container',
|
188
|
-
|
256
|
+
'namespace_id' => 'orphaned',
|
189
257
|
'namespace_name' => '.orphaned',
|
190
|
-
|
258
|
+
'orphaned_namespace' => 'default'
|
191
259
|
}
|
192
260
|
}
|
193
261
|
assert_equal(expected_kube_metadata, filtered[0])
|
@@ -195,7 +263,7 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
195
263
|
end
|
196
264
|
|
197
265
|
test 'with docker & kubernetes metadata where id cache hit and metadata miss' do
|
198
|
-
VCR.
|
266
|
+
VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' }]) do
|
199
267
|
driver = create_driver('
|
200
268
|
kubernetes_url https://localhost:8443
|
201
269
|
watch false
|
@@ -203,23 +271,23 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
203
271
|
')
|
204
272
|
cache = driver.instance.instance_variable_get(:@id_cache)
|
205
273
|
cache['49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'] = {
|
206
|
-
|
207
|
-
|
274
|
+
pod_id: 'c76927af-f563-11e4-b32d-54ee7527188d',
|
275
|
+
namespace_id: '898268c8-4a36-11e5-9d81-42010af0194c'
|
208
276
|
}
|
209
277
|
stub_request(:any, 'https://localhost:8443/api/v1/namespaces/default/pods/fabric8-console-controller-98rqc').to_timeout
|
210
278
|
stub_request(:any, 'https://localhost:8443/api/v1/namespaces/default').to_timeout
|
211
|
-
filtered = emit({'time'=>'2015-05-08T09:22:01Z'}, '', d:driver)
|
279
|
+
filtered = emit({ 'time' => '2015-05-08T09:22:01Z' }, '', d: driver)
|
212
280
|
expected_kube_metadata = {
|
213
|
-
'time'=>'2015-05-08T09:22:01Z',
|
281
|
+
'time' => '2015-05-08T09:22:01Z',
|
214
282
|
'docker' => {
|
215
|
-
|
283
|
+
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
216
284
|
},
|
217
285
|
'kubernetes' => {
|
218
|
-
'pod_name'
|
219
|
-
'container_name'
|
220
|
-
'namespace_name'
|
221
|
-
'namespace_id'
|
222
|
-
'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'
|
223
291
|
}
|
224
292
|
}
|
225
293
|
|
@@ -228,7 +296,7 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
228
296
|
end
|
229
297
|
|
230
298
|
test 'with docker & kubernetes metadata where id cache hit and metadata is reloaded' do
|
231
|
-
VCR.
|
299
|
+
VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' }, { name: 'kubernetes_get_pod' }, { name: 'kubernetes_get_namespace_default' }]) do
|
232
300
|
driver = create_driver('
|
233
301
|
kubernetes_url https://localhost:8443
|
234
302
|
watch false
|
@@ -236,25 +304,26 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
236
304
|
')
|
237
305
|
cache = driver.instance.instance_variable_get(:@id_cache)
|
238
306
|
cache['49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'] = {
|
239
|
-
|
240
|
-
|
307
|
+
pod_id: 'c76927af-f563-11e4-b32d-54ee7527188d',
|
308
|
+
namespace_id: '898268c8-4a36-11e5-9d81-42010af0194c'
|
241
309
|
}
|
242
|
-
filtered = emit({'time'=>'2015-05-08T09:22:01Z'}, '', d:driver)
|
310
|
+
filtered = emit({ 'time' => '2015-05-08T09:22:01Z' }, '', d: driver)
|
243
311
|
expected_kube_metadata = {
|
244
|
-
'time'=>'2015-05-08T09:22:01Z',
|
312
|
+
'time' => '2015-05-08T09:22:01Z',
|
245
313
|
'docker' => {
|
246
|
-
|
314
|
+
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
247
315
|
},
|
248
316
|
'kubernetes' => {
|
249
|
-
'host'
|
250
|
-
'pod_name'
|
251
|
-
'container_name'
|
252
|
-
'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',
|
253
321
|
'container_image_id' => 'docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303',
|
254
|
-
'namespace_name'
|
255
|
-
'namespace_id'
|
256
|
-
'pod_id'
|
257
|
-
'
|
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',
|
258
327
|
'labels' => {
|
259
328
|
'component' => 'fabric8Console'
|
260
329
|
}
|
@@ -266,23 +335,25 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
266
335
|
end
|
267
336
|
|
268
337
|
test 'with docker & kubernetes metadata' do
|
269
|
-
|
270
|
-
|
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' })
|
271
341
|
expected_kube_metadata = {
|
272
|
-
'time'=>'2015-05-08T09:22:01Z',
|
342
|
+
'time' => '2015-05-08T09:22:01Z',
|
273
343
|
'docker' => {
|
274
|
-
|
344
|
+
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
275
345
|
},
|
276
346
|
'kubernetes' => {
|
277
|
-
'host'
|
278
|
-
'pod_name'
|
279
|
-
'container_name'
|
280
|
-
'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',
|
281
351
|
'container_image_id' => 'docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303',
|
282
|
-
'namespace_name'
|
283
|
-
'namespace_id'
|
284
|
-
'pod_id'
|
285
|
-
'
|
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',
|
286
357
|
'labels' => {
|
287
358
|
'component' => 'fabric8Console'
|
288
359
|
}
|
@@ -294,7 +365,8 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
294
365
|
end
|
295
366
|
|
296
367
|
test 'with docker & kubernetes metadata & namespace_id enabled' do
|
297
|
-
VCR.
|
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
|
298
370
|
filtered = emit({}, '
|
299
371
|
kubernetes_url https://localhost:8443
|
300
372
|
watch false
|
@@ -302,18 +374,19 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
302
374
|
')
|
303
375
|
expected_kube_metadata = {
|
304
376
|
'docker' => {
|
305
|
-
|
377
|
+
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
306
378
|
},
|
307
379
|
'kubernetes' => {
|
308
|
-
'host'
|
309
|
-
'pod_name'
|
310
|
-
'container_name'
|
311
|
-
'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',
|
312
384
|
'container_image_id' => 'docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303',
|
313
|
-
'namespace_name'
|
314
|
-
'namespace_id'
|
315
|
-
'pod_id'
|
316
|
-
'
|
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',
|
317
390
|
'labels' => {
|
318
391
|
'component' => 'fabric8Console'
|
319
392
|
}
|
@@ -324,7 +397,8 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
324
397
|
end
|
325
398
|
|
326
399
|
test 'with docker & kubernetes metadata using bearer token' do
|
327
|
-
VCR.
|
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
|
328
402
|
filtered = emit({}, '
|
329
403
|
kubernetes_url https://localhost:8443
|
330
404
|
verify_ssl false
|
@@ -336,15 +410,16 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
336
410
|
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
337
411
|
},
|
338
412
|
'kubernetes' => {
|
339
|
-
'host'
|
340
|
-
'pod_name'
|
341
|
-
'container_name'
|
342
|
-
'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',
|
343
417
|
'container_image_id' => 'docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303',
|
344
|
-
'namespace_name'
|
345
|
-
'namespace_id'
|
346
|
-
'pod_id'
|
347
|
-
'
|
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',
|
348
423
|
'labels' => {
|
349
424
|
'component' => 'fabric8Console'
|
350
425
|
}
|
@@ -357,14 +432,14 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
357
432
|
test 'with docker & kubernetes metadata but no configured api server' do
|
358
433
|
filtered = emit({}, '')
|
359
434
|
expected_kube_metadata = {
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
|
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
|
+
}
|
368
443
|
}
|
369
444
|
assert_equal(expected_kube_metadata, filtered[0])
|
370
445
|
end
|
@@ -377,17 +452,17 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
377
452
|
)
|
378
453
|
stub_request(:any, 'https://localhost:8443/api/v1/namespaces/default/pods/fabric8-console-controller-98rqc').to_timeout
|
379
454
|
stub_request(:any, 'https://localhost:8443/api/v1/namespaces/default').to_timeout
|
380
|
-
filtered = emit
|
455
|
+
filtered = emit
|
381
456
|
expected_kube_metadata = {
|
382
|
-
'docker'
|
383
|
-
'container_id'
|
457
|
+
'docker'=>{
|
458
|
+
'container_id'=>'49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
384
459
|
},
|
385
460
|
'kubernetes' => {
|
386
|
-
'pod_name'
|
387
|
-
'container_name'
|
388
|
-
'namespace_name'
|
461
|
+
'pod_name' => 'fabric8-console-controller-98rqc',
|
462
|
+
'container_name' => 'fabric8-console-container',
|
463
|
+
'namespace_name' => '.orphaned',
|
389
464
|
'orphaned_namespace' => 'default',
|
390
|
-
'namespace_id'
|
465
|
+
'namespace_id' => 'orphaned'
|
391
466
|
}
|
392
467
|
}
|
393
468
|
assert_equal(expected_kube_metadata, filtered[0])
|
@@ -402,13 +477,13 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
402
477
|
stub_request(:any, 'https://localhost:8443/api/v1/namespaces/default/pods/fabric8-console-controller.98rqc').to_timeout
|
403
478
|
filtered = emit_with_tag('var.log.containers.fabric8-console-controller.98rqc_default_fabric8-console-container-49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459.log', {}, '')
|
404
479
|
expected_kube_metadata = {
|
405
|
-
'docker'
|
406
|
-
'container_id'
|
480
|
+
'docker'=>{
|
481
|
+
'container_id'=>'49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
407
482
|
},
|
408
483
|
'kubernetes' => {
|
409
|
-
'pod_name'
|
410
|
-
'container_name'
|
411
|
-
'namespace_name'
|
484
|
+
'pod_name' => 'fabric8-console-controller.98rqc',
|
485
|
+
'container_name' => 'fabric8-console-container',
|
486
|
+
'namespace_name' => 'default'
|
412
487
|
}
|
413
488
|
}
|
414
489
|
assert_equal(expected_kube_metadata, filtered[0])
|
@@ -416,44 +491,48 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
416
491
|
|
417
492
|
test 'with docker metadata, non-kubernetes' do
|
418
493
|
filtered = emit_with_tag('non-kubernetes', {}, '')
|
419
|
-
assert_false(filtered[0].
|
494
|
+
assert_false(filtered[0].key?(:kubernetes))
|
420
495
|
end
|
421
496
|
|
422
497
|
test 'ignores invalid json in log field' do
|
423
498
|
json_log = "{'foo':123}"
|
424
499
|
msg = {
|
425
|
-
|
500
|
+
'log' => json_log
|
426
501
|
}
|
427
502
|
filtered = emit_with_tag('non-kubernetes', msg, '')
|
428
503
|
assert_equal(msg, filtered[0])
|
429
504
|
end
|
430
505
|
|
431
|
-
test 'with kubernetes dotted labels, de_dot enabled' do
|
432
|
-
VCR.
|
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
|
433
509
|
filtered = emit({}, '
|
434
510
|
kubernetes_url https://localhost:8443
|
435
511
|
watch false
|
436
512
|
cache_size 1
|
513
|
+
de_dot true
|
514
|
+
de_slash true
|
437
515
|
')
|
438
516
|
expected_kube_metadata = {
|
439
517
|
'docker' => {
|
440
|
-
|
518
|
+
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
441
519
|
},
|
442
520
|
'kubernetes' => {
|
443
|
-
'host'
|
444
|
-
'pod_name'
|
445
|
-
'container_name'
|
446
|
-
'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',
|
447
525
|
'container_image_id' => 'docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303',
|
448
|
-
'namespace_id'
|
449
|
-
'namespace_labels'
|
450
|
-
'
|
526
|
+
'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
|
527
|
+
'namespace_labels' => {
|
528
|
+
'kubernetes_io__namespacetest' => 'somevalue'
|
451
529
|
},
|
452
|
-
'namespace_name'
|
453
|
-
'pod_id'
|
454
|
-
'
|
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',
|
455
534
|
'labels' => {
|
456
|
-
'
|
535
|
+
'kubernetes_io__test' => 'somevalue'
|
457
536
|
}
|
458
537
|
}
|
459
538
|
}
|
@@ -461,31 +540,34 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
461
540
|
end
|
462
541
|
end
|
463
542
|
|
464
|
-
test 'with kubernetes dotted labels, de_dot disabled' do
|
465
|
-
VCR.
|
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
|
466
546
|
filtered = emit({}, '
|
467
547
|
kubernetes_url https://localhost:8443
|
468
548
|
watch false
|
469
549
|
cache_size 1
|
470
550
|
de_dot false
|
551
|
+
de_slash false
|
471
552
|
')
|
472
553
|
expected_kube_metadata = {
|
473
554
|
'docker' => {
|
474
|
-
|
555
|
+
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
475
556
|
},
|
476
557
|
'kubernetes' => {
|
477
|
-
'host'
|
478
|
-
'pod_name'
|
479
|
-
'container_name'
|
480
|
-
'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',
|
481
562
|
'container_image_id' => 'docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303',
|
482
|
-
'namespace_id'
|
483
|
-
'namespace_labels'
|
563
|
+
'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
|
564
|
+
'namespace_labels' => {
|
484
565
|
'kubernetes.io/namespacetest' => 'somevalue'
|
485
566
|
},
|
486
|
-
'namespace_name'
|
487
|
-
'pod_id'
|
488
|
-
'
|
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',
|
489
571
|
'labels' => {
|
490
572
|
'kubernetes.io/test' => 'somevalue'
|
491
573
|
}
|
@@ -498,11 +580,21 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
498
580
|
test 'invalid de_dot_separator config' do
|
499
581
|
assert_raise Fluent::ConfigError do
|
500
582
|
create_driver('
|
583
|
+
de_dot true
|
501
584
|
de_dot_separator contains.
|
502
585
|
')
|
503
586
|
end
|
504
587
|
end
|
505
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
|
+
|
506
598
|
test 'with records from journald and docker & kubernetes metadata' do
|
507
599
|
# with use_journal true should ignore tags and use CONTAINER_NAME and CONTAINER_ID_FULL
|
508
600
|
tag = 'var.log.containers.junk1_junk2_junk3-49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed450.log'
|
@@ -511,7 +603,8 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
511
603
|
'CONTAINER_ID_FULL' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459',
|
512
604
|
'randomfield' => 'randomvalue'
|
513
605
|
}
|
514
|
-
VCR.
|
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
|
515
608
|
filtered = emit_with_tag(tag, msg, '
|
516
609
|
kubernetes_url https://localhost:8443
|
517
610
|
watch false
|
@@ -520,18 +613,19 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
520
613
|
')
|
521
614
|
expected_kube_metadata = {
|
522
615
|
'docker' => {
|
523
|
-
|
616
|
+
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
524
617
|
},
|
525
618
|
'kubernetes' => {
|
526
|
-
'host'
|
527
|
-
'pod_name'
|
528
|
-
'container_name'
|
529
|
-
'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',
|
530
623
|
'container_image_id' => 'docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303',
|
531
|
-
'namespace_name'
|
532
|
-
'namespace_id'
|
533
|
-
'pod_id'
|
534
|
-
'
|
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',
|
535
629
|
'labels' => {
|
536
630
|
'component' => 'fabric8Console'
|
537
631
|
}
|
@@ -549,7 +643,8 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
549
643
|
'CONTAINER_ID_FULL' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459',
|
550
644
|
'randomfield' => 'randomvalue'
|
551
645
|
}
|
552
|
-
VCR.
|
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
|
553
648
|
filtered = emit_with_tag(tag, msg, '
|
554
649
|
kubernetes_url https://localhost:8443
|
555
650
|
watch false
|
@@ -558,18 +653,19 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
558
653
|
')
|
559
654
|
expected_kube_metadata = {
|
560
655
|
'docker' => {
|
561
|
-
|
656
|
+
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
562
657
|
},
|
563
658
|
'kubernetes' => {
|
564
|
-
'host'
|
565
|
-
'pod_name'
|
566
|
-
'container_name'
|
567
|
-
'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',
|
568
663
|
'container_image_id' => 'docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303',
|
569
|
-
'namespace_name'
|
570
|
-
'namespace_id'
|
571
|
-
'pod_id'
|
572
|
-
'
|
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',
|
573
669
|
'labels' => {
|
574
670
|
'component' => 'fabric8Console'
|
575
671
|
}
|
@@ -590,10 +686,12 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
590
686
|
'pod_name' => 'k8s-pod-name',
|
591
687
|
'container_name' => 'k8s-container-name'
|
592
688
|
},
|
593
|
-
'docker' => {'container_id' => 'e463bc0d3ae38f5c89d92dca49b30e049e899799920b79d4d5f705acbe82ba95'},
|
689
|
+
'docker' => { 'container_id' => 'e463bc0d3ae38f5c89d92dca49b30e049e899799920b79d4d5f705acbe82ba95' },
|
594
690
|
'randomfield' => 'randomvalue'
|
595
691
|
}
|
596
|
-
VCR.
|
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
|
597
695
|
es = emit_with_tag(tag, msg, '
|
598
696
|
kubernetes_url https://localhost:8443
|
599
697
|
watch false
|
@@ -601,23 +699,24 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
601
699
|
')
|
602
700
|
expected_kube_metadata = {
|
603
701
|
'docker' => {
|
604
|
-
|
702
|
+
'container_id' => 'e463bc0d3ae38f5c89d92dca49b30e049e899799920b79d4d5f705acbe82ba95'
|
605
703
|
},
|
606
704
|
'kubernetes' => {
|
607
|
-
'host'
|
608
|
-
'pod_name'
|
609
|
-
'container_name'
|
610
|
-
'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',
|
611
709
|
'container_image_id' => 'docker://d78c5217c41e9af08d37d9ae2cb070afa1fe3da6bc77bfb18879a8b4bfdf8a34',
|
612
|
-
'namespace_name'
|
613
|
-
'namespace_id'
|
614
|
-
'pod_id'
|
615
|
-
'
|
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',
|
616
715
|
'labels' => {
|
617
716
|
'component' => 'k8s-test'
|
618
717
|
}
|
619
718
|
}
|
620
|
-
}.merge(msg) {|key,oldval,newval| (
|
719
|
+
}.merge(msg) { |key, oldval, newval| (key == 'kubernetes') || (key == 'docker') ? oldval : newval }
|
621
720
|
assert_equal(expected_kube_metadata, es[0])
|
622
721
|
end
|
623
722
|
end
|
@@ -633,10 +732,12 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
633
732
|
'pod_name' => 'k8s-pod-name',
|
634
733
|
'container_name' => 'k8s-container-name'
|
635
734
|
},
|
636
|
-
'docker' => {'container_id' => 'e463bc0d3ae38f5c89d92dca49b30e049e899799920b79d4d5f705acbe82ba95'},
|
735
|
+
'docker' => { 'container_id' => 'e463bc0d3ae38f5c89d92dca49b30e049e899799920b79d4d5f705acbe82ba95' },
|
637
736
|
'randomfield' => 'randomvalue'
|
638
737
|
}
|
639
|
-
VCR.
|
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
|
640
741
|
es = emit_with_tag(tag, msg, '
|
641
742
|
kubernetes_url https://localhost:8443
|
642
743
|
watch false
|
@@ -645,30 +746,30 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
645
746
|
')
|
646
747
|
expected_kube_metadata = {
|
647
748
|
'docker' => {
|
648
|
-
|
749
|
+
'container_id' => '838350c64bacba968d39a30a50789b2795291fceca6ccbff55298671d46b0e3b'
|
649
750
|
},
|
650
751
|
'kubernetes' => {
|
651
|
-
'host'
|
652
|
-
'pod_name'
|
653
|
-
'container_name'
|
654
|
-
'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',
|
655
756
|
'container_image_id' => 'docker://dda4c95705fb7050b701b10a7fe928ca5bc971a1dcb521ae3c339194cbf36b47',
|
656
|
-
'namespace_name'
|
657
|
-
'namespace_id'
|
658
|
-
'pod_id'
|
659
|
-
'
|
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',
|
660
762
|
'labels' => {
|
661
763
|
'component' => 'journald-test'
|
662
764
|
}
|
663
765
|
}
|
664
|
-
}.merge(msg) {|key,oldval,newval| (
|
766
|
+
}.merge(msg) { |key, oldval, newval| (key == 'kubernetes') || (key == 'docker') ? oldval : newval }
|
665
767
|
assert_equal(expected_kube_metadata, es[0])
|
666
768
|
end
|
667
769
|
end
|
668
770
|
|
669
771
|
test 'uses metadata from tag if use_journal false and lookup_from_k8s_field false' do
|
670
772
|
# with use_journal unset, should still use the journal fields instead of tag fields
|
671
|
-
tag = 'var.log.containers.fabric8-console-controller-98rqc_default_fabric8-console-container-49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459.log'
|
672
773
|
msg = {
|
673
774
|
'CONTAINER_NAME' => 'k8s_journald-container-name.db89db89_journald-pod-name_journald-namespace-name_c76927af-f563-11e4-b32d-54ee7527188d_89db89db',
|
674
775
|
'CONTAINER_ID_FULL' => '838350c64bacba968d39a30a50789b2795291fceca6ccbff55298671d46b0e3b',
|
@@ -677,70 +778,76 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
677
778
|
'pod_name' => 'k8s-pod-name',
|
678
779
|
'container_name' => 'k8s-container-name'
|
679
780
|
},
|
680
|
-
'docker' => {'container_id' => 'e463bc0d3ae38f5c89d92dca49b30e049e899799920b79d4d5f705acbe82ba95'},
|
781
|
+
'docker' => { 'container_id' => 'e463bc0d3ae38f5c89d92dca49b30e049e899799920b79d4d5f705acbe82ba95' },
|
681
782
|
'randomfield' => 'randomvalue'
|
682
783
|
}
|
683
|
-
VCR.
|
684
|
-
|
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, "
|
685
788
|
kubernetes_url https://localhost:8443
|
686
789
|
watch false
|
687
790
|
cache_size 1
|
688
791
|
lookup_from_k8s_field false
|
689
792
|
use_journal false
|
690
|
-
|
793
|
+
")
|
691
794
|
expected_kube_metadata = {
|
692
795
|
'docker' => {
|
693
|
-
|
796
|
+
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
694
797
|
},
|
695
798
|
'kubernetes' => {
|
696
|
-
'host'
|
697
|
-
'pod_name'
|
698
|
-
'container_name'
|
699
|
-
'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',
|
700
803
|
'container_image_id' => 'docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303',
|
701
|
-
'namespace_name'
|
702
|
-
'namespace_id'
|
703
|
-
'pod_id'
|
704
|
-
'
|
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',
|
705
809
|
'labels' => {
|
706
810
|
'component' => 'fabric8Console'
|
707
811
|
}
|
708
812
|
}
|
709
|
-
}.merge(msg) {|key,oldval,newval| (
|
813
|
+
}.merge(msg) { |key, oldval, newval| (key == 'kubernetes') || (key == 'docker') ? oldval : newval }
|
710
814
|
assert_equal(expected_kube_metadata, es[0])
|
711
815
|
end
|
712
816
|
end
|
713
817
|
|
714
818
|
test 'with kubernetes annotations' do
|
715
|
-
VCR.
|
716
|
-
|
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({}, '
|
717
823
|
kubernetes_url https://localhost:8443
|
718
824
|
watch false
|
719
825
|
cache_size 1
|
720
826
|
annotation_match [ "^custom.+", "two"]
|
721
827
|
')
|
722
828
|
expected_kube_metadata = {
|
723
|
-
|
724
|
-
|
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'
|
725
845
|
},
|
726
|
-
'
|
727
|
-
|
728
|
-
|
729
|
-
'container_name' => 'fabric8-console-container',
|
730
|
-
'container_image' => 'fabric8/hawtio-kubernetes:latest',
|
731
|
-
'container_image_id' => 'docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303',
|
732
|
-
'namespace_name' => 'default',
|
733
|
-
'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
|
734
|
-
'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
|
735
|
-
'master_url' => 'https://localhost:8443',
|
736
|
-
'labels' => {
|
737
|
-
'component' => 'fabric8Console'
|
738
|
-
},
|
739
|
-
'annotations' => {
|
740
|
-
'custom_field1' => 'hello_kitty',
|
741
|
-
'field_two' => 'value'
|
742
|
-
}
|
846
|
+
'annotations' => {
|
847
|
+
'custom_field1' => 'hello_kitty',
|
848
|
+
'field_two' => 'value'
|
743
849
|
}
|
850
|
+
}
|
744
851
|
}
|
745
852
|
assert_equal(expected_kube_metadata, filtered[0])
|
746
853
|
end
|
@@ -754,7 +861,13 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
754
861
|
'CONTAINER_ID_FULL' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459',
|
755
862
|
'randomfield' => 'randomvalue'
|
756
863
|
}
|
757
|
-
VCR.
|
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
|
758
871
|
filtered = emit_with_tag(tag, msg, '
|
759
872
|
kubernetes_url https://localhost:8443
|
760
873
|
watch false
|
@@ -763,18 +876,19 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
763
876
|
')
|
764
877
|
expected_kube_metadata = {
|
765
878
|
'docker' => {
|
766
|
-
|
879
|
+
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
767
880
|
},
|
768
881
|
'kubernetes' => {
|
769
|
-
'host'
|
770
|
-
'pod_name'
|
771
|
-
'container_name'
|
772
|
-
'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',
|
773
886
|
'container_image_id' => 'docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303',
|
774
|
-
'namespace_name'
|
775
|
-
'namespace_id'
|
776
|
-
'pod_id'
|
777
|
-
'
|
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',
|
778
892
|
'labels' => {
|
779
893
|
'component' => 'fabric8Console'
|
780
894
|
}
|
@@ -785,73 +899,80 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
785
899
|
end
|
786
900
|
|
787
901
|
test 'with kubernetes namespace annotations' do
|
788
|
-
VCR.
|
789
|
-
|
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({}, '
|
790
906
|
kubernetes_url https://localhost:8443
|
791
907
|
watch false
|
792
908
|
cache_size 1
|
793
909
|
annotation_match [ "^custom.+", "two", "workspace*"]
|
794
910
|
')
|
795
911
|
expected_kube_metadata = {
|
796
|
-
|
797
|
-
|
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'
|
798
928
|
},
|
799
|
-
'
|
800
|
-
|
801
|
-
|
802
|
-
|
803
|
-
|
804
|
-
|
805
|
-
'container_image' => 'fabric8/hawtio-kubernetes:latest',
|
806
|
-
'container_image_id' => 'docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303',
|
807
|
-
'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
|
808
|
-
'master_url' => 'https://localhost:8443',
|
809
|
-
'labels' => {
|
810
|
-
'component' => 'fabric8Console'
|
811
|
-
},
|
812
|
-
'annotations' => {
|
813
|
-
'custom_field1' => 'hello_kitty',
|
814
|
-
'field_two' => 'value'
|
815
|
-
},
|
816
|
-
'namespace_annotations' => {
|
817
|
-
'workspaceId' => 'myWorkspaceName'
|
818
|
-
}
|
929
|
+
'annotations' => {
|
930
|
+
'custom_field1' => 'hello_kitty',
|
931
|
+
'field_two' => 'value'
|
932
|
+
},
|
933
|
+
'namespace_annotations' => {
|
934
|
+
'workspaceId' => 'myWorkspaceName'
|
819
935
|
}
|
936
|
+
}
|
820
937
|
}
|
821
938
|
assert_equal(expected_kube_metadata, filtered[0])
|
822
939
|
end
|
823
940
|
end
|
824
941
|
|
825
942
|
test 'with kubernetes namespace annotations no match' do
|
826
|
-
VCR.
|
827
|
-
|
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({}, '
|
828
947
|
kubernetes_url https://localhost:8443
|
829
948
|
watch false
|
830
949
|
cache_size 1
|
831
950
|
annotation_match [ "noMatch*"]
|
832
951
|
')
|
833
952
|
expected_kube_metadata = {
|
834
|
-
|
835
|
-
|
836
|
-
|
837
|
-
|
838
|
-
|
839
|
-
|
840
|
-
|
841
|
-
|
842
|
-
|
843
|
-
|
844
|
-
|
845
|
-
|
846
|
-
|
847
|
-
|
848
|
-
|
849
|
-
|
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'
|
850
969
|
}
|
970
|
+
}
|
851
971
|
}
|
852
972
|
assert_equal(expected_kube_metadata, filtered[0])
|
853
973
|
end
|
854
974
|
end
|
975
|
+
|
855
976
|
test 'with CONTAINER_NAME that does not match' do
|
856
977
|
tag = 'var.log.containers.junk4_junk5_junk6-49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed450.log'
|
857
978
|
msg = {
|
@@ -859,7 +980,9 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
859
980
|
'CONTAINER_ID_FULL' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459',
|
860
981
|
'randomfield' => 'randomvalue'
|
861
982
|
}
|
862
|
-
VCR.
|
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
|
863
986
|
filtered = emit_with_tag(tag, msg, '
|
864
987
|
kubernetes_url https://localhost:8443
|
865
988
|
watch false
|
@@ -874,6 +997,7 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
874
997
|
assert_equal(expected_kube_metadata, filtered[0])
|
875
998
|
end
|
876
999
|
end
|
1000
|
+
|
877
1001
|
test 'with CONTAINER_NAME starts with k8s_ that does not match' do
|
878
1002
|
tag = 'var.log.containers.junk4_junk5_junk6-49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed450.log'
|
879
1003
|
msg = {
|
@@ -881,7 +1005,9 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
881
1005
|
'CONTAINER_ID_FULL' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459',
|
882
1006
|
'randomfield' => 'randomvalue'
|
883
1007
|
}
|
884
|
-
VCR.
|
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
|
885
1011
|
filtered = emit_with_tag(tag, msg, '
|
886
1012
|
kubernetes_url https://localhost:8443
|
887
1013
|
watch false
|
@@ -898,8 +1024,11 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
898
1024
|
end
|
899
1025
|
|
900
1026
|
test 'processes all events when reading from MessagePackEventStream' do
|
901
|
-
VCR.
|
902
|
-
|
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' }]]
|
903
1032
|
array_stream = Fluent::ArrayEventStream.new(entries)
|
904
1033
|
msgpack_stream = Fluent::MessagePackEventStream.new(array_stream.to_msgpack_stream)
|
905
1034
|
|
@@ -908,35 +1037,66 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
908
1037
|
watch false
|
909
1038
|
cache_size 1
|
910
1039
|
')
|
911
|
-
d.run
|
912
|
-
d.feed(
|
913
|
-
|
914
|
-
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)
|
915
1044
|
|
916
1045
|
expected_kube_metadata = {
|
917
|
-
|
918
|
-
|
919
|
-
|
920
|
-
|
921
|
-
|
922
|
-
|
923
|
-
|
924
|
-
|
925
|
-
|
926
|
-
|
927
|
-
|
928
|
-
|
929
|
-
|
930
|
-
|
931
|
-
|
932
|
-
|
933
|
-
|
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'
|
934
1063
|
}
|
1064
|
+
}
|
935
1065
|
}
|
936
1066
|
|
937
1067
|
assert_equal(expected_kube_metadata, filtered[0])
|
938
1068
|
assert_equal(expected_kube_metadata, filtered[1])
|
939
1069
|
end
|
940
1070
|
end
|
1071
|
+
|
1072
|
+
test 'with docker & kubernetes metadata using skip config params' do
|
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({}, '
|
1076
|
+
kubernetes_url https://localhost:8443
|
1077
|
+
watch false
|
1078
|
+
cache_size 1
|
1079
|
+
skip_labels true
|
1080
|
+
skip_container_metadata true
|
1081
|
+
skip_master_url true
|
1082
|
+
skip_namespace_metadata true
|
1083
|
+
')
|
1084
|
+
expected_kube_metadata = {
|
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
|
+
}
|
1096
|
+
}
|
1097
|
+
|
1098
|
+
assert_equal(expected_kube_metadata, filtered[0])
|
1099
|
+
end
|
1100
|
+
end
|
941
1101
|
end
|
942
1102
|
end
|