fluent-plugin-kubernetes_metadata_filter 2.5.0 → 2.7.2

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.
@@ -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
@@ -38,12 +35,17 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
38
35
  end
39
36
 
40
37
  sub_test_case 'configure' do
41
-
42
38
  test 'check default' do
43
39
  d = create_driver
44
40
  assert_equal(1000, d.instance.cache_size)
45
41
  end
46
42
 
43
+ test 'check test_api_adapter' do
44
+ d = create_driver('test_api_adapter KubernetesMetadata::TestApiAdapter')
45
+ assert_equal('KubernetesMetadata::TestApiAdapter', d.instance.test_api_adapter)
46
+ end
47
+
48
+
47
49
  test 'kubernetes url' do
48
50
  VCR.use_cassette('valid_kubernetes_api_server') do
49
51
  d = create_driver('
@@ -82,94 +84,89 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
82
84
 
83
85
  test 'service account credentials' do
84
86
  VCR.use_cassette('valid_kubernetes_api_server') do
85
- begin
86
- ENV['KUBERNETES_SERVICE_HOST'] = 'localhost'
87
- ENV['KUBERNETES_SERVICE_PORT'] = '8443'
87
+ ENV['KUBERNETES_SERVICE_HOST'] = 'localhost'
88
+ ENV['KUBERNETES_SERVICE_PORT'] = '8443'
88
89
 
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)
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)
93
94
 
94
- File.open(expected_cert_path, "w") {}
95
- File.open(expected_token_path, "w") {}
95
+ File.open(expected_cert_path, 'w')
96
+ File.open(expected_token_path, 'w')
96
97
 
97
- d = create_driver("
98
+ d = create_driver("
98
99
  watch false
99
100
  secret_dir #{dir}
100
101
  ")
101
102
 
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
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)
109
106
  end
107
+ ensure
108
+ ENV['KUBERNETES_SERVICE_HOST'] = nil
109
+ ENV['KUBERNETES_SERVICE_PORT'] = nil
110
110
  end
111
111
  end
112
112
 
113
113
  test 'service account credential files are tested for existence' do
114
114
  VCR.use_cassette('valid_kubernetes_api_server') do
115
- begin
116
- ENV['KUBERNETES_SERVICE_HOST'] = 'localhost'
117
- ENV['KUBERNETES_SERVICE_PORT'] = '8443'
115
+ ENV['KUBERNETES_SERVICE_HOST'] = 'localhost'
116
+ ENV['KUBERNETES_SERVICE_PORT'] = '8443'
118
117
 
119
- Dir.mktmpdir { |dir|
120
- d = create_driver("
118
+ Dir.mktmpdir do |dir|
119
+ d = create_driver("
121
120
  watch false
122
121
  secret_dir #{dir}
123
122
  ")
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
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)
131
126
  end
127
+ ensure
128
+ ENV['KUBERNETES_SERVICE_HOST'] = nil
129
+ ENV['KUBERNETES_SERVICE_PORT'] = nil
132
130
  end
133
131
  end
134
132
  end
135
133
 
136
- sub_test_case 'filter_stream' do
137
-
138
- def emit(msg={}, config='
134
+ sub_test_case 'filter' do
135
+ def emit(msg = {}, config = '
139
136
  kubernetes_url https://localhost:8443
140
137
  watch false
141
138
  cache_size 1
142
139
  ', d: nil)
143
140
  d = create_driver(config) if d.nil?
144
- d.run(default_tag: DEFAULT_TAG) {
141
+ d.run(default_tag: DEFAULT_TAG) do
145
142
  d.feed(@time, msg)
146
- }
147
- d.filtered.map{|e| e.last}
143
+ end
144
+ d.filtered.map(&:last)
148
145
  end
149
146
 
150
- def emit_with_tag(tag, msg={}, config='
147
+ def emit_with_tag(tag, msg = {}, config = '
151
148
  kubernetes_url https://localhost:8443
152
149
  watch false
153
150
  cache_size 1
154
151
  ')
155
152
  d = create_driver(config)
156
- d.run(default_tag: tag) {
153
+ d.run(default_tag: tag) do
157
154
  d.feed(@time, msg)
158
- }
159
- d.filtered.map{|e| e.last}
155
+ end
156
+ d.filtered.map(&:last)
160
157
  end
161
158
 
162
159
  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)
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)
169
166
  end
170
167
 
171
168
  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
169
+ VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' }]) do
173
170
  driver = create_driver('
174
171
  kubernetes_url https://localhost:8443
175
172
  watch false
@@ -177,18 +174,18 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
177
174
  ')
178
175
  stub_request(:any, 'https://localhost:8443/api/v1/namespaces/default/pods/fabric8-console-controller-98rqc').to_raise(SocketError.new('error from pod fetch'))
179
176
  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)
177
+ filtered = emit({ 'time' => '2015-05-08T09:22:01Z' }, '', d: driver)
181
178
  expected_kube_metadata = {
182
- 'time'=>'2015-05-08T09:22:01Z',
179
+ 'time' => '2015-05-08T09:22:01Z',
183
180
  'docker' => {
184
- 'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
181
+ 'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
185
182
  },
186
183
  'kubernetes' => {
187
- 'pod_name' => 'fabric8-console-controller-98rqc',
184
+ 'pod_name' => 'fabric8-console-controller-98rqc',
188
185
  'container_name' => 'fabric8-console-container',
189
- "namespace_id"=>"orphaned",
186
+ 'namespace_id' => 'orphaned',
190
187
  'namespace_name' => '.orphaned',
191
- "orphaned_namespace"=>"default"
188
+ 'orphaned_namespace' => 'default'
192
189
  }
193
190
  }
194
191
  assert_equal(expected_kube_metadata, filtered[0])
@@ -196,7 +193,7 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
196
193
  end
197
194
 
198
195
  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
196
+ VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' }]) do
200
197
  driver = create_driver('
201
198
  kubernetes_url https://localhost:8443
202
199
  watch false
@@ -204,23 +201,23 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
204
201
  ')
205
202
  cache = driver.instance.instance_variable_get(:@id_cache)
206
203
  cache['49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'] = {
207
- :pod_id =>'c76927af-f563-11e4-b32d-54ee7527188d',
208
- :namespace_id =>'898268c8-4a36-11e5-9d81-42010af0194c'
204
+ pod_id: 'c76927af-f563-11e4-b32d-54ee7527188d',
205
+ namespace_id: '898268c8-4a36-11e5-9d81-42010af0194c'
209
206
  }
210
207
  stub_request(:any, 'https://localhost:8443/api/v1/namespaces/default/pods/fabric8-console-controller-98rqc').to_timeout
211
208
  stub_request(:any, 'https://localhost:8443/api/v1/namespaces/default').to_timeout
212
- filtered = emit({'time'=>'2015-05-08T09:22:01Z'}, '', d:driver)
209
+ filtered = emit({ 'time' => '2015-05-08T09:22:01Z' }, '', d: driver)
213
210
  expected_kube_metadata = {
214
- 'time'=>'2015-05-08T09:22:01Z',
211
+ 'time' => '2015-05-08T09:22:01Z',
215
212
  'docker' => {
216
- 'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
213
+ 'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
217
214
  },
218
215
  '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',
216
+ 'pod_name' => 'fabric8-console-controller-98rqc',
217
+ 'container_name' => 'fabric8-console-container',
218
+ 'namespace_name' => 'default',
219
+ 'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
220
+ 'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d'
224
221
  }
225
222
  }
226
223
 
@@ -229,7 +226,7 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
229
226
  end
230
227
 
231
228
  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
229
+ VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' }, { name: 'kubernetes_get_pod' }, { name: 'kubernetes_get_namespace_default' }]) do
233
230
  driver = create_driver('
234
231
  kubernetes_url https://localhost:8443
235
232
  watch false
@@ -237,25 +234,26 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
237
234
  ')
238
235
  cache = driver.instance.instance_variable_get(:@id_cache)
239
236
  cache['49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'] = {
240
- :pod_id =>'c76927af-f563-11e4-b32d-54ee7527188d',
241
- :namespace_id =>'898268c8-4a36-11e5-9d81-42010af0194c'
237
+ pod_id: 'c76927af-f563-11e4-b32d-54ee7527188d',
238
+ namespace_id: '898268c8-4a36-11e5-9d81-42010af0194c'
242
239
  }
243
- filtered = emit({'time'=>'2015-05-08T09:22:01Z'}, '', d:driver)
240
+ filtered = emit({ 'time' => '2015-05-08T09:22:01Z' }, '', d: driver)
244
241
  expected_kube_metadata = {
245
- 'time'=>'2015-05-08T09:22:01Z',
242
+ 'time' => '2015-05-08T09:22:01Z',
246
243
  'docker' => {
247
- 'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
244
+ 'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
248
245
  },
249
246
  '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',
247
+ 'host' => 'jimmi-redhat.localnet',
248
+ 'pod_name' => 'fabric8-console-controller-98rqc',
249
+ 'container_name' => 'fabric8-console-container',
250
+ 'container_image' => 'fabric8/hawtio-kubernetes:latest',
254
251
  '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',
252
+ 'namespace_name' => 'default',
253
+ 'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
254
+ 'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
255
+ 'pod_ip' => '172.17.0.8',
256
+ 'master_url' => 'https://localhost:8443',
259
257
  'labels' => {
260
258
  'component' => 'fabric8Console'
261
259
  }
@@ -267,23 +265,24 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
267
265
  end
268
266
 
269
267
  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'})
268
+ VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' }, { name: 'kubernetes_get_pod' }, { name: 'kubernetes_get_namespace_default' }]) do
269
+ filtered = emit({ 'time' => '2015-05-08T09:22:01Z' })
272
270
  expected_kube_metadata = {
273
- 'time'=>'2015-05-08T09:22:01Z',
271
+ 'time' => '2015-05-08T09:22:01Z',
274
272
  'docker' => {
275
- 'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
273
+ 'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
276
274
  },
277
275
  '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',
276
+ 'host' => 'jimmi-redhat.localnet',
277
+ 'pod_name' => 'fabric8-console-controller-98rqc',
278
+ 'container_name' => 'fabric8-console-container',
279
+ 'container_image' => 'fabric8/hawtio-kubernetes:latest',
282
280
  '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',
281
+ 'namespace_name' => 'default',
282
+ 'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
283
+ 'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
284
+ 'pod_ip' => '172.17.0.8',
285
+ 'master_url' => 'https://localhost:8443',
287
286
  'labels' => {
288
287
  'component' => 'fabric8Console'
289
288
  }
@@ -295,8 +294,8 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
295
294
  end
296
295
 
297
296
  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
297
+ VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' }, { name: 'kubernetes_get_pod' },
298
+ { name: 'kubernetes_get_namespace_default', options: { allow_playback_repeats: true } }]) do
300
299
  filtered = emit({}, '
301
300
  kubernetes_url https://localhost:8443
302
301
  watch false
@@ -304,18 +303,19 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
304
303
  ')
305
304
  expected_kube_metadata = {
306
305
  'docker' => {
307
- 'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
306
+ 'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
308
307
  },
309
308
  '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',
309
+ 'host' => 'jimmi-redhat.localnet',
310
+ 'pod_name' => 'fabric8-console-controller-98rqc',
311
+ 'container_name' => 'fabric8-console-container',
312
+ 'container_image' => 'fabric8/hawtio-kubernetes:latest',
314
313
  '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',
314
+ 'namespace_name' => 'default',
315
+ 'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
316
+ 'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
317
+ 'pod_ip' => '172.17.0.8',
318
+ 'master_url' => 'https://localhost:8443',
319
319
  'labels' => {
320
320
  'component' => 'fabric8Console'
321
321
  }
@@ -326,8 +326,8 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
326
326
  end
327
327
 
328
328
  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
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
331
331
  filtered = emit({}, '
332
332
  kubernetes_url https://localhost:8443
333
333
  verify_ssl false
@@ -339,15 +339,16 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
339
339
  'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
340
340
  },
341
341
  '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',
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',
346
346
  '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',
347
+ 'namespace_name' => 'default',
348
+ 'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
349
+ 'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
350
+ 'pod_ip' => '172.17.0.8',
351
+ 'master_url' => 'https://localhost:8443',
351
352
  'labels' => {
352
353
  'component' => 'fabric8Console'
353
354
  }
@@ -360,14 +361,14 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
360
361
  test 'with docker & kubernetes metadata but no configured api server' do
361
362
  filtered = emit({}, '')
362
363
  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
- }
364
+ 'docker' => {
365
+ 'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
366
+ },
367
+ 'kubernetes' => {
368
+ 'pod_name' => 'fabric8-console-controller-98rqc',
369
+ 'container_name' => 'fabric8-console-container',
370
+ 'namespace_name' => 'default'
371
+ }
371
372
  }
372
373
  assert_equal(expected_kube_metadata, filtered[0])
373
374
  end
@@ -380,17 +381,17 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
380
381
  )
381
382
  stub_request(:any, 'https://localhost:8443/api/v1/namespaces/default/pods/fabric8-console-controller-98rqc').to_timeout
382
383
  stub_request(:any, 'https://localhost:8443/api/v1/namespaces/default').to_timeout
383
- filtered = emit()
384
+ filtered = emit
384
385
  expected_kube_metadata = {
385
386
  'docker' => {
386
387
  'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
387
388
  },
388
389
  'kubernetes' => {
389
- 'pod_name' => 'fabric8-console-controller-98rqc',
390
- 'container_name' => 'fabric8-console-container',
391
- 'namespace_name' => '.orphaned',
390
+ 'pod_name' => 'fabric8-console-controller-98rqc',
391
+ 'container_name' => 'fabric8-console-container',
392
+ 'namespace_name' => '.orphaned',
392
393
  'orphaned_namespace' => 'default',
393
- 'namespace_id' => 'orphaned'
394
+ 'namespace_id' => 'orphaned'
394
395
  }
395
396
  }
396
397
  assert_equal(expected_kube_metadata, filtered[0])
@@ -409,9 +410,9 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
409
410
  'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
410
411
  },
411
412
  'kubernetes' => {
412
- 'pod_name' => 'fabric8-console-controller.98rqc',
413
- 'container_name' => 'fabric8-console-container',
414
- 'namespace_name' => 'default'
413
+ 'pod_name' => 'fabric8-console-controller.98rqc',
414
+ 'container_name' => 'fabric8-console-container',
415
+ 'namespace_name' => 'default'
415
416
  }
416
417
  }
417
418
  assert_equal(expected_kube_metadata, filtered[0])
@@ -419,21 +420,21 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
419
420
 
420
421
  test 'with docker metadata, non-kubernetes' do
421
422
  filtered = emit_with_tag('non-kubernetes', {}, '')
422
- assert_false(filtered[0].has_key?(:kubernetes))
423
+ assert_false(filtered[0].key?(:kubernetes))
423
424
  end
424
425
 
425
426
  test 'ignores invalid json in log field' do
426
427
  json_log = "{'foo':123}"
427
428
  msg = {
428
- 'log' => json_log
429
+ 'log' => json_log
429
430
  }
430
431
  filtered = emit_with_tag('non-kubernetes', msg, '')
431
432
  assert_equal(msg, filtered[0])
432
433
  end
433
434
 
434
435
  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
436
+ VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' },
437
+ { name: 'kubernetes_docker_metadata_dotted_labels' }]) do
437
438
  filtered = emit({}, '
438
439
  kubernetes_url https://localhost:8443
439
440
  watch false
@@ -441,21 +442,22 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
441
442
  ')
442
443
  expected_kube_metadata = {
443
444
  'docker' => {
444
- 'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
445
+ 'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
445
446
  },
446
447
  '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',
448
+ 'host' => 'jimmi-redhat.localnet',
449
+ 'pod_name' => 'fabric8-console-controller-98rqc',
450
+ 'container_name' => 'fabric8-console-container',
451
+ 'container_image' => 'fabric8/hawtio-kubernetes:latest',
451
452
  'container_image_id' => 'docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303',
452
- 'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
453
- 'namespace_labels' => {
453
+ 'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
454
+ 'namespace_labels' => {
454
455
  'kubernetes_io/namespacetest' => 'somevalue'
455
456
  },
456
- 'namespace_name' => 'default',
457
- 'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
458
- 'master_url' => 'https://localhost:8443',
457
+ 'namespace_name' => 'default',
458
+ 'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
459
+ 'pod_ip' => '172.17.0.8',
460
+ 'master_url' => 'https://localhost:8443',
459
461
  'labels' => {
460
462
  'kubernetes_io/test' => 'somevalue'
461
463
  }
@@ -466,8 +468,8 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
466
468
  end
467
469
 
468
470
  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
+ VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' },
472
+ { name: 'kubernetes_docker_metadata_dotted_labels' }]) do
471
473
  filtered = emit({}, '
472
474
  kubernetes_url https://localhost:8443
473
475
  watch false
@@ -476,21 +478,22 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
476
478
  ')
477
479
  expected_kube_metadata = {
478
480
  'docker' => {
479
- 'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
481
+ 'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
480
482
  },
481
483
  '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',
484
+ 'host' => 'jimmi-redhat.localnet',
485
+ 'pod_name' => 'fabric8-console-controller-98rqc',
486
+ 'container_name' => 'fabric8-console-container',
487
+ 'container_image' => 'fabric8/hawtio-kubernetes:latest',
486
488
  'container_image_id' => 'docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303',
487
- 'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
488
- 'namespace_labels' => {
489
+ 'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
490
+ 'namespace_labels' => {
489
491
  'kubernetes.io/namespacetest' => 'somevalue'
490
492
  },
491
- 'namespace_name' => 'default',
492
- 'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
493
- 'master_url' => 'https://localhost:8443',
493
+ 'namespace_name' => 'default',
494
+ 'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
495
+ 'pod_ip' => '172.17.0.8',
496
+ 'master_url' => 'https://localhost:8443',
494
497
  'labels' => {
495
498
  'kubernetes.io/test' => 'somevalue'
496
499
  }
@@ -516,8 +519,8 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
516
519
  'CONTAINER_ID_FULL' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459',
517
520
  'randomfield' => 'randomvalue'
518
521
  }
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
522
+ VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' }, { name: 'kubernetes_get_pod' },
523
+ { name: 'kubernetes_get_namespace_default' }]) do
521
524
  filtered = emit_with_tag(tag, msg, '
522
525
  kubernetes_url https://localhost:8443
523
526
  watch false
@@ -526,18 +529,19 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
526
529
  ')
527
530
  expected_kube_metadata = {
528
531
  'docker' => {
529
- 'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
532
+ 'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
530
533
  },
531
534
  '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',
535
+ 'host' => 'jimmi-redhat.localnet',
536
+ 'pod_name' => 'fabric8-console-controller-98rqc',
537
+ 'container_name' => 'fabric8-console-container',
538
+ 'container_image' => 'fabric8/hawtio-kubernetes:latest',
536
539
  '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',
540
+ 'namespace_name' => 'default',
541
+ 'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
542
+ 'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
543
+ 'pod_ip' => '172.17.0.8',
544
+ 'master_url' => 'https://localhost:8443',
541
545
  'labels' => {
542
546
  'component' => 'fabric8Console'
543
547
  }
@@ -555,8 +559,8 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
555
559
  'CONTAINER_ID_FULL' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459',
556
560
  'randomfield' => 'randomvalue'
557
561
  }
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
562
+ VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' }, { name: 'kubernetes_get_pod' },
563
+ { name: 'kubernetes_get_namespace_default', options: { allow_playback_repeats: true } }]) do
560
564
  filtered = emit_with_tag(tag, msg, '
561
565
  kubernetes_url https://localhost:8443
562
566
  watch false
@@ -565,18 +569,19 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
565
569
  ')
566
570
  expected_kube_metadata = {
567
571
  'docker' => {
568
- 'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
572
+ 'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
569
573
  },
570
574
  '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',
575
+ 'host' => 'jimmi-redhat.localnet',
576
+ 'pod_name' => 'fabric8-console-controller-98rqc',
577
+ 'container_name' => 'fabric8-console-container',
578
+ 'container_image' => 'fabric8/hawtio-kubernetes:latest',
575
579
  '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',
580
+ 'namespace_name' => 'default',
581
+ 'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
582
+ 'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
583
+ 'pod_ip' => '172.17.0.8',
584
+ 'master_url' => 'https://localhost:8443',
580
585
  'labels' => {
581
586
  'component' => 'fabric8Console'
582
587
  }
@@ -597,12 +602,12 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
597
602
  'pod_name' => 'k8s-pod-name',
598
603
  'container_name' => 'k8s-container-name'
599
604
  },
600
- 'docker' => {'container_id' => 'e463bc0d3ae38f5c89d92dca49b30e049e899799920b79d4d5f705acbe82ba95'},
605
+ 'docker' => { 'container_id' => 'e463bc0d3ae38f5c89d92dca49b30e049e899799920b79d4d5f705acbe82ba95' },
601
606
  'randomfield' => 'randomvalue'
602
607
  }
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
608
+ VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' }, { name: 'kubernetes_get_pod' },
609
+ { name: 'kubernetes_get_namespace_default' },
610
+ { name: 'metadata_from_tag_journald_and_kubernetes_fields' }]) do
606
611
  es = emit_with_tag(tag, msg, '
607
612
  kubernetes_url https://localhost:8443
608
613
  watch false
@@ -610,23 +615,24 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
610
615
  ')
611
616
  expected_kube_metadata = {
612
617
  'docker' => {
613
- 'container_id' => 'e463bc0d3ae38f5c89d92dca49b30e049e899799920b79d4d5f705acbe82ba95'
618
+ 'container_id' => 'e463bc0d3ae38f5c89d92dca49b30e049e899799920b79d4d5f705acbe82ba95'
614
619
  },
615
620
  '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',
621
+ 'host' => 'jimmi-redhat.localnet',
622
+ 'pod_name' => 'k8s-pod-name',
623
+ 'container_name' => 'k8s-container-name',
624
+ 'container_image' => 'k8s-container-image:latest',
620
625
  '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',
626
+ 'namespace_name' => 'k8s-namespace-name',
627
+ 'namespace_id' => '8e0dc8fc-59f2-49f7-a3e2-ed0913e19d9f',
628
+ 'pod_id' => 'ebabf749-5fcd-4750-a3f0-aedd89476da8',
629
+ 'pod_ip' => '172.17.0.8',
630
+ 'master_url' => 'https://localhost:8443',
625
631
  'labels' => {
626
632
  'component' => 'k8s-test'
627
633
  }
628
634
  }
629
- }.merge(msg) {|key,oldval,newval| ((key == 'kubernetes') || (key == 'docker')) ? oldval : newval}
635
+ }.merge(msg) { |key, oldval, newval| (key == 'kubernetes') || (key == 'docker') ? oldval : newval }
630
636
  assert_equal(expected_kube_metadata, es[0])
631
637
  end
632
638
  end
@@ -642,12 +648,12 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
642
648
  'pod_name' => 'k8s-pod-name',
643
649
  'container_name' => 'k8s-container-name'
644
650
  },
645
- 'docker' => {'container_id' => 'e463bc0d3ae38f5c89d92dca49b30e049e899799920b79d4d5f705acbe82ba95'},
651
+ 'docker' => { 'container_id' => 'e463bc0d3ae38f5c89d92dca49b30e049e899799920b79d4d5f705acbe82ba95' },
646
652
  'randomfield' => 'randomvalue'
647
653
  }
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
654
+ VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' }, { name: 'kubernetes_get_pod' },
655
+ { name: 'kubernetes_get_namespace_default', options: { allow_playback_repeats: true } },
656
+ { name: 'metadata_from_tag_and_journald_fields' }]) do
651
657
  es = emit_with_tag(tag, msg, '
652
658
  kubernetes_url https://localhost:8443
653
659
  watch false
@@ -656,23 +662,24 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
656
662
  ')
657
663
  expected_kube_metadata = {
658
664
  'docker' => {
659
- 'container_id' => '838350c64bacba968d39a30a50789b2795291fceca6ccbff55298671d46b0e3b'
665
+ 'container_id' => '838350c64bacba968d39a30a50789b2795291fceca6ccbff55298671d46b0e3b'
660
666
  },
661
667
  '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',
668
+ 'host' => 'jimmi-redhat.localnet',
669
+ 'pod_name' => 'journald-pod-name',
670
+ 'container_name' => 'journald-container-name',
671
+ 'container_image' => 'journald-container-image:latest',
666
672
  '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',
673
+ 'namespace_name' => 'journald-namespace-name',
674
+ 'namespace_id' => '8282888f-733f-4f23-a3d3-1fdfa3bdacf2',
675
+ 'pod_id' => '5e1c1e27-b637-4e81-80b6-6d8a8c404d3b',
676
+ 'pod_ip' => '172.17.0.8',
677
+ 'master_url' => 'https://localhost:8443',
671
678
  'labels' => {
672
679
  'component' => 'journald-test'
673
680
  }
674
681
  }
675
- }.merge(msg) {|key,oldval,newval| ((key == 'kubernetes') || (key == 'docker')) ? oldval : newval}
682
+ }.merge(msg) { |key, oldval, newval| (key == 'kubernetes') || (key == 'docker') ? oldval : newval }
676
683
  assert_equal(expected_kube_metadata, es[0])
677
684
  end
678
685
  end
@@ -688,12 +695,12 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
688
695
  'pod_name' => 'k8s-pod-name',
689
696
  'container_name' => 'k8s-container-name'
690
697
  },
691
- 'docker' => {'container_id' => 'e463bc0d3ae38f5c89d92dca49b30e049e899799920b79d4d5f705acbe82ba95'},
698
+ 'docker' => { 'container_id' => 'e463bc0d3ae38f5c89d92dca49b30e049e899799920b79d4d5f705acbe82ba95' },
692
699
  'randomfield' => 'randomvalue'
693
700
  }
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
701
+ VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' }, { name: 'kubernetes_get_pod' },
702
+ { name: 'kubernetes_get_namespace_default', options: { allow_playback_repeats: true } },
703
+ { name: 'metadata_from_tag_and_journald_fields' }]) do
697
704
  es = emit_with_tag(tag, msg, '
698
705
  kubernetes_url https://localhost:8443
699
706
  watch false
@@ -703,59 +710,61 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
703
710
  ')
704
711
  expected_kube_metadata = {
705
712
  'docker' => {
706
- 'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
713
+ 'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
707
714
  },
708
715
  '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',
716
+ 'host' => 'jimmi-redhat.localnet',
717
+ 'pod_name' => 'fabric8-console-controller-98rqc',
718
+ 'container_name' => 'fabric8-console-container',
719
+ 'container_image' => 'fabric8/hawtio-kubernetes:latest',
713
720
  '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',
721
+ 'namespace_name' => 'default',
722
+ 'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
723
+ 'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
724
+ 'pod_ip' => '172.17.0.8',
725
+ 'master_url' => 'https://localhost:8443',
718
726
  'labels' => {
719
727
  'component' => 'fabric8Console'
720
728
  }
721
729
  }
722
- }.merge(msg) {|key,oldval,newval| ((key == 'kubernetes') || (key == 'docker')) ? oldval : newval}
730
+ }.merge(msg) { |key, oldval, newval| (key == 'kubernetes') || (key == 'docker') ? oldval : newval }
723
731
  assert_equal(expected_kube_metadata, es[0])
724
732
  end
725
733
  end
726
734
 
727
735
  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({},'
736
+ VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' },
737
+ { name: 'kubernetes_docker_metadata_annotations' },
738
+ { name: 'kubernetes_get_namespace_default' }]) do
739
+ filtered = emit({}, '
732
740
  kubernetes_url https://localhost:8443
733
741
  watch false
734
742
  cache_size 1
735
743
  annotation_match [ "^custom.+", "two"]
736
744
  ')
737
745
  expected_kube_metadata = {
738
- 'docker' => {
739
- 'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
746
+ 'docker' => {
747
+ 'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
748
+ },
749
+ 'kubernetes' => {
750
+ 'host' => 'jimmi-redhat.localnet',
751
+ 'pod_name' => 'fabric8-console-controller-98rqc',
752
+ 'container_name' => 'fabric8-console-container',
753
+ 'container_image' => 'fabric8/hawtio-kubernetes:latest',
754
+ 'container_image_id' => 'docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303',
755
+ 'namespace_name' => 'default',
756
+ 'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
757
+ 'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
758
+ 'pod_ip' => '172.17.0.8',
759
+ 'master_url' => 'https://localhost:8443',
760
+ 'labels' => {
761
+ 'component' => 'fabric8Console'
740
762
  },
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
- }
763
+ 'annotations' => {
764
+ 'custom_field1' => 'hello_kitty',
765
+ 'field_two' => 'value'
758
766
  }
767
+ }
759
768
  }
760
769
  assert_equal(expected_kube_metadata, filtered[0])
761
770
  end
@@ -769,9 +778,13 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
769
778
  'CONTAINER_ID_FULL' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459',
770
779
  'randomfield' => 'randomvalue'
771
780
  }
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
781
+ VCR.use_cassettes([
782
+ { name: 'valid_kubernetes_api_server' },
783
+ { name: 'kubernetes_get_api_v1' },
784
+ { name: 'kubernetes_get_pod' },
785
+ { name: 'kubernetes_get_namespace_default' },
786
+ { name: 'metadata_from_tag_and_journald_fields' }
787
+ ]) do
775
788
  filtered = emit_with_tag(tag, msg, '
776
789
  kubernetes_url https://localhost:8443
777
790
  watch false
@@ -780,18 +793,19 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
780
793
  ')
781
794
  expected_kube_metadata = {
782
795
  'docker' => {
783
- 'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
796
+ 'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
784
797
  },
785
798
  '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',
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',
790
803
  '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',
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',
795
809
  'labels' => {
796
810
  'component' => 'fabric8Console'
797
811
  }
@@ -802,77 +816,80 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
802
816
  end
803
817
 
804
818
  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({},'
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({}, '
809
823
  kubernetes_url https://localhost:8443
810
824
  watch false
811
825
  cache_size 1
812
826
  annotation_match [ "^custom.+", "two", "workspace*"]
813
827
  ')
814
828
  expected_kube_metadata = {
815
- 'docker' => {
816
- '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
+ 'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
837
+ 'namespace_name' => 'default',
838
+ 'container_image' => 'fabric8/hawtio-kubernetes:latest',
839
+ 'container_image_id' => 'docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303',
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'
817
845
  },
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
- }
846
+ 'annotations' => {
847
+ 'custom_field1' => 'hello_kitty',
848
+ 'field_two' => 'value'
849
+ },
850
+ 'namespace_annotations' => {
851
+ 'workspaceId' => 'myWorkspaceName'
838
852
  }
853
+ }
839
854
  }
840
855
  assert_equal(expected_kube_metadata, filtered[0])
841
856
  end
842
857
  end
843
858
 
844
859
  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({},'
860
+ VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' },
861
+ { name: 'kubernetes_docker_metadata_annotations' },
862
+ { name: 'kubernetes_get_namespace_default' }]) do
863
+ filtered = emit({}, '
849
864
  kubernetes_url https://localhost:8443
850
865
  watch false
851
866
  cache_size 1
852
867
  annotation_match [ "noMatch*"]
853
868
  ')
854
869
  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
- }
870
+ 'docker' => {
871
+ 'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
872
+ },
873
+ 'kubernetes' => {
874
+ 'host' => 'jimmi-redhat.localnet',
875
+ 'pod_name' => 'fabric8-console-controller-98rqc',
876
+ 'container_name' => 'fabric8-console-container',
877
+ 'container_image' => 'fabric8/hawtio-kubernetes:latest',
878
+ 'container_image_id' => 'docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303',
879
+ 'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
880
+ 'namespace_name' => 'default',
881
+ 'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
882
+ 'pod_ip' => '172.17.0.8',
883
+ 'master_url' => 'https://localhost:8443',
884
+ 'labels' => {
885
+ 'component' => 'fabric8Console'
871
886
  }
887
+ }
872
888
  }
873
889
  assert_equal(expected_kube_metadata, filtered[0])
874
890
  end
875
891
  end
892
+
876
893
  test 'with CONTAINER_NAME that does not match' do
877
894
  tag = 'var.log.containers.junk4_junk5_junk6-49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed450.log'
878
895
  msg = {
@@ -880,9 +897,9 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
880
897
  'CONTAINER_ID_FULL' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459',
881
898
  'randomfield' => 'randomvalue'
882
899
  }
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
900
+ VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' },
901
+ { name: 'kubernetes_docker_metadata_annotations' },
902
+ { name: 'kubernetes_get_namespace_default' }]) do
886
903
  filtered = emit_with_tag(tag, msg, '
887
904
  kubernetes_url https://localhost:8443
888
905
  watch false
@@ -897,6 +914,7 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
897
914
  assert_equal(expected_kube_metadata, filtered[0])
898
915
  end
899
916
  end
917
+
900
918
  test 'with CONTAINER_NAME starts with k8s_ that does not match' do
901
919
  tag = 'var.log.containers.junk4_junk5_junk6-49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed450.log'
902
920
  msg = {
@@ -904,9 +922,9 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
904
922
  'CONTAINER_ID_FULL' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459',
905
923
  'randomfield' => 'randomvalue'
906
924
  }
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
925
+ VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' },
926
+ { name: 'kubernetes_docker_metadata_annotations' },
927
+ { name: 'kubernetes_get_namespace_default' }]) do
910
928
  filtered = emit_with_tag(tag, msg, '
911
929
  kubernetes_url https://localhost:8443
912
930
  watch false
@@ -923,10 +941,10 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
923
941
  end
924
942
 
925
943
  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'}]]
944
+ VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' },
945
+ { name: 'kubernetes_get_pod' },
946
+ { name: 'kubernetes_get_namespace_default' }]) do
947
+ entries = [[@time, { 'time' => '2015-05-08T09:22:01Z' }], [@time, { 'time' => '2015-05-08T09:22:01Z' }]]
930
948
  array_stream = Fluent::ArrayEventStream.new(entries)
931
949
  msgpack_stream = Fluent::MessagePackEventStream.new(array_stream.to_msgpack_stream)
932
950
 
@@ -935,30 +953,31 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
935
953
  watch false
936
954
  cache_size 1
937
955
  ')
938
- d.run {
956
+ d.run do
939
957
  d.feed(DEFAULT_TAG, msgpack_stream)
940
- }
941
- filtered = d.filtered.map{|e| e.last}
958
+ end
959
+ filtered = d.filtered.map(&:last)
942
960
 
943
961
  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
- }
962
+ 'time' => '2015-05-08T09:22:01Z',
963
+ 'docker' => {
964
+ 'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
965
+ },
966
+ 'kubernetes' => {
967
+ 'host' => 'jimmi-redhat.localnet',
968
+ 'pod_name' => 'fabric8-console-controller-98rqc',
969
+ 'container_name' => 'fabric8-console-container',
970
+ 'container_image' => 'fabric8/hawtio-kubernetes:latest',
971
+ 'container_image_id' => 'docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303',
972
+ 'namespace_name' => 'default',
973
+ 'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
974
+ 'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
975
+ 'pod_ip' => '172.17.0.8',
976
+ 'master_url' => 'https://localhost:8443',
977
+ 'labels' => {
978
+ 'component' => 'fabric8Console'
961
979
  }
980
+ }
962
981
  }
963
982
 
964
983
  assert_equal(expected_kube_metadata, filtered[0])
@@ -967,9 +986,9 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
967
986
  end
968
987
 
969
988
  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({},'
989
+ VCR.use_cassettes([{ name: 'valid_kubernetes_api_server' }, { name: 'kubernetes_get_api_v1' }, { name: 'kubernetes_get_pod' },
990
+ { name: 'kubernetes_get_namespace_default' }]) do
991
+ filtered = emit({}, '
973
992
  kubernetes_url https://localhost:8443
974
993
  watch false
975
994
  cache_size 1
@@ -979,16 +998,17 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
979
998
  skip_namespace_metadata true
980
999
  ')
981
1000
  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
- }
1001
+ 'docker' => {
1002
+ 'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
1003
+ },
1004
+ 'kubernetes' => {
1005
+ 'host' => 'jimmi-redhat.localnet',
1006
+ 'pod_name' => 'fabric8-console-controller-98rqc',
1007
+ 'container_name' => 'fabric8-console-container',
1008
+ 'namespace_name' => 'default',
1009
+ 'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
1010
+ 'pod_ip' => '172.17.0.8'
1011
+ }
992
1012
  }
993
1013
 
994
1014
  assert_equal(expected_kube_metadata, filtered[0])