Skip most service_description for unknown services
When we don't know anything about a service, we can know early in the process that we're never going to match a supported version. That means we can just directly and without malice or warnings return a REST adapter and be done with it. Change-Id: Ifd4f2fce59c76148807fb7390f68eaae179694c4
This commit is contained in:
parent
1ddca04a52
commit
a7423f720f
|
@ -100,7 +100,19 @@ class ServiceDescription(object):
|
||||||
self.service_type,
|
self.service_type,
|
||||||
config.get_disabled_reason(self.service_type))
|
config.get_disabled_reason(self.service_type))
|
||||||
|
|
||||||
# First, check to see if we've got config that matches what we
|
# We don't know anything about this service, so the user is
|
||||||
|
# explicitly just using us for a passthrough REST adapter.
|
||||||
|
# Skip all the lower logic.
|
||||||
|
if not self.supported_versions:
|
||||||
|
temp_client = config.get_session_client(
|
||||||
|
self.service_type,
|
||||||
|
allow_version_hack=True,
|
||||||
|
)
|
||||||
|
# trigger EndpointNotFound exception if this is bogus
|
||||||
|
temp_client.get_endpoint()
|
||||||
|
return temp_client
|
||||||
|
|
||||||
|
# Check to see if we've got config that matches what we
|
||||||
# understand in the SDK.
|
# understand in the SDK.
|
||||||
version_string = config.get_api_version(self.service_type)
|
version_string = config.get_api_version(self.service_type)
|
||||||
endpoint_override = config.get_endpoint(self.service_type)
|
endpoint_override = config.get_endpoint(self.service_type)
|
||||||
|
@ -111,7 +123,7 @@ class ServiceDescription(object):
|
||||||
version_string = list(self.supported_versions)[0]
|
version_string = list(self.supported_versions)[0]
|
||||||
|
|
||||||
proxy_obj = None
|
proxy_obj = None
|
||||||
if endpoint_override and version_string and self.supported_versions:
|
if endpoint_override and version_string:
|
||||||
# Both endpoint override and version_string are set, we don't
|
# Both endpoint override and version_string are set, we don't
|
||||||
# need to do discovery - just trust the user.
|
# need to do discovery - just trust the user.
|
||||||
proxy_class = self.supported_versions.get(version_string[0])
|
proxy_class = self.supported_versions.get(version_string[0])
|
||||||
|
@ -129,7 +141,7 @@ class ServiceDescription(object):
|
||||||
version=version_string,
|
version=version_string,
|
||||||
service_type=self.service_type),
|
service_type=self.service_type),
|
||||||
category=exceptions.UnsupportedServiceVersion)
|
category=exceptions.UnsupportedServiceVersion)
|
||||||
elif endpoint_override and self.supported_versions:
|
elif endpoint_override:
|
||||||
temp_adapter = config.get_session_client(
|
temp_adapter = config.get_session_client(
|
||||||
self.service_type
|
self.service_type
|
||||||
)
|
)
|
||||||
|
@ -181,7 +193,7 @@ class ServiceDescription(object):
|
||||||
version_kwargs = {}
|
version_kwargs = {}
|
||||||
if version_string:
|
if version_string:
|
||||||
version_kwargs['version'] = version_string
|
version_kwargs['version'] = version_string
|
||||||
elif self.supported_versions:
|
else:
|
||||||
supported_versions = sorted([
|
supported_versions = sorted([
|
||||||
int(f) for f in self.supported_versions])
|
int(f) for f in self.supported_versions])
|
||||||
version_kwargs['min_version'] = str(supported_versions[0])
|
version_kwargs['min_version'] = str(supported_versions[0])
|
||||||
|
|
|
@ -15,8 +15,10 @@ import os
|
||||||
import fixtures
|
import fixtures
|
||||||
from keystoneauth1 import session
|
from keystoneauth1 import session
|
||||||
import mock
|
import mock
|
||||||
|
from testtools import matchers
|
||||||
|
|
||||||
from openstack import connection
|
from openstack import connection
|
||||||
|
from openstack import proxy
|
||||||
import openstack.config
|
import openstack.config
|
||||||
from openstack.tests.unit import base
|
from openstack.tests.unit import base
|
||||||
from openstack.tests.unit.fake import fake_service
|
from openstack.tests.unit.fake import fake_service
|
||||||
|
@ -145,6 +147,24 @@ class TestConnection(base.TestCase):
|
||||||
# self.assertEqual('openstack.workflow.v2._proxy',
|
# self.assertEqual('openstack.workflow.v2._proxy',
|
||||||
# conn.workflow.__class__.__module__)
|
# conn.workflow.__class__.__module__)
|
||||||
|
|
||||||
|
def test_create_unknown_proxy(self):
|
||||||
|
self.register_uris([
|
||||||
|
self.get_placement_discovery_mock_dict(),
|
||||||
|
])
|
||||||
|
|
||||||
|
def closure():
|
||||||
|
return self.cloud.placement
|
||||||
|
|
||||||
|
self.assertThat(
|
||||||
|
closure,
|
||||||
|
matchers.Warnings(matchers.HasLength(0)))
|
||||||
|
|
||||||
|
self.assertIsInstance(
|
||||||
|
self.cloud.placement,
|
||||||
|
proxy.Proxy)
|
||||||
|
|
||||||
|
self.assert_calls()
|
||||||
|
|
||||||
def test_create_connection_version_param_default(self):
|
def test_create_connection_version_param_default(self):
|
||||||
c1 = connection.Connection(cloud='sample-cloud')
|
c1 = connection.Connection(cloud='sample-cloud')
|
||||||
conn = connection.Connection(session=c1.session)
|
conn = connection.Connection(session=c1.session)
|
||||||
|
|
Loading…
Reference in New Issue