diff --git a/kubernetes/lib/kubernetes.rb b/kubernetes/lib/kubernetes.rb index 8b0c31bc..8f841c3f 100644 --- a/kubernetes/lib/kubernetes.rb +++ b/kubernetes/lib/kubernetes.rb @@ -15,6 +15,7 @@ require 'kubernetes/api_error' require 'kubernetes/version' require 'kubernetes/configuration' +require 'kubernetes/loader' # Configuration require 'kubernetes/config/error' diff --git a/kubernetes/spec/config/kube_config_spec.rb b/kubernetes/spec/config/kube_config_spec.rb index c013ffac..3b307386 100644 --- a/kubernetes/spec/config/kube_config_spec.rb +++ b/kubernetes/spec/config/kube_config_spec.rb @@ -202,6 +202,14 @@ expect(user['authorization']).to eq(TEST_BASIC_TOKEN) end end + + context 'if azure user' do + it 'should return the access token' do + user = kube_config.find_user('user_azure') + + expect(user['authorization']).to eq(TEST_AZURE_TOKEN) + end + end end context '#list_context_names' do diff --git a/kubernetes/spec/fixtures/config/kube_config_hash.rb b/kubernetes/spec/fixtures/config/kube_config_hash.rb index 74812185..d00667ab 100644 --- a/kubernetes/spec/fixtures/config/kube_config_hash.rb +++ b/kubernetes/spec/fixtures/config/kube_config_hash.rb @@ -25,6 +25,7 @@ TEST_PASSWORD = 'pass'.freeze # token for me:pass TEST_BASIC_TOKEN = 'Basic bWU6cGFzcw=='.freeze +TEST_AZURE_TOKEN = 'Bearer some-token'.freeze TEST_SSL_HOST = 'https://test-host'.freeze TEST_CERTIFICATE_AUTH = 'cert-auth'.freeze @@ -146,6 +147,18 @@ } }.freeze +TEST_USER_AZURE = { + 'name' => 'user_azure', + 'user' => { + 'auth-provider' => { + 'name' => 'azure', + 'config' => { + 'access-token' => 'some-token' + } + } + } +}.freeze + TEST_KUBE_CONFIG = { 'current-context' => 'no_user', 'contexts' => [ @@ -167,6 +180,7 @@ TEST_USER_SIMPLE_TOKEN_FILE, TEST_USER_USER_PASS, TEST_USER_CERT_DATA, - TEST_USER_CERT_FILE + TEST_USER_CERT_FILE, + TEST_USER_AZURE ] }.freeze diff --git a/kubernetes/src/kubernetes/config/kube_config.rb b/kubernetes/src/kubernetes/config/kube_config.rb index 2d96ed1b..d14bf083 100644 --- a/kubernetes/src/kubernetes/config/kube_config.rb +++ b/kubernetes/src/kubernetes/config/kube_config.rb @@ -23,6 +23,7 @@ require 'kubernetes/utils' module Kubernetes + # rubocop:disable ClassLength # The KubeConfig class represents configuration based on a YAML # representation. class KubeConfig @@ -121,6 +122,7 @@ def load_token_file(user) end end + # rubocop:disable AbcSize def setup_auth(user) # Convert token field to http header if user['token'] @@ -128,8 +130,12 @@ def setup_auth(user) elsif user['username'] && user['password'] user_pass = "#{user['username']}:#{user['password']}" user['authorization'] = "Basic #{Base64.strict_encode64(user_pass)}" + elsif user['auth-provider'] && user['auth-provider']['name'] == 'azure' + token = user['auth-provider']['config']['access-token'] + user['authorization'] = "Bearer #{token}" end end + # rubocop:enable AbcSize def list_context_names config['contexts'].map { |e| e['name'] } @@ -159,4 +165,5 @@ def find_by_name(list, key, name) obj[key].dup end end + # rubocop:enable ClassLength end