Skip to content

Commit

Permalink
Fix to use HttpClient if token is given
Browse files Browse the repository at this point in the history
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
  • Loading branch information
yuanying committed Aug 24, 2016
1 parent 11ae581 commit a374b9f
Show file tree
Hide file tree
Showing 2 changed files with 66 additions and 39 deletions.
31 changes: 10 additions & 21 deletions magnumclient/tests/v1/test_client.py
Expand Up @@ -125,31 +125,20 @@ def test_init_with_api_key(self,
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,
Expand Down
74 changes: 56 additions & 18 deletions magnumclient/v1/client.py
Expand Up @@ -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,
Expand Down Expand Up @@ -109,10 +154,16 @@ def __init__(self, username=None, api_key=None, project_id=None,
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,
Expand All @@ -126,26 +177,13 @@ def __init__(self, username=None, api_key=None, project_id=None,
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)
Expand Down

0 comments on commit a374b9f

Please sign in to comment.