Пример #1
0
 def test_exception(self):
     fake_response = utils.FakeSessionResponse({},
                                               content="",
                                               status_code=504)
     fake_session = mock.MagicMock()
     fake_session.request.side_effect = [fake_response]
     client = http.SessionClient(session=fake_session,
                                 endpoint_override='http://magnum')
     self.assertRaises(GatewayTimeout, client.json_request, 'GET',
                       '/v1/resources')
Пример #2
0
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,
                         api_version=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,
        api_version=api_version,
    )
Пример #3
0
    def test_server_exception_empty_body(self):
        error_body = _get_error_body()

        fake_session = utils.FakeSession({'Content-Type': 'application/json'},
                                         error_body, 500)

        client = http.SessionClient(session=fake_session)

        error = self.assertRaises(exc.InternalServerError, client.json_request,
                                  'GET', '/v1/resources')

        self.assertEqual('Internal Server Error (HTTP 500)', str(error))
Пример #4
0
    def test_bypass_url(self):
        fake_response = utils.FakeSessionResponse({},
                                                  content="",
                                                  status_code=201)
        fake_session = mock.MagicMock()
        fake_session.request.side_effect = [fake_response]

        client = http.SessionClient(session=fake_session,
                                    endpoint_override='http://magnum')

        client.json_request('GET', '/v1/bays')
        self.assertEqual(
            fake_session.request.call_args[1]['endpoint_override'],
            'http://magnum')
Пример #5
0
    def test_raw_request(self):
        fake_response = utils.FakeSessionResponse(
            {'content-type': 'application/octet-stream'},
            content="",
            status_code=200)
        fake_session = mock.MagicMock()
        fake_session.request.side_effect = [fake_response]

        client = http.SessionClient(session=fake_session,
                                    endpoint_override='http://magnum')

        resp = client.raw_request('GET', '/v1/bays')

        self.assertEqual(
            fake_session.request.call_args[1]['headers']['Content-Type'],
            'application/octet-stream')
        self.assertEqual(fake_response, resp)
Пример #6
0
    def test_server_exception_msg_and_traceback(self):
        error_msg = 'another test error'
        error_trace = ("\"Traceback (most recent call last):\\n\\n  "
                       "File \\\"/usr/local/lib/python2.7/...")
        error_body = _get_error_body(error_msg, error_trace)

        fake_session = utils.FakeSession({'Content-Type': 'application/json'},
                                         error_body,
                                         500)

        client = http.SessionClient(session=fake_session)

        error = self.assertRaises(exc.InternalServerError,
                                  client.json_request,
                                  'GET', '/v1/resources')

        self.assertEqual(
            '%(error)s (HTTP 500)\n%(trace)s' % {'error': error_msg,
                                                 'trace': error_trace},
            "%(error)s\n%(details)s" % {'error': str(error),
                                        'details': str(error.details)})
Пример #7
0
    def __init__(self,
                 username=None,
                 api_key=None,
                 project_id=None,
                 project_name=None,
                 auth_url=None,
                 magnum_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,
                 project_domain_id=None,
                 project_domain_name=None):

        # We have to keep the api_key are for backwards compat, but let's
        # remove it from the rest of our code since it's not a keystone
        # concept
        if not password:
            password = api_key
        # Backwards compat for people assing in endpoint_type
        if endpoint_type:
            interface = endpoint_type

        # fix (yolanda): os-cloud-config is using endpoint_override
        # instead of magnum_url
        if endpoint_override and not magnum_url:
            magnum_url = endpoint_override

        if magnum_url and input_auth_token:
            auth_type = 'admin_token'
            session = None
            loader_kwargs = dict(token=input_auth_token, endpoint=magnum_url)
        elif input_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)
        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)

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

        client_kwargs = {}
        if magnum_url:
            client_kwargs['endpoint_override'] = magnum_url

        if not magnum_url:
            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,
                                     interface=interface,
                                     region_name=region_name)
            except Exception:
                raise RuntimeError("Not Authorized")

        self.http_client = httpclient.SessionClient(service_type=service_type,
                                                    service_name=service_name,
                                                    interface=interface,
                                                    region_name=region_name,
                                                    session=session,
                                                    **client_kwargs)
        self.bays = bays.BayManager(self.http_client)
        self.certificates = certificates.CertificateManager(self.http_client)
        self.baymodels = baymodels.BayModelManager(self.http_client)
        self.containers = containers.ContainerManager(self.http_client)
        self.pods = pods.PodManager(self.http_client)
        self.rcs = rcs.ReplicationControllerManager(self.http_client)
        self.services = services.ServiceManager(self.http_client)
        self.mservices = mservices.MServiceManager(self.http_client)
    def __init__(self, username=None, api_key=None, project_id=None,
                 project_name=None, auth_url=None, magnum_url=None,
                 endpoint_type=None, service_type='container',
                 region_name=None, input_auth_token=None,
                 session=None, password=None, auth_type='password',
                 interface='public', service_name=None):

        # We have to keep the api_key are for backwards compat, but let's
        # remove it from the rest of our code since it's not a keystone
        # concept
        if not password:
            password = api_key
        # Backwards compat for people assing in endpoint_type
        if endpoint_type:
            interface = endpoint_type

        if magnum_url and input_auth_token:
            auth_type = 'admin_token'
            session = None
            loader_kwargs = dict(
                token=input_auth_token,
                endpoint=magnum_url)
        elif input_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)
        else:
            loader_kwargs = dict(
                username=username,
                password=password,
                auth_url=auth_url,
                project_id=project_id,
                project_name=project_name)

        # Backwards compatability for people not passing in Session
        if session is None:
            loader = loading.get_plugin_loader(auth_type)

            # This only supports keystone v2 password auth - but we can
            # support other auth by passing in a Session, which is the
            # right thing to do anyway
            auth_plugin = loader.load_from_options(**loader_kwargs)
            session = ksa_session.Session(auth=auth_plugin)

        client_kwargs = {}
        if magnum_url:
            client_kwargs['endpoint_override'] = magnum_url

        if not magnum_url:
            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,
                    interface=interface,
                    region_name=region_name)
            except Exception:
                raise RuntimeError("Not Authorized")

        self.http_client = httpclient.SessionClient(
            service_type=service_type,
            service_name=service_name,
            interface=interface,
            region_name=region_name,
            session=session,
            **client_kwargs)
        self.bays = bays.BayManager(self.http_client)
        self.certificates = certificates.CertificateManager(self.http_client)
        self.baymodels = baymodels.BayModelManager(self.http_client)
        self.containers = containers.ContainerManager(self.http_client)
        self.nodes = nodes.NodeManager(self.http_client)
        self.pods = pods.PodManager(self.http_client)
        self.rcs = rcs.ReplicationControllerManager(self.http_client)
        self.services = services.ServiceManager(self.http_client)
        self.mservices = mservices.MServiceManager(self.http_client)