fluent-plugin-kubernetes_metadata_filter 2.1.4 → 2.9.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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