[Refactor code] Update client v1
- Re-order argument alphabetically and add docstring. - Move osprofiler_profilter to zunclient.client.Client. Change-Id: Ie9be389495e2f13454f1f8d1c1d66b22d813a9ec
This commit is contained in:
		@@ -20,6 +20,8 @@ from zunclient import api_versions
 | 
			
		||||
from zunclient import exceptions
 | 
			
		||||
from zunclient.i18n import _
 | 
			
		||||
 | 
			
		||||
osprofiler_profiler = importutils.try_import("osprofiler.profiler")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def _get_client_class_and_version(version):
 | 
			
		||||
    if not isinstance(version, api_versions.APIVersion):
 | 
			
		||||
@@ -81,6 +83,16 @@ def Client(version='1', username=None, auth_url=None, **kwargs):
 | 
			
		||||
                     right_name='project_name')
 | 
			
		||||
    _check_arguments(kwargs, 'Queens', 'tenant_id', right_name='project_id')
 | 
			
		||||
 | 
			
		||||
    profile = kwargs.pop('profile', None)
 | 
			
		||||
    if osprofiler_profiler and profile:
 | 
			
		||||
        # Initialize the root of the future trace: the created trace ID
 | 
			
		||||
        # will be used as the very first parent to which all related
 | 
			
		||||
        # traces will be bound to. The given HMAC key must correspond to
 | 
			
		||||
        # the one set in zun-api zun.conf, otherwise the latter
 | 
			
		||||
        # will fail to check the request signature and will skip
 | 
			
		||||
        # initialization of osprofiler on the server side.
 | 
			
		||||
        osprofiler_profiler.init(profile)
 | 
			
		||||
 | 
			
		||||
    api_version, client_class = _get_client_class_and_version(version)
 | 
			
		||||
    return client_class(api_version=api_version,
 | 
			
		||||
                        auth_url=auth_url,
 | 
			
		||||
 
 | 
			
		||||
@@ -43,7 +43,8 @@ class ClientTest(testtools.TestCase):
 | 
			
		||||
        mock_token.return_value = mock_auth_plugin
 | 
			
		||||
        session = mock.Mock()
 | 
			
		||||
        mock_session.return_value = session
 | 
			
		||||
        client.Client(input_auth_token='mytoken', zun_url='http://myurl/')
 | 
			
		||||
        client.Client(auth_token='mytoken',
 | 
			
		||||
                      endpoint_override='http://myurl/')
 | 
			
		||||
        mock_session.assert_called_once_with(
 | 
			
		||||
            auth=mock_auth_plugin, verify=True)
 | 
			
		||||
        http_client.assert_called_once_with(
 | 
			
		||||
@@ -62,7 +63,7 @@ class ClientTest(testtools.TestCase):
 | 
			
		||||
            self, mock_session, mock_loader, http_client):
 | 
			
		||||
        mock_plugin = mock.Mock()
 | 
			
		||||
        mock_loader.return_value = mock_plugin
 | 
			
		||||
        client.Client(input_auth_token='mytoken', auth_url='authurl')
 | 
			
		||||
        client.Client(auth_token='mytoken', auth_url='authurl')
 | 
			
		||||
        mock_loader.assert_called_once_with('token')
 | 
			
		||||
        mock_plugin.load_from_options.assert_called_once_with(
 | 
			
		||||
            auth_url='authurl',
 | 
			
		||||
@@ -155,7 +156,7 @@ class ClientTest(testtools.TestCase):
 | 
			
		||||
                                                     http_client):
 | 
			
		||||
        session = mock.Mock()
 | 
			
		||||
        client.Client(session=session, zun_url='zunurl',
 | 
			
		||||
                      endpoint_override='zunurl_override')
 | 
			
		||||
                      endpoint_override='zunurl')
 | 
			
		||||
        mock_session.assert_not_called()
 | 
			
		||||
        http_client.assert_called_once_with(
 | 
			
		||||
            interface='public',
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,6 @@
 | 
			
		||||
 | 
			
		||||
from keystoneauth1 import loading
 | 
			
		||||
from keystoneauth1 import session as ksa_session
 | 
			
		||||
from oslo_utils import importutils
 | 
			
		||||
 | 
			
		||||
from zunclient.common import httpclient
 | 
			
		||||
from zunclient.v1 import containers
 | 
			
		||||
@@ -23,99 +22,108 @@ from zunclient.v1 import hosts
 | 
			
		||||
from zunclient.v1 import images
 | 
			
		||||
from zunclient.v1 import services
 | 
			
		||||
 | 
			
		||||
profiler = importutils.try_import("osprofiler.profiler")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Client(object):
 | 
			
		||||
    def __init__(self, username=None, api_key=None, project_id=None,
 | 
			
		||||
                 project_name=None, auth_url=None, zun_url=None,
 | 
			
		||||
                 endpoint_type=None, endpoint_override=None,
 | 
			
		||||
                 service_type='container',
 | 
			
		||||
                 region_name=None, input_auth_token=None,
 | 
			
		||||
                 session=None, password=None, auth_type='password',
 | 
			
		||||
                 interface='public', service_name=None, insecure=False,
 | 
			
		||||
                 user_domain_id=None, user_domain_name=None,
 | 
			
		||||
    """Top-level object to access the OpenStack Container API."""
 | 
			
		||||
 | 
			
		||||
    def __init__(self, api_version=None, auth_token=None,
 | 
			
		||||
                 auth_type='password', auth_url=None, endpoint_override=None,
 | 
			
		||||
                 interface='public', insecure=False, password=None,
 | 
			
		||||
                 project_domain_id=None, project_domain_name=None,
 | 
			
		||||
                 api_version=None, **kwargs):
 | 
			
		||||
                 project_id=None, project_name=None, region_name=None,
 | 
			
		||||
                 service_name=None, service_type='container', session=None,
 | 
			
		||||
                 user_domain_id=None, user_domain_name=None,
 | 
			
		||||
                 username=None, **kwargs):
 | 
			
		||||
        """Initialization of Client object.
 | 
			
		||||
 | 
			
		||||
        # fix (yolanda): os-cloud-config is using endpoint_override
 | 
			
		||||
        # instead of zun_url
 | 
			
		||||
        if endpoint_override and not zun_url:
 | 
			
		||||
            zun_url = endpoint_override
 | 
			
		||||
 | 
			
		||||
        if zun_url and input_auth_token:
 | 
			
		||||
        :param api_version: Container API version
 | 
			
		||||
        :type api_version: zunclient.api_version.APIVersion
 | 
			
		||||
        :param str auth_token: Auth token
 | 
			
		||||
        :param str auth_url: Auth URL
 | 
			
		||||
        :param str auth_type: Auth Type
 | 
			
		||||
        :param str endpoint_override: Bypass URL
 | 
			
		||||
        :param str interface: Interface
 | 
			
		||||
        :param str insecure: Allow insecure
 | 
			
		||||
        :param str password: User password
 | 
			
		||||
        :param str project_domain_id: ID of project domain
 | 
			
		||||
        :param str project_domain_name: Nam of project domain
 | 
			
		||||
        :param str project_id: Project/Tenant ID
 | 
			
		||||
        :param str project_name: Project/Tenant Name
 | 
			
		||||
        :param str region_name: Region Name
 | 
			
		||||
        :param str service_name: Service Name
 | 
			
		||||
        :param str service_type: Service Type
 | 
			
		||||
        :param str session: Session
 | 
			
		||||
        :param str user_domain_id: ID of user domain
 | 
			
		||||
        :param str user_id: User ID
 | 
			
		||||
        :param str username: Username
 | 
			
		||||
        """
 | 
			
		||||
        if endpoint_override and auth_token:
 | 
			
		||||
            auth_type = 'admin_token'
 | 
			
		||||
            session = None
 | 
			
		||||
            loader_kwargs = dict(
 | 
			
		||||
                token=input_auth_token,
 | 
			
		||||
                endpoint=zun_url)
 | 
			
		||||
        elif input_auth_token and not session:
 | 
			
		||||
            loader_kwargs = {
 | 
			
		||||
                'token': auth_token,
 | 
			
		||||
                'endpoint': endpoint_override
 | 
			
		||||
            }
 | 
			
		||||
        elif auth_token and not session:
 | 
			
		||||
            auth_type = 'token'
 | 
			
		||||
            loader_kwargs = dict(
 | 
			
		||||
                token=input_auth_token,
 | 
			
		||||
                auth_url=auth_url,
 | 
			
		||||
                project_id=project_id,
 | 
			
		||||
                project_name=project_name,
 | 
			
		||||
                user_domain_id=user_domain_id,
 | 
			
		||||
                user_domain_name=user_domain_name,
 | 
			
		||||
                project_domain_id=project_domain_id,
 | 
			
		||||
                project_domain_name=project_domain_name)
 | 
			
		||||
            loader_kwargs = {
 | 
			
		||||
                'token': auth_token,
 | 
			
		||||
                'auth_url': auth_url,
 | 
			
		||||
                'project_domain_id': project_domain_id,
 | 
			
		||||
                'project_domain_name': project_domain_name,
 | 
			
		||||
                'project_id': project_id,
 | 
			
		||||
                'project_name': project_name,
 | 
			
		||||
                'user_domain_id': user_domain_id,
 | 
			
		||||
                'user_domain_name': user_domain_name
 | 
			
		||||
            }
 | 
			
		||||
        else:
 | 
			
		||||
            loader_kwargs = dict(
 | 
			
		||||
                username=username,
 | 
			
		||||
                password=password,
 | 
			
		||||
                auth_url=auth_url,
 | 
			
		||||
                project_id=project_id,
 | 
			
		||||
                project_name=project_name,
 | 
			
		||||
                user_domain_id=user_domain_id,
 | 
			
		||||
                user_domain_name=user_domain_name,
 | 
			
		||||
                project_domain_id=project_domain_id,
 | 
			
		||||
                project_domain_name=project_domain_name)
 | 
			
		||||
            loader_kwargs = {
 | 
			
		||||
                'auth_url': auth_url,
 | 
			
		||||
                'password': password,
 | 
			
		||||
                'project_domain_id': project_domain_id,
 | 
			
		||||
                'project_domain_name': project_domain_name,
 | 
			
		||||
                'project_id': project_id,
 | 
			
		||||
                'project_name': project_name,
 | 
			
		||||
                'user_domain_id': user_domain_id,
 | 
			
		||||
                'user_domain_name': user_domain_name,
 | 
			
		||||
                'username': username,
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
        # Backwards compatibility for people not passing in Session
 | 
			
		||||
        if session is None:
 | 
			
		||||
            loader = loading.get_plugin_loader(auth_type)
 | 
			
		||||
 | 
			
		||||
            # This should be able to handle v2 and v3 Keystone Auth
 | 
			
		||||
            auth_plugin = loader.load_from_options(**loader_kwargs)
 | 
			
		||||
            session = ksa_session.Session(
 | 
			
		||||
                auth=auth_plugin, verify=(not insecure))
 | 
			
		||||
 | 
			
		||||
            session = ksa_session.Session(auth=auth_plugin,
 | 
			
		||||
                                          verify=(not insecure))
 | 
			
		||||
        client_kwargs = {}
 | 
			
		||||
        if zun_url:
 | 
			
		||||
            client_kwargs['endpoint_override'] = zun_url
 | 
			
		||||
 | 
			
		||||
        if not zun_url:
 | 
			
		||||
        if not endpoint_override:
 | 
			
		||||
            try:
 | 
			
		||||
                # Trigger an auth error so that we can throw the exception
 | 
			
		||||
                # we always have
 | 
			
		||||
                session.get_endpoint(
 | 
			
		||||
                    service_type=service_type,
 | 
			
		||||
                    service_name=service_name,
 | 
			
		||||
                    service_type=service_type,
 | 
			
		||||
                    interface=interface,
 | 
			
		||||
                    region_name=region_name)
 | 
			
		||||
                    region_name=region_name
 | 
			
		||||
                )
 | 
			
		||||
            except Exception:
 | 
			
		||||
                raise RuntimeError("Not Authorized")
 | 
			
		||||
                raise RuntimeError('Not authorized')
 | 
			
		||||
        else:
 | 
			
		||||
            client_kwargs = {'endpoint_override': endpoint_override}
 | 
			
		||||
 | 
			
		||||
        self.http_client = httpclient.SessionClient(
 | 
			
		||||
            service_type=service_type,
 | 
			
		||||
            service_name=service_name,
 | 
			
		||||
            interface=interface,
 | 
			
		||||
            region_name=region_name,
 | 
			
		||||
            session=session,
 | 
			
		||||
            api_version=api_version,
 | 
			
		||||
            **client_kwargs)
 | 
			
		||||
        self.http_client = httpclient.SessionClient(service_type=service_type,
 | 
			
		||||
                                                    service_name=service_name,
 | 
			
		||||
                                                    interface=interface,
 | 
			
		||||
                                                    region_name=region_name,
 | 
			
		||||
                                                    session=session,
 | 
			
		||||
                                                    api_version=api_version,
 | 
			
		||||
                                                    **client_kwargs)
 | 
			
		||||
        self.containers = containers.ContainerManager(self.http_client)
 | 
			
		||||
        self.images = images.ImageManager(self.http_client)
 | 
			
		||||
        self.services = services.ServiceManager(self.http_client)
 | 
			
		||||
        self.hosts = hosts.HostManager(self.http_client)
 | 
			
		||||
 | 
			
		||||
        profile = kwargs.pop("profile", None)
 | 
			
		||||
        if profiler and profile:
 | 
			
		||||
            # Initialize the root of the future trace: the created trace ID
 | 
			
		||||
            # will be used as the very first parent to which all related
 | 
			
		||||
            # traces will be bound to. The given HMAC key must correspond to
 | 
			
		||||
            # the one set in zun-api zun.conf, otherwise the latter
 | 
			
		||||
            # will fail to check the request signature and will skip
 | 
			
		||||
            # initialization of osprofiler on the server side.
 | 
			
		||||
            profiler.init(profile)
 | 
			
		||||
    @property
 | 
			
		||||
    def api_version(self):
 | 
			
		||||
        return self.http_client.api_version
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user