fluent-plugin-kubernetes_metadata_filter 2.5.0 → 3.2.0

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