fluent-plugin-kubernetes_metadata_filter 2.1.4 → 2.9.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (40) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +57 -0
  3. data/.gitignore +0 -1
  4. data/.rubocop.yml +57 -0
  5. data/Gemfile +4 -2
  6. data/Gemfile.lock +158 -0
  7. data/README.md +48 -28
  8. data/Rakefile +15 -11
  9. data/fluent-plugin-kubernetes_metadata_filter.gemspec +25 -28
  10. data/lib/fluent/plugin/filter_kubernetes_metadata.rb +185 -131
  11. data/lib/fluent/plugin/kubernetes_metadata_cache_strategy.rb +27 -20
  12. data/lib/fluent/plugin/kubernetes_metadata_common.rb +59 -33
  13. data/lib/fluent/plugin/kubernetes_metadata_stats.rb +6 -6
  14. data/lib/fluent/plugin/kubernetes_metadata_test_api_adapter.rb +68 -0
  15. data/lib/fluent/plugin/kubernetes_metadata_util.rb +53 -0
  16. data/lib/fluent/plugin/kubernetes_metadata_watch_namespaces.rb +121 -27
  17. data/lib/fluent/plugin/kubernetes_metadata_watch_pods.rb +138 -29
  18. data/release_notes.md +42 -0
  19. data/test/cassettes/kubernetes_docker_metadata_annotations.yml +0 -34
  20. data/test/cassettes/{kubernetes_docker_metadata_dotted_labels.yml → kubernetes_docker_metadata_dotted_slashed_labels.yml} +0 -34
  21. data/test/cassettes/kubernetes_get_api_v1.yml +193 -0
  22. data/test/cassettes/kubernetes_get_api_v1_using_token.yml +195 -0
  23. data/test/cassettes/kubernetes_get_namespace_default.yml +69 -0
  24. data/test/cassettes/kubernetes_get_namespace_default_using_token.yml +71 -0
  25. data/test/cassettes/{kubernetes_docker_metadata.yml → kubernetes_get_pod.yml} +0 -82
  26. data/test/cassettes/{metadata_with_namespace_id.yml → kubernetes_get_pod_container_init.yml} +3 -134
  27. data/test/cassettes/{kubernetes_docker_metadata_using_bearer_token.yml → kubernetes_get_pod_using_token.yml} +5 -105
  28. data/test/cassettes/metadata_from_tag_and_journald_fields.yml +0 -255
  29. data/test/cassettes/metadata_from_tag_journald_and_kubernetes_fields.yml +0 -255
  30. data/test/cassettes/{non_kubernetes_docker_metadata.yml → valid_kubernetes_api_server_using_token.yml} +4 -44
  31. data/test/helper.rb +20 -2
  32. data/test/plugin/test_cache_stats.rb +10 -13
  33. data/test/plugin/test_cache_strategy.rb +158 -160
  34. data/test/plugin/test_filter_kubernetes_metadata.rb +480 -320
  35. data/test/plugin/test_utils.rb +56 -0
  36. data/test/plugin/test_watch_namespaces.rb +209 -55
  37. data/test/plugin/test_watch_pods.rb +302 -103
  38. data/test/plugin/watch_test.rb +52 -33
  39. metadata +69 -72
  40. 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
- DEFAULT_TAG = 'var.log.containers.fabric8-console-controller-98rqc_default_fabric8-console-container-49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459.log'
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
- begin
85
- ENV['KUBERNETES_SERVICE_HOST'] = 'localhost'
86
- ENV['KUBERNETES_SERVICE_PORT'] = '8443'
87
+ ENV['KUBERNETES_SERVICE_HOST'] = 'localhost'
88
+ ENV['KUBERNETES_SERVICE_PORT'] = '8443'
87
89
 
88
- Dir.mktmpdir { |dir|
89
- # Fake token file and CA crt.
90
- expected_cert_path = File.join(dir, Plugin::KubernetesMetadataFilter::K8_POD_CA_CERT)
91
- expected_token_path = File.join(dir, Plugin::KubernetesMetadataFilter::K8_POD_TOKEN)
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
- File.open(expected_cert_path, "w") {}
94
- File.open(expected_token_path, "w") {}
95
+ File.open(expected_cert_path, 'w')
96
+ File.open(expected_token_path, 'w')
95
97
 
96
- d = create_driver("
98
+ d = create_driver("
97
99
  watch false
98
100
  secret_dir #{dir}
99
101
  ")
100
102
 
101
- assert_equal(d.instance.kubernetes_url, "https://localhost:8443/api")
102
- assert_equal(d.instance.ca_file, expected_cert_path)
103
- assert_equal(d.instance.bearer_token_file, expected_token_path)
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
- begin
115
- ENV['KUBERNETES_SERVICE_HOST'] = 'localhost'
116
- ENV['KUBERNETES_SERVICE_PORT'] = '8443'
115
+ ENV['KUBERNETES_SERVICE_HOST'] = 'localhost'
116
+ ENV['KUBERNETES_SERVICE_PORT'] = '8443'
117
117
 
118
- Dir.mktmpdir { |dir|
119
- d = create_driver("
118
+ Dir.mktmpdir do |dir|
119
+ d = create_driver("
120
120
  watch false
121
121
  secret_dir #{dir}
122
122
  ")
123
- assert_equal(d.instance.kubernetes_url, "https://localhost:8443/api")
124
- assert_false(d.instance.ca_file.present?)
125
- assert_false(d.instance.bearer_token_file.present?)
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 'filter_stream' do
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: DEFAULT_TAG) {
141
+ d.run(default_tag: VAR_LOG_CONTAINER_TAG) do
144
142
  d.feed(@time, msg)
145
- }
146
- d.filtered.map{|e| e.last}
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{|e| e.last}
155
+ end
156
+ d.filtered.map(&:last)
159
157
  end
160
158
 
161
159
  test 'nil event stream' do
162
- #not certain how this is possible but adding test to properly
163
- #guard against this condition we have seen - test for nil,
164
- #empty, no empty method, not an event stream
165
- plugin = create_driver.instance
166
- plugin.filter_stream('tag', nil)
167
- plugin.filter_stream('tag', Fluent::MultiEventStream.new)
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.use_cassette('kubernetes_docker_metadata') do
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'}, '', :d => driver)
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
- 'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
249
+ 'time' => '2015-05-08T09:22:01Z',
250
+ 'docker'=>{
251
+ 'container_id'=>'49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
184
252
  },
185
253
  'kubernetes' => {
186
- 'pod_name' => 'fabric8-console-controller-98rqc',
254
+ 'pod_name' => 'fabric8-console-controller-98rqc',
187
255
  'container_name' => 'fabric8-console-container',
188
- "namespace_id"=>"orphaned",
256
+ 'namespace_id' => 'orphaned',
189
257
  'namespace_name' => '.orphaned',
190
- "orphaned_namespace"=>"default"
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.use_cassette('kubernetes_docker_metadata') do
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
- :pod_id =>'c76927af-f563-11e4-b32d-54ee7527188d',
207
- :namespace_id =>'898268c8-4a36-11e5-9d81-42010af0194c'
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
- 'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
283
+ 'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
216
284
  },
217
285
  'kubernetes' => {
218
- 'pod_name' => 'fabric8-console-controller-98rqc',
219
- 'container_name' => 'fabric8-console-container',
220
- 'namespace_name' => 'default',
221
- 'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
222
- 'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
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.use_cassette('kubernetes_docker_metadata') do
299
+ VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' }, { name: 'kubernetes_get_pod' }, { name: 'kubernetes_get_namespace_default' }]) do
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
- :pod_id =>'c76927af-f563-11e4-b32d-54ee7527188d',
240
- :namespace_id =>'898268c8-4a36-11e5-9d81-42010af0194c'
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
- 'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
314
+ 'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
247
315
  },
248
316
  'kubernetes' => {
249
- 'host' => 'jimmi-redhat.localnet',
250
- 'pod_name' => 'fabric8-console-controller-98rqc',
251
- 'container_name' => 'fabric8-console-container',
252
- 'container_image' => 'fabric8/hawtio-kubernetes:latest',
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' => 'default',
255
- 'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
256
- 'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
257
- 'master_url' => 'https://localhost:8443',
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
- VCR.use_cassette('kubernetes_docker_metadata') do
270
- filtered = emit({'time'=>'2015-05-08T09:22:01Z'})
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
- 'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
344
+ 'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
275
345
  },
276
346
  'kubernetes' => {
277
- 'host' => 'jimmi-redhat.localnet',
278
- 'pod_name' => 'fabric8-console-controller-98rqc',
279
- 'container_name' => 'fabric8-console-container',
280
- 'container_image' => 'fabric8/hawtio-kubernetes:latest',
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' => 'default',
283
- 'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
284
- 'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
285
- 'master_url' => 'https://localhost:8443',
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.use_cassette('metadata_with_namespace_id') do
368
+ VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' }, { name: 'kubernetes_get_pod' },
369
+ { name: 'kubernetes_get_namespace_default', options: { allow_playback_repeats: true } }]) do
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
- 'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
377
+ 'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
306
378
  },
307
379
  'kubernetes' => {
308
- 'host' => 'jimmi-redhat.localnet',
309
- 'pod_name' => 'fabric8-console-controller-98rqc',
310
- 'container_name' => 'fabric8-console-container',
311
- 'container_image' => 'fabric8/hawtio-kubernetes:latest',
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' => 'default',
314
- 'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
315
- 'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
316
- 'master_url' => 'https://localhost:8443',
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.use_cassette('kubernetes_docker_metadata_using_bearer_token') do
400
+ VCR.use_cassettes([{ name: 'valid_kubernetes_api_server_using_token' }, { name: 'kubernetes_get_api_v1_using_token' },
401
+ { name: 'kubernetes_get_pod_using_token' }, { name: 'kubernetes_get_namespace_default_using_token' }]) do
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' => 'jimmi-redhat.localnet',
340
- 'pod_name' => 'fabric8-console-controller-98rqc',
341
- 'container_name' => 'fabric8-console-container',
342
- 'container_image' => 'fabric8/hawtio-kubernetes:latest',
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' => 'default',
345
- 'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
346
- 'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
347
- 'master_url' => 'https://localhost:8443',
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
- 'docker' => {
361
- 'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
362
- },
363
- 'kubernetes' => {
364
- 'pod_name' => 'fabric8-console-controller-98rqc',
365
- 'container_name' => 'fabric8-console-container',
366
- 'namespace_name' => 'default',
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' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
457
+ 'docker'=>{
458
+ 'container_id'=>'49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
384
459
  },
385
460
  'kubernetes' => {
386
- 'pod_name' => 'fabric8-console-controller-98rqc',
387
- 'container_name' => 'fabric8-console-container',
388
- 'namespace_name' => '.orphaned',
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' => 'orphaned'
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' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
480
+ 'docker'=>{
481
+ 'container_id'=>'49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
407
482
  },
408
483
  'kubernetes' => {
409
- 'pod_name' => 'fabric8-console-controller.98rqc',
410
- 'container_name' => 'fabric8-console-container',
411
- 'namespace_name' => 'default'
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].has_key?(:kubernetes))
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
- 'log' => json_log
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.use_cassette('kubernetes_docker_metadata_dotted_labels') do
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
- 'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
518
+ 'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
441
519
  },
442
520
  'kubernetes' => {
443
- 'host' => 'jimmi-redhat.localnet',
444
- 'pod_name' => 'fabric8-console-controller-98rqc',
445
- 'container_name' => 'fabric8-console-container',
446
- 'container_image' => 'fabric8/hawtio-kubernetes:latest',
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' => '898268c8-4a36-11e5-9d81-42010af0194c',
449
- 'namespace_labels' => {
450
- 'kubernetes_io/namespacetest' => 'somevalue'
526
+ 'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
527
+ 'namespace_labels' => {
528
+ 'kubernetes_io__namespacetest' => 'somevalue'
451
529
  },
452
- 'namespace_name' => 'default',
453
- 'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
454
- 'master_url' => 'https://localhost:8443',
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
- 'kubernetes_io/test' => 'somevalue'
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.use_cassette('kubernetes_docker_metadata_dotted_labels') do
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
- 'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
555
+ 'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
475
556
  },
476
557
  'kubernetes' => {
477
- 'host' => 'jimmi-redhat.localnet',
478
- 'pod_name' => 'fabric8-console-controller-98rqc',
479
- 'container_name' => 'fabric8-console-container',
480
- 'container_image' => 'fabric8/hawtio-kubernetes:latest',
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' => '898268c8-4a36-11e5-9d81-42010af0194c',
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' => 'default',
487
- 'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
488
- 'master_url' => 'https://localhost:8443',
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.use_cassette('kubernetes_docker_metadata') do
606
+ VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' }, { name: 'kubernetes_get_pod' },
607
+ { name: 'kubernetes_get_namespace_default' }]) do
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
- 'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
616
+ 'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
524
617
  },
525
618
  'kubernetes' => {
526
- 'host' => 'jimmi-redhat.localnet',
527
- 'pod_name' => 'fabric8-console-controller-98rqc',
528
- 'container_name' => 'fabric8-console-container',
529
- 'container_image' => 'fabric8/hawtio-kubernetes:latest',
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' => 'default',
532
- 'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
533
- 'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
534
- 'master_url' => 'https://localhost:8443',
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.use_cassette('metadata_with_namespace_id') do
646
+ VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' }, { name: 'kubernetes_get_pod' },
647
+ { name: 'kubernetes_get_namespace_default', options: { allow_playback_repeats: true } }]) do
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
- 'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
656
+ 'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
562
657
  },
563
658
  'kubernetes' => {
564
- 'host' => 'jimmi-redhat.localnet',
565
- 'pod_name' => 'fabric8-console-controller-98rqc',
566
- 'container_name' => 'fabric8-console-container',
567
- 'container_image' => 'fabric8/hawtio-kubernetes:latest',
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' => 'default',
570
- 'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
571
- 'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
572
- 'master_url' => 'https://localhost:8443',
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.use_cassette('metadata_from_tag_journald_and_kubernetes_fields') do
692
+ VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' }, { name: 'kubernetes_get_pod' },
693
+ { name: 'kubernetes_get_namespace_default' },
694
+ { name: 'metadata_from_tag_journald_and_kubernetes_fields' }]) do
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
- 'container_id' => 'e463bc0d3ae38f5c89d92dca49b30e049e899799920b79d4d5f705acbe82ba95'
702
+ 'container_id' => 'e463bc0d3ae38f5c89d92dca49b30e049e899799920b79d4d5f705acbe82ba95'
605
703
  },
606
704
  'kubernetes' => {
607
- 'host' => 'jimmi-redhat.localnet',
608
- 'pod_name' => 'k8s-pod-name',
609
- 'container_name' => 'k8s-container-name',
610
- 'container_image' => 'k8s-container-image:latest',
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' => 'k8s-namespace-name',
613
- 'namespace_id' => '8e0dc8fc-59f2-49f7-a3e2-ed0913e19d9f',
614
- 'pod_id' => 'ebabf749-5fcd-4750-a3f0-aedd89476da8',
615
- 'master_url' => 'https://localhost:8443',
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| ((key == 'kubernetes') || (key == 'docker')) ? 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.use_cassette('metadata_from_tag_and_journald_fields') do
738
+ VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' }, { name: 'kubernetes_get_pod' },
739
+ { name: 'kubernetes_get_namespace_default', options: { allow_playback_repeats: true } },
740
+ { name: 'metadata_from_tag_and_journald_fields' }]) do
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
- 'container_id' => '838350c64bacba968d39a30a50789b2795291fceca6ccbff55298671d46b0e3b'
749
+ 'container_id' => '838350c64bacba968d39a30a50789b2795291fceca6ccbff55298671d46b0e3b'
649
750
  },
650
751
  'kubernetes' => {
651
- 'host' => 'jimmi-redhat.localnet',
652
- 'pod_name' => 'journald-pod-name',
653
- 'container_name' => 'journald-container-name',
654
- 'container_image' => 'journald-container-image:latest',
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' => 'journald-namespace-name',
657
- 'namespace_id' => '8282888f-733f-4f23-a3d3-1fdfa3bdacf2',
658
- 'pod_id' => '5e1c1e27-b637-4e81-80b6-6d8a8c404d3b',
659
- 'master_url' => 'https://localhost:8443',
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| ((key == 'kubernetes') || (key == 'docker')) ? 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.use_cassette('metadata_from_tag_and_journald_fields') do
684
- es = emit_with_tag(tag, msg, '
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
- 'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
796
+ 'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
694
797
  },
695
798
  'kubernetes' => {
696
- 'host' => 'jimmi-redhat.localnet',
697
- 'pod_name' => 'fabric8-console-controller-98rqc',
698
- 'container_name' => 'fabric8-console-container',
699
- 'container_image' => 'fabric8/hawtio-kubernetes:latest',
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' => 'default',
702
- 'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
703
- 'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
704
- 'master_url' => 'https://localhost:8443',
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| ((key == 'kubernetes') || (key == 'docker')) ? 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.use_cassette('kubernetes_docker_metadata_annotations') do
716
- filtered = emit({},'
819
+ VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' },
820
+ { name: 'kubernetes_docker_metadata_annotations' },
821
+ { name: 'kubernetes_get_namespace_default' }]) do
822
+ filtered = emit({}, '
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
- 'docker' => {
724
- 'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
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
- 'kubernetes' => {
727
- 'host' => 'jimmi-redhat.localnet',
728
- 'pod_name' => 'fabric8-console-controller-98rqc',
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.use_cassette('kubernetes_docker_metadata') do
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
- 'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
879
+ 'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
767
880
  },
768
881
  'kubernetes' => {
769
- 'host' => 'jimmi-redhat.localnet',
770
- 'pod_name' => 'fabric8-console-controller-98rqc',
771
- 'container_name' => 'fabric8-console-container',
772
- 'container_image' => 'fabric8/hawtio-kubernetes:latest',
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' => 'default',
775
- 'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
776
- 'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
777
- 'master_url' => 'https://localhost:8443',
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.use_cassette('kubernetes_docker_metadata_annotations') do
789
- filtered = emit({},'
902
+ VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' },
903
+ { name: 'kubernetes_docker_metadata_annotations' },
904
+ { name: 'kubernetes_get_namespace_default' }]) do
905
+ filtered = emit({}, '
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
- 'docker' => {
797
- 'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
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
- 'kubernetes' => {
800
- 'host' => 'jimmi-redhat.localnet',
801
- 'pod_name' => 'fabric8-console-controller-98rqc',
802
- 'container_name' => 'fabric8-console-container',
803
- 'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
804
- 'namespace_name' => 'default',
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.use_cassette('kubernetes_docker_metadata_annotations') do
827
- filtered = emit({},'
943
+ VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' },
944
+ { name: 'kubernetes_docker_metadata_annotations' },
945
+ { name: 'kubernetes_get_namespace_default' }]) do
946
+ filtered = emit({}, '
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
- 'docker' => {
835
- 'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
836
- },
837
- 'kubernetes' => {
838
- 'host' => 'jimmi-redhat.localnet',
839
- 'pod_name' => 'fabric8-console-controller-98rqc',
840
- 'container_name' => 'fabric8-console-container',
841
- 'container_image' => 'fabric8/hawtio-kubernetes:latest',
842
- 'container_image_id' => 'docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303',
843
- 'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
844
- 'namespace_name' => 'default',
845
- 'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
846
- 'master_url' => 'https://localhost:8443',
847
- 'labels' => {
848
- 'component' => 'fabric8Console'
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.use_cassette('kubernetes_docker_metadata_annotations') do
983
+ VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' },
984
+ { name: 'kubernetes_docker_metadata_annotations' },
985
+ { name: 'kubernetes_get_namespace_default' }]) do
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.use_cassette('kubernetes_docker_metadata_annotations') do
1008
+ VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' },
1009
+ { name: 'kubernetes_docker_metadata_annotations' },
1010
+ { name: 'kubernetes_get_namespace_default' }]) do
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.use_cassette('kubernetes_docker_metadata') do
902
- entries = [[@time, {'time'=>'2015-05-08T09:22:01Z'}], [@time, {'time'=>'2015-05-08T09:22:01Z'}]]
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(DEFAULT_TAG, msgpack_stream)
913
- }
914
- filtered = d.filtered.map{|e| e.last}
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
- 'time'=>'2015-05-08T09:22:01Z',
918
- 'docker' => {
919
- 'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
920
- },
921
- 'kubernetes' => {
922
- 'host' => 'jimmi-redhat.localnet',
923
- 'pod_name' => 'fabric8-console-controller-98rqc',
924
- 'container_name' => 'fabric8-console-container',
925
- 'container_image' => 'fabric8/hawtio-kubernetes:latest',
926
- 'container_image_id' => 'docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303',
927
- 'namespace_name' => 'default',
928
- 'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
929
- 'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
930
- 'master_url' => 'https://localhost:8443',
931
- 'labels' => {
932
- 'component' => 'fabric8Console'
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