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_cert
|
||||
- ssl_key
|
||||
- use-internal-endpoints
|
||||
- use-syslog
|
||||
- verbose
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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'])
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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')
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue