From a374b9f99cabd78f93603860425517d45b6290fa Mon Sep 17 00:00:00 2001 From: "OTSUKA, Yuanying" Date: Wed, 24 Aug 2016 14:14:34 +0900 Subject: [PATCH] Fix to use HttpClient if token is given Currently, magnumclient doesn't work with token and endpoint_override. Due to cloud_config limitation. This issue breaks magnum horizon plugin. This patch fixes it. Change-Id: I0d0a41e72a1a806c4422c2dcde2b86e9889bc35f Closes-Bug: #1616315 --- magnumclient/tests/v1/test_client.py | 31 ++++-------- magnumclient/v1/client.py | 74 +++++++++++++++++++++------- 2 files changed, 66 insertions(+), 39 deletions(-) diff --git a/magnumclient/tests/v1/test_client.py b/magnumclient/tests/v1/test_client.py index b9d144cd..1cccc0da 100644 --- a/magnumclient/tests/v1/test_client.py +++ b/magnumclient/tests/v1/test_client.py @@ -125,31 +125,20 @@ class ClientInitializeTest(testtools.TestCase): mock_http_client ) - @mock.patch('magnumclient.common.httpclient.SessionClient') - @mock.patch('magnumclient.v1.client._load_session') - @mock.patch('magnumclient.v1.client._load_service_type', - return_value='container-infra') + @mock.patch('magnumclient.common.httpclient.HTTPClient') def test_init_with_auth_token(self, - mock_load_service_type, - mock_load_session, mock_http_client,): expected_token = 'expected_password' - session = mock.Mock() - mock_load_session.return_value = session - client.Client(auth_token=expected_token) - load_session_args = self._load_session_kwargs() - load_session_args['auth_token'] = expected_token - load_session_args['auth_type'] = 'token' - mock_load_session.assert_called_once_with( - **load_session_args - ) - mock_load_service_type.assert_called_once_with( - session, - **self._load_service_type_kwargs() - ) + expected_magnum_url = 'expected_magnum_url' + expected_kwargs = {'expected_key': 'expected_value'} + client.Client(auth_token=expected_token, + magnum_url=expected_magnum_url, + **expected_kwargs) + mock_http_client.assert_called_once_with( - **self._session_client_kwargs(session) - ) + expected_magnum_url, + token=expected_token, + **expected_kwargs) def _test_init_with_interface(self, init_func, diff --git a/magnumclient/v1/client.py b/magnumclient/v1/client.py index 0c106294..330fa01b 100644 --- a/magnumclient/v1/client.py +++ b/magnumclient/v1/client.py @@ -73,6 +73,51 @@ def _load_service_type(session, return service_type +def _load_session_client(session=None, endpoint_override=None, username=None, + project_id=None, project_name=None, + auth_url=None, password=None, auth_type=None, + insecure=None, user_domain_id=None, + user_domain_name=None, project_domain_id=None, + project_domain_name=None, auth_token=None, + timeout=None, service_type=None, service_name=None, + interface=None, region_name=None, **kwargs): + if not session: + session = _load_session( + username=username, + project_id=project_id, + project_name=project_name, + auth_url=auth_url, + password=password, + auth_type=auth_type, + insecure=insecure, + user_domain_id=user_domain_id, + user_domain_name=user_domain_name, + project_domain_id=project_domain_id, + project_domain_name=project_domain_name, + auth_token=auth_token, + timeout=timeout, + **kwargs + ) + + if not endpoint_override: + service_type = _load_service_type( + session, + service_type=service_type, + service_name=service_name, + interface=interface, + region_name=region_name, + ) + + return httpclient.SessionClient( + service_type=service_type, + service_name=service_name, + interface=interface, + region_name=region_name, + session=session, + endpoint_override=endpoint_override, + ) + + class Client(object): def __init__(self, username=None, api_key=None, project_id=None, project_name=None, auth_url=None, magnum_url=None, @@ -109,10 +154,16 @@ class Client(object): if magnum_url and not endpoint_override: endpoint_override = magnum_url - if not session: - if auth_token: - auth_type = 'token' - session = _load_session( + if endpoint_override and auth_token: + self.http_client = httpclient.HTTPClient( + endpoint_override, + token=auth_token, + **kwargs + ) + else: + self.http_client = _load_session_client( + session=session, + endpoint_override=endpoint_override, username=username, project_id=project_id, project_name=project_name, @@ -126,26 +177,13 @@ class Client(object): project_domain_name=project_domain_name, auth_token=auth_token, timeout=timeout, - **kwargs - ) - - if not endpoint_override: - service_type = _load_service_type( - session, service_type=service_type, service_name=service_name, interface=interface, region_name=region_name, + **kwargs ) - self.http_client = httpclient.SessionClient( - service_type=service_type, - service_name=service_name, - interface=interface, - region_name=region_name, - session=session, - endpoint_override=endpoint_override, - ) self.bays = bays.BayManager(self.http_client) self.clusters = clusters.ClusterManager(self.http_client) self.certificates = certificates.CertificateManager(self.http_client)