From 966ae060d0db839f3f00ffa379475d308d5e4334 Mon Sep 17 00:00:00 2001 From: Sergey Reshetnyak Date: Mon, 16 Jan 2017 16:02:43 +0300 Subject: [PATCH] Allow to specify k8s credentials in config Change-Id: I483f43fbdb2c5e91edc2e0592530da01765c24b5 --- fuel_ccp/config/kubernetes.py | 12 +++++++++--- fuel_ccp/kubernetes.py | 8 +++++++- fuel_ccp/tests/test_kubernetes.py | 9 +++++++-- 3 files changed, 23 insertions(+), 6 deletions(-) diff --git a/fuel_ccp/config/kubernetes.py b/fuel_ccp/config/kubernetes.py index 6e2f5d77..bc6361e6 100644 --- a/fuel_ccp/config/kubernetes.py +++ b/fuel_ccp/config/kubernetes.py @@ -6,11 +6,15 @@ DEFAULTS = { 'key_file': None, 'cert_file': None, 'insecure': False, + 'username': None, + 'password': None, 'cluster_domain': 'cluster.local', 'image_pull_policy': None, }, } +STRING_OR_NULL = {'anyOf': [{'type': 'string'}, {'type': 'null'}]} + SCHEMA = { 'kubernetes': { 'type': 'object', @@ -18,10 +22,12 @@ SCHEMA = { 'properties': { 'server': {'type': 'string'}, 'namespace': {'type': 'string'}, - 'ca_cert': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, - 'key_file': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, - 'cert_file': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, + 'ca_cert': STRING_OR_NULL, + 'key_file': STRING_OR_NULL, + 'cert_file': STRING_OR_NULL, 'insecure': {'type': 'boolean'}, + 'username': STRING_OR_NULL, + 'password': STRING_OR_NULL, 'cluster_domain': {'type': 'string'}, 'image_pull_policy': {'oneOf': [ {'type': 'null'}, diff --git a/fuel_ccp/kubernetes.py b/fuel_ccp/kubernetes.py index 4ed23e3e..d10be12f 100644 --- a/fuel_ccp/kubernetes.py +++ b/fuel_ccp/kubernetes.py @@ -20,12 +20,14 @@ UPDATABLE_OBJECTS = ( def get_client(kube_apiserver=None, key_file=None, cert_file=None, - ca_cert=None, insecure=None): + ca_cert=None, insecure=None, username=None, password=None): kube_apiserver = kube_apiserver or CONF.kubernetes.server key_file = key_file or CONF.kubernetes.key_file cert_file = cert_file or CONF.kubernetes.cert_file ca_cert = ca_cert or CONF.kubernetes.ca_cert insecure = insecure or CONF.kubernetes.insecure + username = username or CONF.kubernetes.username + password = password or CONF.kubernetes.password cluster = {"server": kube_apiserver} if ca_cert: @@ -37,6 +39,10 @@ def get_client(kube_apiserver=None, key_file=None, cert_file=None, if cert_file and key_file: user["client-certificate"] = cert_file user["client-key"] = key_file + if username: + user["username"] = username + if password: + user["password"] = password config = { "clusters": [ diff --git a/fuel_ccp/tests/test_kubernetes.py b/fuel_ccp/tests/test_kubernetes.py index 3a63f2cb..ab182b18 100644 --- a/fuel_ccp/tests/test_kubernetes.py +++ b/fuel_ccp/tests/test_kubernetes.py @@ -26,7 +26,9 @@ class TestKubernetesClient(base.TestCase): 'name': 'ccp', 'user': { 'client-certificate': 'test.cert', - 'client-key': 'test.key' + 'client-key': 'test.key', + 'username': 'test-user', + 'password': 'test-passwd' } }], 'current-context': 'ccp' @@ -39,6 +41,8 @@ class TestKubernetesClient(base.TestCase): key_file='test.key', ca_cert='ca.crt', cert_file='test.cert', + username='test-user', + password='test-passwd' ) kubernetes.get_client() @@ -50,7 +54,8 @@ class TestKubernetesClient(base.TestCase): def test_get_client(self, m_client, m_config): kubernetes.get_client( kube_apiserver='http://localhost:8080', key_file='test.key', - cert_file='test.cert', ca_cert='ca.crt') + cert_file='test.cert', ca_cert='ca.crt', + username='test-user', password='test-passwd') m_config.assert_called_once_with(self.config) m_client.assrt_called_once_with(m_config)