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:
Frode Nordahl 2020-09-11 10:24:35 +02:00
parent b3f7acc571
commit 035c228f7c
No known key found for this signature in database
GPG Key ID: 6A5D59A3BA48373F
6 changed files with 38 additions and 8 deletions

View File

@ -23,6 +23,5 @@ config:
- ssl_ca
- ssl_cert
- ssl_key
- use-internal-endpoints
- use-syslog
- verbose

View File

@ -47,15 +47,20 @@ def session_from_identity_credentials(identity_credentials):
return session
def get_glance_client(session):
def get_glance_client(session, endpoint_type=None):
"""Get Glance Client from Keystone Session.
:param session: Keystone Session object
:type session: keystoneauth1.session.Session
:param endpoint_type: Type of endpoint the client should connect to
:type endpoint_type: Optional[str]
:returns: Glance 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):

View File

@ -73,6 +73,16 @@ class OctaviaDiskimageRetrofitCharm(charms_openstack.charm.OpenStackCharm):
project='services',
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=''):
"""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(
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(
series=self.config['retrofit-series'])

View File

@ -4,7 +4,7 @@
# https://github.com/openstack-charmers/release-tools
#
# Lint and unit test requirements
flake8>=2.2.4,<=2.4.1
flake8>=2.2.4
stestr>=2.2.0
requests>=2.18.4
charms.reactive

View File

@ -48,9 +48,19 @@ class TestGlanceRetrofitter(test_utils.PatchHelper):
def test_get_glance_client(self):
self.patch_object(glance_retrofitter.glanceclient, 'Client')
result = glance_retrofitter.get_glance_client('aSession')
self.Client.assert_called_once_with('2', session='aSession')
session = mock.MagicMock()
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())
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):
self.patch_object(glance_retrofitter.subprocess, 'check_output')

View File

@ -27,6 +27,10 @@ class TestOctaviaDiskimageRetrofitCharm(test_utils.PatchHelper):
super().setUp()
self.patch_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 = (
octavia_diskimage_retrofit.OctaviaDiskimageRetrofitCharm())
@ -144,7 +148,8 @@ class TestOctaviaDiskimageRetrofitCharm(test_utils.PatchHelper):
self.glance_retrofitter.session_from_identity_credentials.\
assert_called_once_with('aKeystone')
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.hookenv.env_proxy_settings.return_value = proxy_envvars