Add use-internal-endpoints configuration option
Point OpenStack clients in the charm code at the requested endpoint type. Co-authored-by: Vern Hart <vern.hart@canonical.com> Change-Id: Iad176d8b6a05b0c3a5bf4df3fdbb8097757799d3 Closes-Bug: #1895088
This commit is contained in:
parent
b3f7acc571
commit
035c228f7c
|
@ -23,6 +23,5 @@ config:
|
||||||
- ssl_ca
|
- ssl_ca
|
||||||
- ssl_cert
|
- ssl_cert
|
||||||
- ssl_key
|
- ssl_key
|
||||||
- use-internal-endpoints
|
|
||||||
- use-syslog
|
- use-syslog
|
||||||
- verbose
|
- verbose
|
||||||
|
|
|
@ -47,15 +47,20 @@ def session_from_identity_credentials(identity_credentials):
|
||||||
return session
|
return session
|
||||||
|
|
||||||
|
|
||||||
def get_glance_client(session):
|
def get_glance_client(session, endpoint_type=None):
|
||||||
"""Get Glance Client from Keystone Session.
|
"""Get Glance Client from Keystone Session.
|
||||||
|
|
||||||
:param session: Keystone Session object
|
:param session: Keystone Session object
|
||||||
:type session: keystoneauth1.session.Session
|
:type session: keystoneauth1.session.Session
|
||||||
|
:param endpoint_type: Type of endpoint the client should connect to
|
||||||
|
:type endpoint_type: Optional[str]
|
||||||
:returns: Glance Client
|
:returns: Glance Client
|
||||||
:rtype: glanceclient.Client
|
:rtype: glanceclient.Client
|
||||||
"""
|
"""
|
||||||
return glanceclient.Client('2', session=session)
|
endpoint = session.auth.get_endpoint(
|
||||||
|
session, service_type='image', interface=endpoint_type or 'publicURL')
|
||||||
|
return glanceclient.Client(
|
||||||
|
'2', session=session, endpoint=endpoint)
|
||||||
|
|
||||||
|
|
||||||
def get_product_name(stream=None, variant=None, release=None, arch=None):
|
def get_product_name(stream=None, variant=None, release=None, arch=None):
|
||||||
|
|
|
@ -73,6 +73,16 @@ class OctaviaDiskimageRetrofitCharm(charms_openstack.charm.OpenStackCharm):
|
||||||
project='services',
|
project='services',
|
||||||
domain='service_domain')
|
domain='service_domain')
|
||||||
|
|
||||||
|
def endpoint_type(self):
|
||||||
|
"""Determine which endpoint type to use for OpenStack clients.
|
||||||
|
|
||||||
|
:returns: Endpoint type to use
|
||||||
|
:rtype: str
|
||||||
|
"""
|
||||||
|
if self.options.use_internal_endpoints:
|
||||||
|
return 'internalURL'
|
||||||
|
return 'publicURL'
|
||||||
|
|
||||||
def retrofit(self, keystone_endpoint, force=False, image_id=''):
|
def retrofit(self, keystone_endpoint, force=False, image_id=''):
|
||||||
"""Use ``octavia-diskimage-retrofit`` tool to retrofit an image.
|
"""Use ``octavia-diskimage-retrofit`` tool to retrofit an image.
|
||||||
|
|
||||||
|
@ -88,7 +98,8 @@ class OctaviaDiskimageRetrofitCharm(charms_openstack.charm.OpenStackCharm):
|
||||||
"""
|
"""
|
||||||
session = glance_retrofitter.session_from_identity_credentials(
|
session = glance_retrofitter.session_from_identity_credentials(
|
||||||
keystone_endpoint)
|
keystone_endpoint)
|
||||||
glance = glance_retrofitter.get_glance_client(session)
|
glance = glance_retrofitter.get_glance_client(
|
||||||
|
session, endpoint_type=self.endpoint_type())
|
||||||
|
|
||||||
ubuntu_release = self.get_ubuntu_release(
|
ubuntu_release = self.get_ubuntu_release(
|
||||||
series=self.config['retrofit-series'])
|
series=self.config['retrofit-series'])
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
# https://github.com/openstack-charmers/release-tools
|
# https://github.com/openstack-charmers/release-tools
|
||||||
#
|
#
|
||||||
# Lint and unit test requirements
|
# Lint and unit test requirements
|
||||||
flake8>=2.2.4,<=2.4.1
|
flake8>=2.2.4
|
||||||
stestr>=2.2.0
|
stestr>=2.2.0
|
||||||
requests>=2.18.4
|
requests>=2.18.4
|
||||||
charms.reactive
|
charms.reactive
|
||||||
|
|
|
@ -48,9 +48,19 @@ class TestGlanceRetrofitter(test_utils.PatchHelper):
|
||||||
|
|
||||||
def test_get_glance_client(self):
|
def test_get_glance_client(self):
|
||||||
self.patch_object(glance_retrofitter.glanceclient, 'Client')
|
self.patch_object(glance_retrofitter.glanceclient, 'Client')
|
||||||
result = glance_retrofitter.get_glance_client('aSession')
|
session = mock.MagicMock()
|
||||||
self.Client.assert_called_once_with('2', session='aSession')
|
result = glance_retrofitter.get_glance_client(
|
||||||
|
session, endpoint_type='aEndpointType')
|
||||||
|
session.auth.get_endpoint.assert_called_once_with(
|
||||||
|
session, service_type='image', interface='aEndpointType')
|
||||||
|
self.Client.assert_called_once_with(
|
||||||
|
'2', session=session, endpoint=session.auth.get_endpoint())
|
||||||
self.assertEquals(result, self.Client())
|
self.assertEquals(result, self.Client())
|
||||||
|
session.reset_mock()
|
||||||
|
result = glance_retrofitter.get_glance_client(
|
||||||
|
session)
|
||||||
|
session.auth.get_endpoint.assert_called_once_with(
|
||||||
|
session, service_type='image', interface='publicURL')
|
||||||
|
|
||||||
def test_get_product_name(self):
|
def test_get_product_name(self):
|
||||||
self.patch_object(glance_retrofitter.subprocess, 'check_output')
|
self.patch_object(glance_retrofitter.subprocess, 'check_output')
|
||||||
|
|
|
@ -27,6 +27,10 @@ class TestOctaviaDiskimageRetrofitCharm(test_utils.PatchHelper):
|
||||||
super().setUp()
|
super().setUp()
|
||||||
self.patch_release(
|
self.patch_release(
|
||||||
octavia_diskimage_retrofit.OctaviaDiskimageRetrofitCharm.release)
|
octavia_diskimage_retrofit.OctaviaDiskimageRetrofitCharm.release)
|
||||||
|
self.patch_object(octavia_diskimage_retrofit.ch_core.hookenv, 'config')
|
||||||
|
self.config.side_effect = lambda: {
|
||||||
|
'use-internal-endpoints': False,
|
||||||
|
}
|
||||||
self.target = (
|
self.target = (
|
||||||
octavia_diskimage_retrofit.OctaviaDiskimageRetrofitCharm())
|
octavia_diskimage_retrofit.OctaviaDiskimageRetrofitCharm())
|
||||||
|
|
||||||
|
@ -144,7 +148,8 @@ class TestOctaviaDiskimageRetrofitCharm(test_utils.PatchHelper):
|
||||||
self.glance_retrofitter.session_from_identity_credentials.\
|
self.glance_retrofitter.session_from_identity_credentials.\
|
||||||
assert_called_once_with('aKeystone')
|
assert_called_once_with('aKeystone')
|
||||||
self.glance_retrofitter.get_glance_client.assert_called_once_with(
|
self.glance_retrofitter.get_glance_client.assert_called_once_with(
|
||||||
self.glance_retrofitter.session_from_identity_credentials())
|
self.glance_retrofitter.session_from_identity_credentials(),
|
||||||
|
endpoint_type='publicURL')
|
||||||
self.glance_retrofitter.find_destination_image.return_value = \
|
self.glance_retrofitter.find_destination_image.return_value = \
|
||||||
[]
|
[]
|
||||||
self.hookenv.env_proxy_settings.return_value = proxy_envvars
|
self.hookenv.env_proxy_settings.return_value = proxy_envvars
|
||||||
|
|
Loading…
Reference in New Issue