fluent-plugin-kubernetes_metadata_filter 2.5.0 → 3.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.circleci/config.yml +10 -14
- data/.gitignore +0 -1
- data/.rubocop.yml +57 -0
- data/Gemfile +4 -2
- data/Gemfile.lock +76 -67
- data/README.md +9 -83
- data/Rakefile +15 -11
- data/doc/benchmark/5m-1-2500lps-256b-baseline-01/cpu.png +0 -0
- data/doc/benchmark/5m-1-2500lps-256b-baseline-01/latency.png +0 -0
- data/doc/benchmark/5m-1-2500lps-256b-baseline-01/loss.png +0 -0
- data/doc/benchmark/5m-1-2500lps-256b-baseline-01/mem.png +0 -0
- data/doc/benchmark/5m-1-2500lps-256b-baseline-01/readme.md +88 -0
- data/doc/benchmark/5m-1-2500lps-256b-baseline-01/results.html +127 -0
- data/doc/benchmark/5m-1-2500lps-256b-kube-01-01/cpu.png +0 -0
- data/doc/benchmark/5m-1-2500lps-256b-kube-01-01/latency.png +0 -0
- data/doc/benchmark/5m-1-2500lps-256b-kube-01-01/loss.png +0 -0
- data/doc/benchmark/5m-1-2500lps-256b-kube-01-01/mem.png +0 -0
- data/doc/benchmark/5m-1-2500lps-256b-kube-01-01/readme.md +97 -0
- data/doc/benchmark/5m-1-2500lps-256b-kube-01-01/results.html +136 -0
- data/doc/benchmark/5m-1-2500lps-256b-kube-01-marshal-02/cpu.png +0 -0
- data/doc/benchmark/5m-1-2500lps-256b-kube-01-marshal-02/latency.png +0 -0
- data/doc/benchmark/5m-1-2500lps-256b-kube-01-marshal-02/loss.png +0 -0
- data/doc/benchmark/5m-1-2500lps-256b-kube-01-marshal-02/mem.png +0 -0
- data/doc/benchmark/5m-1-2500lps-256b-kube-01-marshal-02/readme.md +97 -0
- data/doc/benchmark/5m-1-2500lps-256b-kube-01-marshal-02/results.html +136 -0
- data/fluent-plugin-kubernetes_metadata_filter.gemspec +25 -27
- data/lib/fluent/plugin/filter_kubernetes_metadata.rb +171 -192
- data/lib/fluent/plugin/kubernetes_metadata_cache_strategy.rb +25 -23
- data/lib/fluent/plugin/kubernetes_metadata_common.rb +44 -69
- data/lib/fluent/plugin/kubernetes_metadata_stats.rb +21 -5
- data/lib/fluent/plugin/kubernetes_metadata_test_api_adapter.rb +68 -0
- data/lib/fluent/plugin/kubernetes_metadata_util.rb +33 -0
- data/lib/fluent/plugin/kubernetes_metadata_watch_namespaces.rb +91 -42
- data/lib/fluent/plugin/kubernetes_metadata_watch_pods.rb +108 -47
- 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 +340 -616
- data/test/plugin/test_watch_namespaces.rb +188 -125
- data/test/plugin/test_watch_pods.rb +282 -202
- data/test/plugin/watch_test.rb +16 -15
- metadata +77 -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,42 @@ 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
|
+
sub_test_case 'stats_interval' do
|
45
|
+
|
46
|
+
test 'enables stats when greater than zero' do
|
47
|
+
d = create_driver('stats_interval 1')
|
48
|
+
assert_equal(1, d.instance.stats_interval)
|
49
|
+
d.instance.dump_stats
|
50
|
+
assert_false(d.instance.instance_variable_get("@curr_time").nil?)
|
51
|
+
end
|
52
|
+
|
53
|
+
test 'disables stats when <= zero' do
|
54
|
+
d = create_driver('stats_interval 0')
|
55
|
+
assert_equal(0, d.instance.stats_interval)
|
56
|
+
d.instance.dump_stats
|
57
|
+
assert_nil(d.instance.instance_variable_get("@curr_time"))
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
61
|
+
|
62
|
+
test 'check test_api_adapter' do
|
63
|
+
d = create_driver('test_api_adapter KubernetesMetadata::TestApiAdapter')
|
64
|
+
assert_equal('KubernetesMetadata::TestApiAdapter', d.instance.test_api_adapter)
|
65
|
+
end
|
66
|
+
|
47
67
|
test 'kubernetes url' do
|
48
68
|
VCR.use_cassette('valid_kubernetes_api_server') do
|
49
69
|
d = create_driver('
|
@@ -82,94 +102,150 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
82
102
|
|
83
103
|
test 'service account credentials' do
|
84
104
|
VCR.use_cassette('valid_kubernetes_api_server') do
|
85
|
-
|
86
|
-
|
87
|
-
ENV['KUBERNETES_SERVICE_PORT'] = '8443'
|
105
|
+
ENV['KUBERNETES_SERVICE_HOST'] = 'localhost'
|
106
|
+
ENV['KUBERNETES_SERVICE_PORT'] = '8443'
|
88
107
|
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
108
|
+
Dir.mktmpdir do |dir|
|
109
|
+
# Fake token file and CA crt.
|
110
|
+
expected_cert_path = File.join(dir, Plugin::KubernetesMetadataFilter::K8_POD_CA_CERT)
|
111
|
+
expected_token_path = File.join(dir, Plugin::KubernetesMetadataFilter::K8_POD_TOKEN)
|
93
112
|
|
94
|
-
|
95
|
-
|
113
|
+
File.open(expected_cert_path, 'w')
|
114
|
+
File.open(expected_token_path, 'w')
|
96
115
|
|
97
|
-
|
116
|
+
d = create_driver("
|
98
117
|
watch false
|
99
118
|
secret_dir #{dir}
|
100
119
|
")
|
101
120
|
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
}
|
106
|
-
ensure
|
107
|
-
ENV['KUBERNETES_SERVICE_HOST'] = nil
|
108
|
-
ENV['KUBERNETES_SERVICE_PORT'] = nil
|
121
|
+
assert_equal(d.instance.kubernetes_url, 'https://localhost:8443/api')
|
122
|
+
assert_equal(d.instance.ca_file, expected_cert_path)
|
123
|
+
assert_equal(d.instance.bearer_token_file, expected_token_path)
|
109
124
|
end
|
125
|
+
ensure
|
126
|
+
ENV['KUBERNETES_SERVICE_HOST'] = nil
|
127
|
+
ENV['KUBERNETES_SERVICE_PORT'] = nil
|
110
128
|
end
|
111
129
|
end
|
112
130
|
|
113
131
|
test 'service account credential files are tested for existence' do
|
114
132
|
VCR.use_cassette('valid_kubernetes_api_server') do
|
115
|
-
|
116
|
-
|
117
|
-
ENV['KUBERNETES_SERVICE_PORT'] = '8443'
|
133
|
+
ENV['KUBERNETES_SERVICE_HOST'] = 'localhost'
|
134
|
+
ENV['KUBERNETES_SERVICE_PORT'] = '8443'
|
118
135
|
|
119
|
-
|
120
|
-
|
136
|
+
Dir.mktmpdir do |dir|
|
137
|
+
d = create_driver("
|
121
138
|
watch false
|
122
139
|
secret_dir #{dir}
|
123
140
|
")
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
}
|
128
|
-
ensure
|
129
|
-
ENV['KUBERNETES_SERVICE_HOST'] = nil
|
130
|
-
ENV['KUBERNETES_SERVICE_PORT'] = nil
|
141
|
+
assert_equal(d.instance.kubernetes_url, 'https://localhost:8443/api')
|
142
|
+
assert_nil(d.instance.ca_file, nil)
|
143
|
+
assert_nil(d.instance.bearer_token_file)
|
131
144
|
end
|
145
|
+
ensure
|
146
|
+
ENV['KUBERNETES_SERVICE_HOST'] = nil
|
147
|
+
ENV['KUBERNETES_SERVICE_PORT'] = nil
|
132
148
|
end
|
133
149
|
end
|
134
150
|
end
|
135
151
|
|
136
|
-
sub_test_case '
|
137
|
-
|
138
|
-
def emit(msg={}, config='
|
152
|
+
sub_test_case 'filter' do
|
153
|
+
def emit(msg = {}, config = '
|
139
154
|
kubernetes_url https://localhost:8443
|
140
155
|
watch false
|
141
156
|
cache_size 1
|
142
157
|
', d: nil)
|
143
158
|
d = create_driver(config) if d.nil?
|
144
|
-
d.run(default_tag:
|
159
|
+
d.run(default_tag: VAR_LOG_CONTAINER_TAG) do
|
145
160
|
d.feed(@time, msg)
|
146
|
-
|
147
|
-
d.filtered.map
|
161
|
+
end
|
162
|
+
d.filtered.map(&:last)
|
148
163
|
end
|
149
164
|
|
150
|
-
def emit_with_tag(tag, msg={}, config='
|
165
|
+
def emit_with_tag(tag, msg = {}, config = '
|
151
166
|
kubernetes_url https://localhost:8443
|
152
167
|
watch false
|
153
168
|
cache_size 1
|
154
169
|
')
|
155
170
|
d = create_driver(config)
|
156
|
-
d.run(default_tag: tag)
|
171
|
+
d.run(default_tag: tag) do
|
157
172
|
d.feed(@time, msg)
|
158
|
-
|
159
|
-
d.filtered.map
|
160
|
-
end
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
173
|
+
end
|
174
|
+
d.filtered.map(&:last)
|
175
|
+
end
|
176
|
+
|
177
|
+
sub_test_case 'parsing_pod_metadata when container_status is missing from the pod status' do
|
178
|
+
test 'using the tag_to_kubernetes_name_regexp for /var/log/containers ' do
|
179
|
+
VCR.use_cassettes(
|
180
|
+
[
|
181
|
+
{ name: 'valid_kubernetes_api_server' },
|
182
|
+
{ name: 'kubernetes_get_api_v1' },
|
183
|
+
{ name: 'kubernetes_get_namespace_default' },
|
184
|
+
{ name: 'kubernetes_get_pod_container_init' }
|
185
|
+
]) do
|
186
|
+
filtered = emit({}, "
|
187
|
+
kubernetes_url https://localhost:8443
|
188
|
+
watch false
|
189
|
+
cache_size 1
|
190
|
+
")
|
191
|
+
expected_kube_metadata = {
|
192
|
+
'docker' => {
|
193
|
+
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
194
|
+
},
|
195
|
+
'kubernetes' => {
|
196
|
+
'container_image'=>'fabric8/hawtio-kubernetes:latest',
|
197
|
+
'container_name'=>'fabric8-console-container',
|
198
|
+
'host' => 'jimmi-redhat.localnet',
|
199
|
+
'pod_name' => 'fabric8-console-controller-98rqc',
|
200
|
+
'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
|
201
|
+
'namespace_name' => 'default',
|
202
|
+
'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
|
203
|
+
'pod_ip' => '172.17.0.8',
|
204
|
+
'master_url' => 'https://localhost:8443',
|
205
|
+
'labels' => {
|
206
|
+
'component' => 'fabric8Console'
|
207
|
+
}
|
208
|
+
}
|
209
|
+
}
|
210
|
+
assert_equal(expected_kube_metadata, filtered[0])
|
211
|
+
end
|
212
|
+
end
|
213
|
+
test 'using the tag_to_kubernetes_name_regexp for /var/log/pods' do
|
214
|
+
VCR.use_cassettes(
|
215
|
+
[
|
216
|
+
{ name: 'valid_kubernetes_api_server' },
|
217
|
+
{ name: 'kubernetes_get_api_v1' },
|
218
|
+
{ name: 'kubernetes_get_namespace_default' },
|
219
|
+
{ name: 'kubernetes_get_pod_container_init' }
|
220
|
+
]) do
|
221
|
+
filtered = emit_with_tag(VAR_LOG_POD_TAG,{}, "
|
222
|
+
kubernetes_url https://localhost:8443
|
223
|
+
watch false
|
224
|
+
cache_size 1
|
225
|
+
")
|
226
|
+
expected_kube_metadata = {
|
227
|
+
'kubernetes' => {
|
228
|
+
'container_image'=>'fabric8/hawtio-kubernetes:latest',
|
229
|
+
'container_name'=>'fabric8-console-container',
|
230
|
+
'host' => 'jimmi-redhat.localnet',
|
231
|
+
'pod_name' => 'fabric8-console-controller-98rqc',
|
232
|
+
'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
|
233
|
+
'namespace_name' => 'default',
|
234
|
+
'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
|
235
|
+
'pod_ip' => '172.17.0.8',
|
236
|
+
'master_url' => 'https://localhost:8443',
|
237
|
+
'labels' => {
|
238
|
+
'component' => 'fabric8Console'
|
239
|
+
}
|
240
|
+
}
|
241
|
+
}
|
242
|
+
assert_equal(expected_kube_metadata, filtered[0])
|
243
|
+
end
|
244
|
+
end
|
169
245
|
end
|
170
246
|
|
171
247
|
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
|
248
|
+
VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' }]) do
|
173
249
|
driver = create_driver('
|
174
250
|
kubernetes_url https://localhost:8443
|
175
251
|
watch false
|
@@ -177,18 +253,18 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
177
253
|
')
|
178
254
|
stub_request(:any, 'https://localhost:8443/api/v1/namespaces/default/pods/fabric8-console-controller-98rqc').to_raise(SocketError.new('error from pod fetch'))
|
179
255
|
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'}, '', :
|
256
|
+
filtered = emit({ 'time' => '2015-05-08T09:22:01Z' }, '', d: driver)
|
181
257
|
expected_kube_metadata = {
|
182
|
-
'time'=>'2015-05-08T09:22:01Z',
|
183
|
-
'docker'
|
184
|
-
|
258
|
+
'time' => '2015-05-08T09:22:01Z',
|
259
|
+
'docker'=>{
|
260
|
+
'container_id'=>'49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
185
261
|
},
|
186
262
|
'kubernetes' => {
|
187
|
-
'pod_name'
|
263
|
+
'pod_name' => 'fabric8-console-controller-98rqc',
|
188
264
|
'container_name' => 'fabric8-console-container',
|
189
|
-
|
265
|
+
'namespace_id' => 'orphaned',
|
190
266
|
'namespace_name' => '.orphaned',
|
191
|
-
|
267
|
+
'orphaned_namespace' => 'default'
|
192
268
|
}
|
193
269
|
}
|
194
270
|
assert_equal(expected_kube_metadata, filtered[0])
|
@@ -196,7 +272,7 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
196
272
|
end
|
197
273
|
|
198
274
|
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
|
275
|
+
VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' }]) do
|
200
276
|
driver = create_driver('
|
201
277
|
kubernetes_url https://localhost:8443
|
202
278
|
watch false
|
@@ -204,23 +280,23 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
204
280
|
')
|
205
281
|
cache = driver.instance.instance_variable_get(:@id_cache)
|
206
282
|
cache['49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'] = {
|
207
|
-
|
208
|
-
|
283
|
+
pod_id: 'c76927af-f563-11e4-b32d-54ee7527188d',
|
284
|
+
namespace_id: '898268c8-4a36-11e5-9d81-42010af0194c'
|
209
285
|
}
|
210
286
|
stub_request(:any, 'https://localhost:8443/api/v1/namespaces/default/pods/fabric8-console-controller-98rqc').to_timeout
|
211
287
|
stub_request(:any, 'https://localhost:8443/api/v1/namespaces/default').to_timeout
|
212
|
-
filtered = emit({'time'=>'2015-05-08T09:22:01Z'}, '', d:driver)
|
288
|
+
filtered = emit({ 'time' => '2015-05-08T09:22:01Z' }, '', d: driver)
|
213
289
|
expected_kube_metadata = {
|
214
|
-
'time'=>'2015-05-08T09:22:01Z',
|
290
|
+
'time' => '2015-05-08T09:22:01Z',
|
215
291
|
'docker' => {
|
216
|
-
|
292
|
+
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
217
293
|
},
|
218
294
|
'kubernetes' => {
|
219
|
-
'pod_name'
|
220
|
-
'container_name'
|
221
|
-
'namespace_name'
|
222
|
-
'namespace_id'
|
223
|
-
'pod_id'
|
295
|
+
'pod_name' => 'fabric8-console-controller-98rqc',
|
296
|
+
'container_name' => 'fabric8-console-container',
|
297
|
+
'namespace_name' => 'default',
|
298
|
+
'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
|
299
|
+
'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d'
|
224
300
|
}
|
225
301
|
}
|
226
302
|
|
@@ -229,7 +305,7 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
229
305
|
end
|
230
306
|
|
231
307
|
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
|
308
|
+
VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' }, { name: 'kubernetes_get_pod' }, { name: 'kubernetes_get_namespace_default' }]) do
|
233
309
|
driver = create_driver('
|
234
310
|
kubernetes_url https://localhost:8443
|
235
311
|
watch false
|
@@ -237,25 +313,26 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
237
313
|
')
|
238
314
|
cache = driver.instance.instance_variable_get(:@id_cache)
|
239
315
|
cache['49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'] = {
|
240
|
-
|
241
|
-
|
316
|
+
pod_id: 'c76927af-f563-11e4-b32d-54ee7527188d',
|
317
|
+
namespace_id: '898268c8-4a36-11e5-9d81-42010af0194c'
|
242
318
|
}
|
243
|
-
filtered = emit({'time'=>'2015-05-08T09:22:01Z'}, '', d:driver)
|
319
|
+
filtered = emit({ 'time' => '2015-05-08T09:22:01Z' }, '', d: driver)
|
244
320
|
expected_kube_metadata = {
|
245
|
-
'time'=>'2015-05-08T09:22:01Z',
|
321
|
+
'time' => '2015-05-08T09:22:01Z',
|
246
322
|
'docker' => {
|
247
|
-
|
323
|
+
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
248
324
|
},
|
249
325
|
'kubernetes' => {
|
250
|
-
'host'
|
251
|
-
'pod_name'
|
252
|
-
'container_name'
|
253
|
-
'container_image'
|
326
|
+
'host' => 'jimmi-redhat.localnet',
|
327
|
+
'pod_name' => 'fabric8-console-controller-98rqc',
|
328
|
+
'container_name' => 'fabric8-console-container',
|
329
|
+
'container_image' => 'fabric8/hawtio-kubernetes:latest',
|
254
330
|
'container_image_id' => 'docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303',
|
255
|
-
'namespace_name'
|
256
|
-
'namespace_id'
|
257
|
-
'pod_id'
|
258
|
-
'
|
331
|
+
'namespace_name' => 'default',
|
332
|
+
'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
|
333
|
+
'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
|
334
|
+
'pod_ip' => '172.17.0.8',
|
335
|
+
'master_url' => 'https://localhost:8443',
|
259
336
|
'labels' => {
|
260
337
|
'component' => 'fabric8Console'
|
261
338
|
}
|
@@ -267,23 +344,25 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
267
344
|
end
|
268
345
|
|
269
346
|
test 'with docker & kubernetes metadata' do
|
270
|
-
|
271
|
-
|
347
|
+
|
348
|
+
VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' }, { name: 'kubernetes_get_pod' }, { name: 'kubernetes_get_namespace_default' }]) do
|
349
|
+
filtered = emit({ 'time' => '2015-05-08T09:22:01Z' })
|
272
350
|
expected_kube_metadata = {
|
273
|
-
'time'=>'2015-05-08T09:22:01Z',
|
351
|
+
'time' => '2015-05-08T09:22:01Z',
|
274
352
|
'docker' => {
|
275
|
-
|
353
|
+
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
276
354
|
},
|
277
355
|
'kubernetes' => {
|
278
|
-
'host'
|
279
|
-
'pod_name'
|
280
|
-
'container_name'
|
281
|
-
'container_image'
|
356
|
+
'host' => 'jimmi-redhat.localnet',
|
357
|
+
'pod_name' => 'fabric8-console-controller-98rqc',
|
358
|
+
'container_name' => 'fabric8-console-container',
|
359
|
+
'container_image' => 'fabric8/hawtio-kubernetes:latest',
|
282
360
|
'container_image_id' => 'docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303',
|
283
|
-
'namespace_name'
|
284
|
-
'namespace_id'
|
285
|
-
'pod_id'
|
286
|
-
'
|
361
|
+
'namespace_name' => 'default',
|
362
|
+
'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
|
363
|
+
'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
|
364
|
+
'pod_ip' => '172.17.0.8',
|
365
|
+
'master_url' => 'https://localhost:8443',
|
287
366
|
'labels' => {
|
288
367
|
'component' => 'fabric8Console'
|
289
368
|
}
|
@@ -294,9 +373,26 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
294
373
|
end
|
295
374
|
end
|
296
375
|
|
376
|
+
test 'kubernetes metadata is cloned so it further processing does not modify the cache' do
|
377
|
+
|
378
|
+
VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' }, { name: 'kubernetes_get_pod' }, { name: 'kubernetes_get_namespace_default' }]) do
|
379
|
+
|
380
|
+
d = create_driver('
|
381
|
+
kubernetes_url https://localhost:8443
|
382
|
+
watch false
|
383
|
+
cache_size 1')
|
384
|
+
d.run(default_tag: VAR_LOG_POD_TAG) do
|
385
|
+
d.feed(@time, { 'time' => '2015-05-08T09:22:01Z' })
|
386
|
+
d.feed(@time, { 'time' => '2015-05-08T09:22:01Z' })
|
387
|
+
end
|
388
|
+
filtered = d.filtered.map(&:last)
|
389
|
+
assert_not_equal(filtered[0]['kubernetes']['labels'].object_id, filtered[1]['kubernetes']['labels'].object_id, "Exp. meta to be cloned")
|
390
|
+
end
|
391
|
+
end
|
392
|
+
|
297
393
|
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
|
394
|
+
VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' }, { name: 'kubernetes_get_pod' },
|
395
|
+
{ name: 'kubernetes_get_namespace_default', options: { allow_playback_repeats: true } }]) do
|
300
396
|
filtered = emit({}, '
|
301
397
|
kubernetes_url https://localhost:8443
|
302
398
|
watch false
|
@@ -304,18 +400,19 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
304
400
|
')
|
305
401
|
expected_kube_metadata = {
|
306
402
|
'docker' => {
|
307
|
-
|
403
|
+
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
308
404
|
},
|
309
405
|
'kubernetes' => {
|
310
|
-
'host'
|
311
|
-
'pod_name'
|
312
|
-
'container_name'
|
313
|
-
'container_image'
|
406
|
+
'host' => 'jimmi-redhat.localnet',
|
407
|
+
'pod_name' => 'fabric8-console-controller-98rqc',
|
408
|
+
'container_name' => 'fabric8-console-container',
|
409
|
+
'container_image' => 'fabric8/hawtio-kubernetes:latest',
|
314
410
|
'container_image_id' => 'docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303',
|
315
|
-
'namespace_name'
|
316
|
-
'namespace_id'
|
317
|
-
'pod_id'
|
318
|
-
'
|
411
|
+
'namespace_name' => 'default',
|
412
|
+
'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
|
413
|
+
'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
|
414
|
+
'pod_ip' => '172.17.0.8',
|
415
|
+
'master_url' => 'https://localhost:8443',
|
319
416
|
'labels' => {
|
320
417
|
'component' => 'fabric8Console'
|
321
418
|
}
|
@@ -326,8 +423,8 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
326
423
|
end
|
327
424
|
|
328
425
|
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
|
426
|
+
VCR.use_cassettes([{ name: 'valid_kubernetes_api_server_using_token' }, { name: 'kubernetes_get_api_v1_using_token' },
|
427
|
+
{ name: 'kubernetes_get_pod_using_token' }, { name: 'kubernetes_get_namespace_default_using_token' }]) do
|
331
428
|
filtered = emit({}, '
|
332
429
|
kubernetes_url https://localhost:8443
|
333
430
|
verify_ssl false
|
@@ -339,15 +436,16 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
339
436
|
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
340
437
|
},
|
341
438
|
'kubernetes' => {
|
342
|
-
'host'
|
343
|
-
'pod_name'
|
344
|
-
'container_name'
|
345
|
-
'container_image'
|
439
|
+
'host' => 'jimmi-redhat.localnet',
|
440
|
+
'pod_name' => 'fabric8-console-controller-98rqc',
|
441
|
+
'container_name' => 'fabric8-console-container',
|
442
|
+
'container_image' => 'fabric8/hawtio-kubernetes:latest',
|
346
443
|
'container_image_id' => 'docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303',
|
347
|
-
'namespace_name'
|
348
|
-
'namespace_id'
|
349
|
-
'pod_id'
|
350
|
-
'
|
444
|
+
'namespace_name' => 'default',
|
445
|
+
'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
|
446
|
+
'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
|
447
|
+
'pod_ip' => '172.17.0.8',
|
448
|
+
'master_url' => 'https://localhost:8443',
|
351
449
|
'labels' => {
|
352
450
|
'component' => 'fabric8Console'
|
353
451
|
}
|
@@ -360,14 +458,14 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
360
458
|
test 'with docker & kubernetes metadata but no configured api server' do
|
361
459
|
filtered = emit({}, '')
|
362
460
|
expected_kube_metadata = {
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
|
461
|
+
'docker'=>{
|
462
|
+
'container_id'=>'49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
463
|
+
},
|
464
|
+
'kubernetes' => {
|
465
|
+
'pod_name' => 'fabric8-console-controller-98rqc',
|
466
|
+
'container_name' => 'fabric8-console-container',
|
467
|
+
'namespace_name' => 'default'
|
468
|
+
}
|
371
469
|
}
|
372
470
|
assert_equal(expected_kube_metadata, filtered[0])
|
373
471
|
end
|
@@ -380,17 +478,17 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
380
478
|
)
|
381
479
|
stub_request(:any, 'https://localhost:8443/api/v1/namespaces/default/pods/fabric8-console-controller-98rqc').to_timeout
|
382
480
|
stub_request(:any, 'https://localhost:8443/api/v1/namespaces/default').to_timeout
|
383
|
-
filtered = emit
|
481
|
+
filtered = emit
|
384
482
|
expected_kube_metadata = {
|
385
|
-
'docker'
|
386
|
-
'container_id'
|
483
|
+
'docker'=>{
|
484
|
+
'container_id'=>'49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
387
485
|
},
|
388
486
|
'kubernetes' => {
|
389
|
-
'pod_name'
|
390
|
-
'container_name'
|
391
|
-
'namespace_name'
|
487
|
+
'pod_name' => 'fabric8-console-controller-98rqc',
|
488
|
+
'container_name' => 'fabric8-console-container',
|
489
|
+
'namespace_name' => '.orphaned',
|
392
490
|
'orphaned_namespace' => 'default',
|
393
|
-
'namespace_id'
|
491
|
+
'namespace_id' => 'orphaned'
|
394
492
|
}
|
395
493
|
}
|
396
494
|
assert_equal(expected_kube_metadata, filtered[0])
|
@@ -405,13 +503,13 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
405
503
|
stub_request(:any, 'https://localhost:8443/api/v1/namespaces/default/pods/fabric8-console-controller.98rqc').to_timeout
|
406
504
|
filtered = emit_with_tag('var.log.containers.fabric8-console-controller.98rqc_default_fabric8-console-container-49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459.log', {}, '')
|
407
505
|
expected_kube_metadata = {
|
408
|
-
'docker'
|
409
|
-
'container_id'
|
506
|
+
'docker'=>{
|
507
|
+
'container_id'=>'49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
410
508
|
},
|
411
509
|
'kubernetes' => {
|
412
|
-
'pod_name'
|
413
|
-
'container_name'
|
414
|
-
'namespace_name'
|
510
|
+
'pod_name' => 'fabric8-console-controller.98rqc',
|
511
|
+
'container_name' => 'fabric8-console-container',
|
512
|
+
'namespace_name' => 'default'
|
415
513
|
}
|
416
514
|
}
|
417
515
|
assert_equal(expected_kube_metadata, filtered[0])
|
@@ -419,80 +517,49 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
419
517
|
|
420
518
|
test 'with docker metadata, non-kubernetes' do
|
421
519
|
filtered = emit_with_tag('non-kubernetes', {}, '')
|
422
|
-
assert_false(filtered[0].
|
520
|
+
assert_false(filtered[0].key?(:kubernetes))
|
423
521
|
end
|
424
522
|
|
425
523
|
test 'ignores invalid json in log field' do
|
426
524
|
json_log = "{'foo':123}"
|
427
525
|
msg = {
|
428
|
-
|
526
|
+
'log' => json_log
|
429
527
|
}
|
430
528
|
filtered = emit_with_tag('non-kubernetes', msg, '')
|
431
529
|
assert_equal(msg, filtered[0])
|
432
530
|
end
|
433
531
|
|
434
|
-
test 'with kubernetes
|
435
|
-
VCR.use_cassettes([{name: 'valid_kubernetes_api_server'}, {name: 'kubernetes_get_api_v1'},
|
436
|
-
{name: '
|
532
|
+
test 'with kubernetes annotations' do
|
533
|
+
VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' },
|
534
|
+
{ name: 'kubernetes_docker_metadata_annotations' },
|
535
|
+
{ name: 'kubernetes_get_namespace_default' }]) do
|
437
536
|
filtered = emit({}, '
|
438
537
|
kubernetes_url https://localhost:8443
|
439
538
|
watch false
|
440
539
|
cache_size 1
|
540
|
+
annotation_match [ "^custom.+", "two"]
|
441
541
|
')
|
442
542
|
expected_kube_metadata = {
|
443
543
|
'docker' => {
|
444
|
-
|
544
|
+
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
445
545
|
},
|
446
546
|
'kubernetes' => {
|
447
|
-
'host'
|
448
|
-
'pod_name'
|
449
|
-
'container_name'
|
450
|
-
'container_image'
|
547
|
+
'host' => 'jimmi-redhat.localnet',
|
548
|
+
'pod_name' => 'fabric8-console-controller-98rqc',
|
549
|
+
'container_name' => 'fabric8-console-container',
|
550
|
+
'container_image' => 'fabric8/hawtio-kubernetes:latest',
|
451
551
|
'container_image_id' => 'docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303',
|
452
|
-
'
|
453
|
-
'
|
454
|
-
|
455
|
-
|
456
|
-
'
|
457
|
-
'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
|
458
|
-
'master_url' => 'https://localhost:8443',
|
552
|
+
'namespace_name' => 'default',
|
553
|
+
'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
|
554
|
+
'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
|
555
|
+
'pod_ip' => '172.17.0.8',
|
556
|
+
'master_url' => 'https://localhost:8443',
|
459
557
|
'labels' => {
|
460
|
-
'
|
461
|
-
}
|
462
|
-
}
|
463
|
-
}
|
464
|
-
assert_equal(expected_kube_metadata, filtered[0])
|
465
|
-
end
|
466
|
-
end
|
467
|
-
|
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: 'kubernetes_docker_metadata_dotted_labels'}]) do
|
471
|
-
filtered = emit({}, '
|
472
|
-
kubernetes_url https://localhost:8443
|
473
|
-
watch false
|
474
|
-
cache_size 1
|
475
|
-
de_dot false
|
476
|
-
')
|
477
|
-
expected_kube_metadata = {
|
478
|
-
'docker' => {
|
479
|
-
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
480
|
-
},
|
481
|
-
'kubernetes' => {
|
482
|
-
'host' => 'jimmi-redhat.localnet',
|
483
|
-
'pod_name' => 'fabric8-console-controller-98rqc',
|
484
|
-
'container_name' => 'fabric8-console-container',
|
485
|
-
'container_image' => 'fabric8/hawtio-kubernetes:latest',
|
486
|
-
'container_image_id' => 'docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303',
|
487
|
-
'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
|
488
|
-
'namespace_labels' => {
|
489
|
-
'kubernetes.io/namespacetest' => 'somevalue'
|
558
|
+
'component' => 'fabric8Console'
|
490
559
|
},
|
491
|
-
'
|
492
|
-
|
493
|
-
|
494
|
-
'labels' => {
|
495
|
-
'kubernetes.io/test' => 'somevalue'
|
560
|
+
'annotations' => {
|
561
|
+
'custom.field1' => 'hello_kitty',
|
562
|
+
'field.two' => 'value'
|
496
563
|
}
|
497
564
|
}
|
498
565
|
}
|
@@ -500,465 +567,121 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
500
567
|
end
|
501
568
|
end
|
502
569
|
|
503
|
-
test '
|
504
|
-
|
505
|
-
|
506
|
-
|
507
|
-
'
|
508
|
-
end
|
509
|
-
end
|
510
|
-
|
511
|
-
test 'with records from journald and docker & kubernetes metadata' do
|
512
|
-
# with use_journal true should ignore tags and use CONTAINER_NAME and CONTAINER_ID_FULL
|
513
|
-
tag = 'var.log.containers.junk1_junk2_junk3-49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed450.log'
|
514
|
-
msg = {
|
515
|
-
'CONTAINER_NAME' => 'k8s_fabric8-console-container.db89db89_fabric8-console-controller-98rqc_default_c76927af-f563-11e4-b32d-54ee7527188d_89db89db',
|
516
|
-
'CONTAINER_ID_FULL' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459',
|
517
|
-
'randomfield' => 'randomvalue'
|
518
|
-
}
|
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
|
521
|
-
filtered = emit_with_tag(tag, msg, '
|
570
|
+
test 'with kubernetes namespace annotations' do
|
571
|
+
VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' },
|
572
|
+
{ name: 'kubernetes_docker_metadata_annotations' },
|
573
|
+
{ name: 'kubernetes_get_namespace_default' }]) do
|
574
|
+
filtered = emit({}, '
|
522
575
|
kubernetes_url https://localhost:8443
|
523
576
|
watch false
|
524
577
|
cache_size 1
|
525
|
-
|
578
|
+
annotation_match [ "^custom.+", "two", "workspace*"]
|
526
579
|
')
|
527
580
|
expected_kube_metadata = {
|
528
581
|
'docker' => {
|
529
|
-
|
582
|
+
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
530
583
|
},
|
531
584
|
'kubernetes' => {
|
532
|
-
'host'
|
533
|
-
'pod_name'
|
534
|
-
'container_name'
|
535
|
-
'
|
585
|
+
'host' => 'jimmi-redhat.localnet',
|
586
|
+
'pod_name' => 'fabric8-console-controller-98rqc',
|
587
|
+
'container_name' => 'fabric8-console-container',
|
588
|
+
'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
|
589
|
+
'namespace_name' => 'default',
|
590
|
+
'container_image' => 'fabric8/hawtio-kubernetes:latest',
|
536
591
|
'container_image_id' => 'docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303',
|
537
|
-
'
|
538
|
-
'
|
539
|
-
'
|
540
|
-
'master_url' => 'https://localhost:8443',
|
592
|
+
'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
|
593
|
+
'pod_ip' => '172.17.0.8',
|
594
|
+
'master_url' => 'https://localhost:8443',
|
541
595
|
'labels' => {
|
542
596
|
'component' => 'fabric8Console'
|
597
|
+
},
|
598
|
+
'annotations' => {
|
599
|
+
'custom.field1' => 'hello_kitty',
|
600
|
+
'field.two' => 'value'
|
601
|
+
},
|
602
|
+
'namespace_annotations' => {
|
603
|
+
'workspaceId' => 'myWorkspaceName'
|
543
604
|
}
|
544
605
|
}
|
545
|
-
}
|
606
|
+
}
|
546
607
|
assert_equal(expected_kube_metadata, filtered[0])
|
547
608
|
end
|
548
609
|
end
|
549
610
|
|
550
|
-
test 'with
|
551
|
-
|
552
|
-
|
553
|
-
|
554
|
-
|
555
|
-
'CONTAINER_ID_FULL' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459',
|
556
|
-
'randomfield' => 'randomvalue'
|
557
|
-
}
|
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
|
560
|
-
filtered = emit_with_tag(tag, msg, '
|
611
|
+
test 'with kubernetes namespace annotations no match' do
|
612
|
+
VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' },
|
613
|
+
{ name: 'kubernetes_docker_metadata_annotations' },
|
614
|
+
{ name: 'kubernetes_get_namespace_default' }]) do
|
615
|
+
filtered = emit({}, '
|
561
616
|
kubernetes_url https://localhost:8443
|
562
617
|
watch false
|
563
618
|
cache_size 1
|
564
|
-
|
619
|
+
annotation_match [ "noMatch*"]
|
565
620
|
')
|
566
621
|
expected_kube_metadata = {
|
567
622
|
'docker' => {
|
568
|
-
|
623
|
+
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
569
624
|
},
|
570
625
|
'kubernetes' => {
|
571
|
-
'host'
|
572
|
-
'pod_name'
|
573
|
-
'container_name'
|
574
|
-
'container_image'
|
626
|
+
'host' => 'jimmi-redhat.localnet',
|
627
|
+
'pod_name' => 'fabric8-console-controller-98rqc',
|
628
|
+
'container_name' => 'fabric8-console-container',
|
629
|
+
'container_image' => 'fabric8/hawtio-kubernetes:latest',
|
575
630
|
'container_image_id' => 'docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303',
|
576
|
-
'
|
577
|
-
'
|
578
|
-
'pod_id'
|
579
|
-
'
|
631
|
+
'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
|
632
|
+
'namespace_name' => 'default',
|
633
|
+
'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
|
634
|
+
'pod_ip' => '172.17.0.8',
|
635
|
+
'master_url' => 'https://localhost:8443',
|
580
636
|
'labels' => {
|
581
637
|
'component' => 'fabric8Console'
|
582
638
|
}
|
583
639
|
}
|
584
|
-
}
|
640
|
+
}
|
585
641
|
assert_equal(expected_kube_metadata, filtered[0])
|
586
642
|
end
|
587
643
|
end
|
588
644
|
|
589
|
-
test '
|
590
|
-
|
591
|
-
|
592
|
-
|
593
|
-
|
594
|
-
'
|
595
|
-
|
596
|
-
|
597
|
-
'pod_name' => 'k8s-pod-name',
|
598
|
-
'container_name' => 'k8s-container-name'
|
599
|
-
},
|
600
|
-
'docker' => {'container_id' => 'e463bc0d3ae38f5c89d92dca49b30e049e899799920b79d4d5f705acbe82ba95'},
|
601
|
-
'randomfield' => 'randomvalue'
|
602
|
-
}
|
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
|
606
|
-
es = emit_with_tag(tag, msg, '
|
607
|
-
kubernetes_url https://localhost:8443
|
608
|
-
watch false
|
609
|
-
cache_size 1
|
610
|
-
')
|
611
|
-
expected_kube_metadata = {
|
612
|
-
'docker' => {
|
613
|
-
'container_id' => 'e463bc0d3ae38f5c89d92dca49b30e049e899799920b79d4d5f705acbe82ba95'
|
614
|
-
},
|
615
|
-
'kubernetes' => {
|
616
|
-
'host' => 'jimmi-redhat.localnet',
|
617
|
-
'pod_name' => 'k8s-pod-name',
|
618
|
-
'container_name' => 'k8s-container-name',
|
619
|
-
'container_image' => 'k8s-container-image:latest',
|
620
|
-
'container_image_id' => 'docker://d78c5217c41e9af08d37d9ae2cb070afa1fe3da6bc77bfb18879a8b4bfdf8a34',
|
621
|
-
'namespace_name' => 'k8s-namespace-name',
|
622
|
-
'namespace_id' => '8e0dc8fc-59f2-49f7-a3e2-ed0913e19d9f',
|
623
|
-
'pod_id' => 'ebabf749-5fcd-4750-a3f0-aedd89476da8',
|
624
|
-
'master_url' => 'https://localhost:8443',
|
625
|
-
'labels' => {
|
626
|
-
'component' => 'k8s-test'
|
627
|
-
}
|
628
|
-
}
|
629
|
-
}.merge(msg) {|key,oldval,newval| ((key == 'kubernetes') || (key == 'docker')) ? oldval : newval}
|
630
|
-
assert_equal(expected_kube_metadata, es[0])
|
631
|
-
end
|
632
|
-
end
|
633
|
-
|
634
|
-
test 'with records from journald and docker & kubernetes metadata with lookup_from_k8s_field false' do
|
635
|
-
# with use_journal unset, should still use the journal fields instead of tag fields
|
636
|
-
tag = 'var.log.containers.fabric8-console-controller-98rqc_default_fabric8-console-container-49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459.log'
|
637
|
-
msg = {
|
638
|
-
'CONTAINER_NAME' => 'k8s_journald-container-name.db89db89_journald-pod-name_journald-namespace-name_c76927af-f563-11e4-b32d-54ee7527188d_89db89db',
|
639
|
-
'CONTAINER_ID_FULL' => '838350c64bacba968d39a30a50789b2795291fceca6ccbff55298671d46b0e3b',
|
640
|
-
'kubernetes' => {
|
641
|
-
'namespace_name' => 'k8s-namespace-name',
|
642
|
-
'pod_name' => 'k8s-pod-name',
|
643
|
-
'container_name' => 'k8s-container-name'
|
644
|
-
},
|
645
|
-
'docker' => {'container_id' => 'e463bc0d3ae38f5c89d92dca49b30e049e899799920b79d4d5f705acbe82ba95'},
|
646
|
-
'randomfield' => 'randomvalue'
|
647
|
-
}
|
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
|
651
|
-
es = emit_with_tag(tag, msg, '
|
652
|
-
kubernetes_url https://localhost:8443
|
653
|
-
watch false
|
654
|
-
cache_size 1
|
655
|
-
lookup_from_k8s_field false
|
656
|
-
')
|
657
|
-
expected_kube_metadata = {
|
658
|
-
'docker' => {
|
659
|
-
'container_id' => '838350c64bacba968d39a30a50789b2795291fceca6ccbff55298671d46b0e3b'
|
660
|
-
},
|
661
|
-
'kubernetes' => {
|
662
|
-
'host' => 'jimmi-redhat.localnet',
|
663
|
-
'pod_name' => 'journald-pod-name',
|
664
|
-
'container_name' => 'journald-container-name',
|
665
|
-
'container_image' => 'journald-container-image:latest',
|
666
|
-
'container_image_id' => 'docker://dda4c95705fb7050b701b10a7fe928ca5bc971a1dcb521ae3c339194cbf36b47',
|
667
|
-
'namespace_name' => 'journald-namespace-name',
|
668
|
-
'namespace_id' => '8282888f-733f-4f23-a3d3-1fdfa3bdacf2',
|
669
|
-
'pod_id' => '5e1c1e27-b637-4e81-80b6-6d8a8c404d3b',
|
670
|
-
'master_url' => 'https://localhost:8443',
|
671
|
-
'labels' => {
|
672
|
-
'component' => 'journald-test'
|
673
|
-
}
|
674
|
-
}
|
675
|
-
}.merge(msg) {|key,oldval,newval| ((key == 'kubernetes') || (key == 'docker')) ? oldval : newval}
|
676
|
-
assert_equal(expected_kube_metadata, es[0])
|
677
|
-
end
|
678
|
-
end
|
679
|
-
|
680
|
-
test 'uses metadata from tag if use_journal false and lookup_from_k8s_field false' do
|
681
|
-
# 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
|
-
msg = {
|
684
|
-
'CONTAINER_NAME' => 'k8s_journald-container-name.db89db89_journald-pod-name_journald-namespace-name_c76927af-f563-11e4-b32d-54ee7527188d_89db89db',
|
685
|
-
'CONTAINER_ID_FULL' => '838350c64bacba968d39a30a50789b2795291fceca6ccbff55298671d46b0e3b',
|
686
|
-
'kubernetes' => {
|
687
|
-
'namespace_name' => 'k8s-namespace-name',
|
688
|
-
'pod_name' => 'k8s-pod-name',
|
689
|
-
'container_name' => 'k8s-container-name'
|
690
|
-
},
|
691
|
-
'docker' => {'container_id' => 'e463bc0d3ae38f5c89d92dca49b30e049e899799920b79d4d5f705acbe82ba95'},
|
692
|
-
'randomfield' => 'randomvalue'
|
693
|
-
}
|
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(tag, msg, '
|
698
|
-
kubernetes_url https://localhost:8443
|
699
|
-
watch false
|
700
|
-
cache_size 1
|
701
|
-
lookup_from_k8s_field false
|
702
|
-
use_journal false
|
703
|
-
')
|
704
|
-
expected_kube_metadata = {
|
705
|
-
'docker' => {
|
706
|
-
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
707
|
-
},
|
708
|
-
'kubernetes' => {
|
709
|
-
'host' => 'jimmi-redhat.localnet',
|
710
|
-
'pod_name' => 'fabric8-console-controller-98rqc',
|
711
|
-
'container_name' => 'fabric8-console-container',
|
712
|
-
'container_image' => 'fabric8/hawtio-kubernetes:latest',
|
713
|
-
'container_image_id' => 'docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303',
|
714
|
-
'namespace_name' => 'default',
|
715
|
-
'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
|
716
|
-
'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
|
717
|
-
'master_url' => 'https://localhost:8443',
|
718
|
-
'labels' => {
|
719
|
-
'component' => 'fabric8Console'
|
720
|
-
}
|
721
|
-
}
|
722
|
-
}.merge(msg) {|key,oldval,newval| ((key == 'kubernetes') || (key == 'docker')) ? oldval : newval}
|
723
|
-
assert_equal(expected_kube_metadata, es[0])
|
724
|
-
end
|
725
|
-
end
|
645
|
+
test 'processes all events when reading from MessagePackEventStream' do
|
646
|
+
VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' },
|
647
|
+
{ name: 'kubernetes_get_api_v1' },
|
648
|
+
{ name: 'kubernetes_get_pod' },
|
649
|
+
{ name: 'kubernetes_get_namespace_default' }]) do
|
650
|
+
entries = [[@time, { 'time' => '2015-05-08T09:22:01Z' }], [@time, { 'time' => '2015-05-08T09:22:01Z' }]]
|
651
|
+
array_stream = Fluent::ArrayEventStream.new(entries)
|
652
|
+
msgpack_stream = Fluent::MessagePackEventStream.new(array_stream.to_msgpack_stream)
|
726
653
|
|
727
|
-
|
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({},'
|
654
|
+
d = create_driver('
|
732
655
|
kubernetes_url https://localhost:8443
|
733
656
|
watch false
|
734
657
|
cache_size 1
|
735
|
-
|
658
|
+
stats_interval 0
|
736
659
|
')
|
737
|
-
|
738
|
-
|
739
|
-
|
740
|
-
|
741
|
-
'kubernetes' => {
|
742
|
-
'host' => 'jimmi-redhat.localnet',
|
743
|
-
'pod_name' => 'fabric8-console-controller-98rqc',
|
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
|
-
}
|
758
|
-
}
|
759
|
-
}
|
760
|
-
assert_equal(expected_kube_metadata, filtered[0])
|
761
|
-
end
|
762
|
-
end
|
660
|
+
d.run do
|
661
|
+
d.feed(VAR_LOG_CONTAINER_TAG, msgpack_stream)
|
662
|
+
end
|
663
|
+
filtered = d.filtered.map(&:last)
|
763
664
|
|
764
|
-
test 'with records from journald and docker & kubernetes metadata, alternate form' do
|
765
|
-
# with use_journal true should ignore tags and use CONTAINER_NAME and CONTAINER_ID_FULL
|
766
|
-
tag = 'var.log.containers.junk1_junk2_junk3-49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed450.log'
|
767
|
-
msg = {
|
768
|
-
'CONTAINER_NAME' => 'alt_fabric8-console-container_fabric8-console-controller-98rqc_default_c76927af-f563-11e4-b32d-54ee7527188d_0',
|
769
|
-
'CONTAINER_ID_FULL' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459',
|
770
|
-
'randomfield' => 'randomvalue'
|
771
|
-
}
|
772
|
-
VCR.use_cassettes([{name: 'valid_kubernetes_api_server'}, {name: 'kubernetes_get_api_v1'}, {name: 'kubernetes_get_pod'},
|
773
|
-
{name: 'kubernetes_get_namespace_default'},
|
774
|
-
{name: 'metadata_from_tag_and_journald_fields'}]) do
|
775
|
-
filtered = emit_with_tag(tag, msg, '
|
776
|
-
kubernetes_url https://localhost:8443
|
777
|
-
watch false
|
778
|
-
cache_size 1
|
779
|
-
use_journal true
|
780
|
-
')
|
781
665
|
expected_kube_metadata = {
|
666
|
+
'time' => '2015-05-08T09:22:01Z',
|
782
667
|
'docker' => {
|
783
|
-
|
668
|
+
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
784
669
|
},
|
785
670
|
'kubernetes' => {
|
786
|
-
'host'
|
787
|
-
'pod_name'
|
788
|
-
'container_name'
|
789
|
-
'container_image'
|
671
|
+
'host' => 'jimmi-redhat.localnet',
|
672
|
+
'pod_name' => 'fabric8-console-controller-98rqc',
|
673
|
+
'container_name' => 'fabric8-console-container',
|
674
|
+
'container_image' => 'fabric8/hawtio-kubernetes:latest',
|
790
675
|
'container_image_id' => 'docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303',
|
791
|
-
'namespace_name'
|
792
|
-
'namespace_id'
|
793
|
-
'pod_id'
|
794
|
-
'
|
676
|
+
'namespace_name' => 'default',
|
677
|
+
'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
|
678
|
+
'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
|
679
|
+
'pod_ip' => '172.17.0.8',
|
680
|
+
'master_url' => 'https://localhost:8443',
|
795
681
|
'labels' => {
|
796
682
|
'component' => 'fabric8Console'
|
797
683
|
}
|
798
684
|
}
|
799
|
-
}.merge(msg)
|
800
|
-
assert_equal(expected_kube_metadata, filtered[0])
|
801
|
-
end
|
802
|
-
end
|
803
|
-
|
804
|
-
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({},'
|
809
|
-
kubernetes_url https://localhost:8443
|
810
|
-
watch false
|
811
|
-
cache_size 1
|
812
|
-
annotation_match [ "^custom.+", "two", "workspace*"]
|
813
|
-
')
|
814
|
-
expected_kube_metadata = {
|
815
|
-
'docker' => {
|
816
|
-
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
817
|
-
},
|
818
|
-
'kubernetes' => {
|
819
|
-
'host' => 'jimmi-redhat.localnet',
|
820
|
-
'pod_name' => 'fabric8-console-controller-98rqc',
|
821
|
-
'container_name' => 'fabric8-console-container',
|
822
|
-
'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
|
823
|
-
'namespace_name' => 'default',
|
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
|
-
}
|
838
|
-
}
|
839
|
-
}
|
840
|
-
assert_equal(expected_kube_metadata, filtered[0])
|
841
|
-
end
|
842
|
-
end
|
843
|
-
|
844
|
-
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({},'
|
849
|
-
kubernetes_url https://localhost:8443
|
850
|
-
watch false
|
851
|
-
cache_size 1
|
852
|
-
annotation_match [ "noMatch*"]
|
853
|
-
')
|
854
|
-
expected_kube_metadata = {
|
855
|
-
'docker' => {
|
856
|
-
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
857
|
-
},
|
858
|
-
'kubernetes' => {
|
859
|
-
'host' => 'jimmi-redhat.localnet',
|
860
|
-
'pod_name' => 'fabric8-console-controller-98rqc',
|
861
|
-
'container_name' => 'fabric8-console-container',
|
862
|
-
'container_image' => 'fabric8/hawtio-kubernetes:latest',
|
863
|
-
'container_image_id' => 'docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303',
|
864
|
-
'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
|
865
|
-
'namespace_name' => 'default',
|
866
|
-
'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
|
867
|
-
'master_url' => 'https://localhost:8443',
|
868
|
-
'labels' => {
|
869
|
-
'component' => 'fabric8Console'
|
870
|
-
}
|
871
|
-
}
|
872
|
-
}
|
873
|
-
assert_equal(expected_kube_metadata, filtered[0])
|
874
|
-
end
|
875
|
-
end
|
876
|
-
test 'with CONTAINER_NAME that does not match' do
|
877
|
-
tag = 'var.log.containers.junk4_junk5_junk6-49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed450.log'
|
878
|
-
msg = {
|
879
|
-
'CONTAINER_NAME' => 'does_not_match',
|
880
|
-
'CONTAINER_ID_FULL' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459',
|
881
|
-
'randomfield' => 'randomvalue'
|
882
|
-
}
|
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
|
886
|
-
filtered = emit_with_tag(tag, msg, '
|
887
|
-
kubernetes_url https://localhost:8443
|
888
|
-
watch false
|
889
|
-
cache_size 1
|
890
|
-
use_journal true
|
891
|
-
')
|
892
|
-
expected_kube_metadata = {
|
893
|
-
'CONTAINER_NAME' => 'does_not_match',
|
894
|
-
'CONTAINER_ID_FULL' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459',
|
895
|
-
'randomfield' => 'randomvalue'
|
896
|
-
}
|
897
|
-
assert_equal(expected_kube_metadata, filtered[0])
|
898
|
-
end
|
899
|
-
end
|
900
|
-
test 'with CONTAINER_NAME starts with k8s_ that does not match' do
|
901
|
-
tag = 'var.log.containers.junk4_junk5_junk6-49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed450.log'
|
902
|
-
msg = {
|
903
|
-
'CONTAINER_NAME' => 'k8s_doesnotmatch',
|
904
|
-
'CONTAINER_ID_FULL' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459',
|
905
|
-
'randomfield' => 'randomvalue'
|
906
|
-
}
|
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
|
910
|
-
filtered = emit_with_tag(tag, msg, '
|
911
|
-
kubernetes_url https://localhost:8443
|
912
|
-
watch false
|
913
|
-
cache_size 1
|
914
|
-
use_journal true
|
915
|
-
')
|
916
|
-
expected_kube_metadata = {
|
917
|
-
'CONTAINER_NAME' => 'k8s_doesnotmatch',
|
918
|
-
'CONTAINER_ID_FULL' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459',
|
919
|
-
'randomfield' => 'randomvalue'
|
920
|
-
}
|
921
|
-
assert_equal(expected_kube_metadata, filtered[0])
|
922
|
-
end
|
923
|
-
end
|
924
|
-
|
925
|
-
test 'processes all events when reading from MessagePackEventStream' do
|
926
|
-
VCR.use_cassettes([{name: 'valid_kubernetes_api_server'}, {name: 'kubernetes_get_api_v1'},
|
927
|
-
{name: 'kubernetes_get_pod'},
|
928
|
-
{name: 'kubernetes_get_namespace_default'}]) do
|
929
|
-
entries = [[@time, {'time'=>'2015-05-08T09:22:01Z'}], [@time, {'time'=>'2015-05-08T09:22:01Z'}]]
|
930
|
-
array_stream = Fluent::ArrayEventStream.new(entries)
|
931
|
-
msgpack_stream = Fluent::MessagePackEventStream.new(array_stream.to_msgpack_stream)
|
932
|
-
|
933
|
-
d = create_driver('
|
934
|
-
kubernetes_url https://localhost:8443
|
935
|
-
watch false
|
936
|
-
cache_size 1
|
937
|
-
')
|
938
|
-
d.run {
|
939
|
-
d.feed(DEFAULT_TAG, msgpack_stream)
|
940
|
-
}
|
941
|
-
filtered = d.filtered.map{|e| e.last}
|
942
|
-
|
943
|
-
expected_kube_metadata = {
|
944
|
-
'time'=>'2015-05-08T09:22:01Z',
|
945
|
-
'docker' => {
|
946
|
-
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
947
|
-
},
|
948
|
-
'kubernetes' => {
|
949
|
-
'host' => 'jimmi-redhat.localnet',
|
950
|
-
'pod_name' => 'fabric8-console-controller-98rqc',
|
951
|
-
'container_name' => 'fabric8-console-container',
|
952
|
-
'container_image' => 'fabric8/hawtio-kubernetes:latest',
|
953
|
-
'container_image_id' => 'docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303',
|
954
|
-
'namespace_name' => 'default',
|
955
|
-
'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
|
956
|
-
'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
|
957
|
-
'master_url' => 'https://localhost:8443',
|
958
|
-
'labels' => {
|
959
|
-
'component' => 'fabric8Console'
|
960
|
-
}
|
961
|
-
}
|
962
685
|
}
|
963
686
|
|
964
687
|
assert_equal(expected_kube_metadata, filtered[0])
|
@@ -967,9 +690,9 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
967
690
|
end
|
968
691
|
|
969
692
|
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({},'
|
693
|
+
VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' }, { name: 'kubernetes_get_pod' },
|
694
|
+
{ name: 'kubernetes_get_namespace_default' }]) do
|
695
|
+
filtered = emit({}, '
|
973
696
|
kubernetes_url https://localhost:8443
|
974
697
|
watch false
|
975
698
|
cache_size 1
|
@@ -979,16 +702,17 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
979
702
|
skip_namespace_metadata true
|
980
703
|
')
|
981
704
|
expected_kube_metadata = {
|
982
|
-
|
983
|
-
|
984
|
-
|
985
|
-
|
986
|
-
|
987
|
-
|
988
|
-
|
989
|
-
|
990
|
-
|
991
|
-
|
705
|
+
'docker'=>{
|
706
|
+
'container_id'=>'49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
707
|
+
},
|
708
|
+
'kubernetes' => {
|
709
|
+
'host' => 'jimmi-redhat.localnet',
|
710
|
+
'pod_name' => 'fabric8-console-controller-98rqc',
|
711
|
+
'container_name' => 'fabric8-console-container',
|
712
|
+
'namespace_name' => 'default',
|
713
|
+
'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
|
714
|
+
'pod_ip' => '172.17.0.8'
|
715
|
+
}
|
992
716
|
}
|
993
717
|
|
994
718
|
assert_equal(expected_kube_metadata, filtered[0])
|