Hardcode v2.0 onto end of neutron endpoints
neutron makes life sad for version discovery because older clouds had hidden the discovery document. Work around it with terrible hacks. The shade layer already does this, incidentally. Change-Id: I8217796ec36140a851177583c75f95cee02c7a43
This commit is contained in:
parent
34ea72ce5b
commit
b6020dae7e
@ -581,8 +581,7 @@ class OpenStackCloud(_normalize.Normalizer):
|
||||
def _network_client(self):
|
||||
if 'network' not in self._raw_clients:
|
||||
client = self._get_raw_client('network')
|
||||
# TODO(mordred) I don't care if this is what neutronclient does,
|
||||
# fix this.
|
||||
# TODO(mordred) Replace this with self.network
|
||||
# Don't bother with version discovery - there is only one version
|
||||
# of neutron. This is what neutronclient does, fwiw.
|
||||
endpoint = client.get_endpoint()
|
||||
|
@ -421,6 +421,31 @@ class CloudRegion(object):
|
||||
self.get_connect_retries(service_type))
|
||||
kwargs.setdefault('status_code_retries',
|
||||
self.get_status_code_retries(service_type))
|
||||
endpoint_override = self.get_endpoint(service_type)
|
||||
version = version_request.version
|
||||
min_api_version = version_request.min_api_version
|
||||
max_api_version = version_request.max_api_version
|
||||
# Older neutron has inaccessible discovery document. Nobody noticed
|
||||
# because neutronclient hard-codes an append of v2.0. YAY!
|
||||
if service_type == 'network':
|
||||
version = None
|
||||
min_api_version = None
|
||||
max_api_version = None
|
||||
if endpoint_override is None:
|
||||
network_adapter = constructor(
|
||||
session=self.get_session(),
|
||||
service_type=self.get_service_type(service_type),
|
||||
service_name=self.get_service_name(service_type),
|
||||
interface=self.get_interface(service_type),
|
||||
region_name=self.region_name,
|
||||
)
|
||||
network_endpoint = network_adapter.get_endpoint()
|
||||
if not network_endpoint.rstrip().rsplit('/')[1] == 'v2.0':
|
||||
if not network_endpoint.endswith('/'):
|
||||
network_endpoint += '/'
|
||||
network_endpoint = urllib.parse.urljoin(
|
||||
network_endpoint, 'v2.0')
|
||||
endpoint_override = network_endpoint
|
||||
|
||||
client = constructor(
|
||||
session=self.get_session(),
|
||||
@ -428,10 +453,10 @@ class CloudRegion(object):
|
||||
service_name=self.get_service_name(service_type),
|
||||
interface=self.get_interface(service_type),
|
||||
region_name=self.region_name,
|
||||
version=version_request.version,
|
||||
min_version=version_request.min_api_version,
|
||||
max_version=version_request.max_api_version,
|
||||
endpoint_override=self.get_endpoint(service_type),
|
||||
version=version,
|
||||
min_version=min_api_version,
|
||||
max_version=max_api_version,
|
||||
endpoint_override=endpoint_override,
|
||||
default_microversion=version_request.default_microversion,
|
||||
**kwargs)
|
||||
if version_request.default_microversion:
|
||||
|
@ -98,8 +98,6 @@ class TestConnection(base.TestCase):
|
||||
conn.identity.__class__.__module__)
|
||||
self.assertEqual('openstack.image.v2._proxy',
|
||||
conn.image.__class__.__module__)
|
||||
self.assertEqual('openstack.network.v2._proxy',
|
||||
conn.network.__class__.__module__)
|
||||
self.assertEqual('openstack.object_store.v1._proxy',
|
||||
conn.object_store.__class__.__module__)
|
||||
self.assertEqual('openstack.load_balancer.v2._proxy',
|
||||
@ -222,6 +220,20 @@ class TestConnection(base.TestCase):
|
||||
profile=prof)
|
||||
|
||||
|
||||
class TestNetworkConnection(base.TestCase):
|
||||
# We need to do the neutron adapter test differently because it needs
|
||||
# to actually get a catalog.
|
||||
|
||||
def test_network_proxy(self):
|
||||
self.assertEqual(
|
||||
'openstack.network.v2._proxy',
|
||||
self.conn.network.__class__.__module__)
|
||||
self.assert_calls()
|
||||
self.assertEqual(
|
||||
"https://network.example.com/v2.0",
|
||||
self.conn.network.get_endpoint())
|
||||
|
||||
|
||||
class TestAuthorize(base.TestCase):
|
||||
|
||||
def test_authorize_works(self):
|
||||
|
@ -0,0 +1,5 @@
|
||||
---
|
||||
fixes:
|
||||
- |
|
||||
Added workaround for using neutron on older clouds where the version
|
||||
discovery document requires auth.
|
Loading…
x
Reference in New Issue
Block a user