fluent-plugin-kubernetes_metadata_filter 0.14.0 → 0.15.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 15bcd153a6de3bae669ee6b158de71aa51e40b83
4
- data.tar.gz: 9e9e0267bcef78c7624c8f04590c0693c049542a
3
+ metadata.gz: 247710a5a22705fe46717e612a13998857661dc9
4
+ data.tar.gz: 419da7d1297da104e6802110ad95df22608e5c41
5
5
  SHA512:
6
- metadata.gz: 93c074fe1d32346655d7599fae2bbba20af3c284e16c1df7d5a5daecced036cc2d2fb39babfb5a5889a81fa0c8866b101cbce5dc5943eb8f43242004ab3e5096
7
- data.tar.gz: 4223b0c8aa1e9822d3ac185dc3a0562d4a918dc7638d5c9ee7ed79f18a9b1f1f6865b6f1e8ac6848c76ab5c1127fb45f667212b8da6f609f66a31345de8dc244
6
+ metadata.gz: e4417767dddc3bfabb183a32d4f79cd3622541c531fb65205dacd0678280351476bcd2165c927ba524b41f7f1dd33ddfcbb4aafc33da302cb4a13247ae16d772
7
+ data.tar.gz: 5e1dd6ba75d5ba6965b31bbbd98df670280bf07164680067439b662135d97fcecd96decd6a129b1dbd1a2114e5078ea7384a26f97c1a5792f6e8d7ff7578fc11
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |gem|
6
6
  gem.name = "fluent-plugin-kubernetes_metadata_filter"
7
- gem.version = "0.14.0"
7
+ gem.version = "0.15.0"
8
8
  gem.authors = ["Jimmi Dyson"]
9
9
  gem.email = ["jimmidyson@gmail.com"]
10
10
  gem.description = %q{Filter plugin to add Kubernetes metadata}
@@ -20,7 +20,7 @@ Gem::Specification.new do |gem|
20
20
 
21
21
  gem.required_ruby_version = '>= 2.0.0'
22
22
 
23
- gem.add_runtime_dependency "fluentd"
23
+ gem.add_runtime_dependency "fluentd", "~> 0.12.0"
24
24
  gem.add_runtime_dependency "lru_redux"
25
25
  gem.add_runtime_dependency "kubeclient", "~> 0.4.0"
26
26
  gem.add_runtime_dependency "fluent-plugin-docker_metadata_filter"
@@ -18,6 +18,9 @@
18
18
  #
19
19
  module Fluent
20
20
  class KubernetesMetadataFilter < Fluent::Filter
21
+ K8_POD_CA_CERT = 'ca.crt'
22
+ K8_POD_TOKEN = 'token'
23
+
21
24
  Fluent::Plugin.register_filter('kubernetes_metadata', self)
22
25
 
23
26
  config_param :kubernetes_url, :string, default: ''
@@ -35,6 +38,7 @@ module Fluent
35
38
  config_param :bearer_token_file, :string, default: ''
36
39
  config_param :merge_json_log, :bool, default: true
37
40
  config_param :include_namespace_id, :bool, default: false
41
+ config_param :secret_dir, :string, default: '/var/run/secrets/kubernetes.io/serviceaccount'
38
42
 
39
43
  def get_metadata(namespace_name, pod_name, container_name)
40
44
  begin
@@ -73,6 +77,29 @@ module Fluent
73
77
  end
74
78
  @tag_to_kubernetes_name_regexp_compiled = Regexp.compile(@tag_to_kubernetes_name_regexp)
75
79
 
80
+ # Use Kubernetes default service account if we're in a pod.
81
+ if !@kubernetes_url.present?
82
+ env_host = ENV['KUBERNETES_SERVICE_HOST']
83
+ env_port = ENV['KUBERNETES_SERVICE_PORT']
84
+ if !env_host.nil? and !env_port.nil?
85
+ @kubernetes_url = "https://#{env_host}:#{env_port}/api"
86
+ end
87
+ end
88
+
89
+ # Use SSL certificate and bearer token from Kubernetes service account.
90
+ if Dir.exist?(@secret_dir)
91
+ ca_cert = File.join(@secret_dir, K8_POD_CA_CERT)
92
+ pod_token = File.join(@secret_dir, K8_POD_TOKEN)
93
+
94
+ if !@ca_file.present? and File.exist?(ca_cert)
95
+ @ca_file = ca_cert
96
+ end
97
+
98
+ if !@bearer_token_file.present? and File.exist?(pod_token)
99
+ @bearer_token_file = pod_token
100
+ end
101
+ end
102
+
76
103
  if @kubernetes_url.present?
77
104
 
78
105
  ssl_options = {
@@ -75,6 +75,53 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
75
75
  end
76
76
  end
77
77
  end
78
+
79
+ test 'service account credentials' do
80
+ VCR.use_cassette('valid_kubernetes_api_server') do
81
+ begin
82
+ ENV['KUBERNETES_SERVICE_HOST'] = 'localhost'
83
+ ENV['KUBERNETES_SERVICE_PORT'] = '8443'
84
+
85
+ Dir.mktmpdir { |dir|
86
+ # Fake token file and CA crt.
87
+ expected_cert_path = File.join(dir, KubernetesMetadataFilter::K8_POD_CA_CERT)
88
+ expected_token_path = File.join(dir, KubernetesMetadataFilter::K8_POD_TOKEN)
89
+
90
+ File.open(expected_cert_path, "w") {}
91
+ File.open(expected_token_path, "w") {}
92
+
93
+ d = create_driver("
94
+ watch false
95
+ secret_dir #{dir}
96
+ ")
97
+
98
+ assert_equal(d.instance.kubernetes_url, "https://localhost:8443/api")
99
+ assert_equal(d.instance.ca_file, expected_cert_path)
100
+ assert_equal(d.instance.bearer_token_file, expected_token_path)
101
+ }
102
+ ensure
103
+ ENV['KUBERNETES_SERVICE_HOST'] = nil
104
+ ENV['KUBERNETES_SERVICE_PORT'] = nil
105
+ end
106
+ end
107
+ end
108
+
109
+ test 'service account credential files are tested for existence' do
110
+ VCR.use_cassette('valid_kubernetes_api_server') do
111
+ begin
112
+ ENV['KUBERNETES_SERVICE_HOST'] = 'localhost'
113
+ ENV['KUBERNETES_SERVICE_PORT'] = '8443'
114
+
115
+ d = create_driver('watch false')
116
+ assert_equal(d.instance.kubernetes_url, "https://localhost:8443/api")
117
+ assert_false(d.instance.ca_file.present?)
118
+ assert_false(d.instance.bearer_token_file.present?)
119
+ ensure
120
+ ENV['KUBERNETES_SERVICE_HOST'] = nil
121
+ ENV['KUBERNETES_SERVICE_PORT'] = nil
122
+ end
123
+ end
124
+ end
78
125
  end
79
126
 
80
127
  sub_test_case 'filter_stream' do
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-kubernetes_metadata_filter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.14.0
4
+ version: 0.15.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jimmi Dyson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-01-15 00:00:00.000000000 Z
11
+ date: 2016-01-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fluentd
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: 0.12.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: 0.12.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: lru_redux
29
29
  requirement: !ruby/object:Gem::Requirement