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
This commit is contained in:
OTSUKA, Yuanying 2016-08-24 14:14:34 +09:00
parent 11ae581de3
commit a374b9f99c
2 changed files with 66 additions and 39 deletions

View File

@ -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,

View File

@ -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)