Merge "Switch to using internal endpoints"

This commit is contained in:
Zuul 2022-02-10 17:11:50 +00:00 committed by Gerrit Code Review
commit 9a37ded919
8 changed files with 64 additions and 4 deletions

View File

@ -51,6 +51,7 @@ class TestCNClient(tests.TestCase):
self.patch(self.base, 'url_for').return_value = self.url
self.version = '2'
self.endpoint_type = 'internalURL'
def test_client_from_kwargs(self):
self.ctx.side_effect = RuntimeError
@ -83,7 +84,8 @@ class TestCNClient(tests.TestCase):
project_name=project_name,
project_domain_name=project_domain,
auth_url=auth_url,
endpoint_override=endpoint)
endpoint_override=endpoint,
endpoint_type=self.endpoint_type)
def test_client_from_ctx(self):
kwargs = {'version': self.version}
@ -95,6 +97,7 @@ class TestCNClient(tests.TestCase):
self.session.assert_called_once_with(auth=self.auth.return_value)
self.client.assert_called_once_with(version=self.version,
endpoint_override=self.url,
endpoint_type=self.endpoint_type,
session=self.session.return_value,
global_request_id=mock.ANY)

View File

@ -45,7 +45,7 @@ class TestPlacementClient(tests.TestCase):
def _add_default_kwargs(self, kwargs):
kwargs['endpoint_filter'] = {'service_type': 'placement',
'interface': 'public',
'interface': 'internal',
'region_name': 'region_foo'}
kwargs['headers'] = {'accept': 'application/json'}
kwargs['microversion'] = PLACEMENT_MICROVERSION

View File

@ -42,6 +42,12 @@ Possible values:
]
keystone_opts = [
cfg.StrOpt('endpoint_type',
default='admin',
choices=['public', 'admin', 'internal'],
help='Type of the keystone endpoint to use. This endpoint will '
'be looked up in the keystone catalog and should be one '
'of public, internal or admin.'),
cfg.StrOpt('keystone_client_version',
default='3',
help='Keystoneclient version'),
@ -106,12 +112,13 @@ class BlazarKeystoneClient(object):
if not kwargs.get('auth_url'):
kwargs['auth_url'] = base.url_for(
ctx.service_catalog, CONF.identity_service,
endpoint_interface='internal',
os_region_name=CONF.os_region_name)
if not kwargs.get('trust_id'):
try:
kwargs.setdefault('endpoint', base.url_for(
ctx.service_catalog, CONF.identity_service,
endpoint_interface='admin',
endpoint_interface=CONF.endpoint_type,
os_region_name=CONF.os_region_name))
except AttributeError:
raise manager_exceptions.NoManagementUrl()

View File

@ -26,7 +26,18 @@ from blazar import context
from blazar.utils.openstack import base
from blazar.utils.openstack import exceptions
neutron_opts = [
cfg.StrOpt('endpoint_type',
default='internal',
choices=['public', 'admin', 'internal'],
help='Type of the neutron endpoint to use. This endpoint will '
'be looked up in the keystone catalog and should be one '
'of public, internal or admin.'),
]
CONF = cfg.CONF
CONF.register_opts(neutron_opts, group='neutron')
LOG = logging.getLogger(__name__)
@ -73,6 +84,7 @@ class BlazarNeutronClient(object):
sess = session.Session(auth=auth)
kwargs.setdefault('session', sess)
kwargs.setdefault('region_name', region_name)
kwargs.setdefault('endpoint_type', CONF.neutron.endpoint_type + 'URL')
self.neutron = neutron_client.Client(**kwargs)

View File

@ -29,6 +29,12 @@ from blazar.utils.openstack import base
nova_opts = [
cfg.StrOpt('endpoint_type',
default='internal',
choices=['public', 'admin', 'internal'],
help='Type of the nova endpoint to use. This endpoint will be '
'looked up in the keystone catalog and should be one of '
'public, internal or admin.'),
cfg.StrOpt('nova_client_version',
default='2',
deprecated_group='DEFAULT',
@ -124,8 +130,10 @@ class BlazarNovaClient(object):
endpoint_override = endpoint_override or \
base.url_for(ctx.service_catalog,
CONF.nova.compute_service,
endpoint_interface=CONF.nova.endpoint_type,
os_region_name=CONF.os_region_name)
auth_url = base.url_for(ctx.service_catalog, CONF.identity_service,
CONF.endpoint_type,
os_region_name=CONF.os_region_name)
kwargs.setdefault('global_request_id', ctx.global_request_id)
@ -151,6 +159,7 @@ class BlazarNovaClient(object):
sess = session.Session(auth=auth)
kwargs.setdefault('session', sess)
kwargs.setdefault('endpoint_type', CONF.nova.endpoint_type + 'URL')
kwargs.setdefault('endpoint_override', endpoint_override)
kwargs.setdefault('version', version)
self.nova = nova_client.Client(**kwargs)

View File

@ -24,7 +24,17 @@ from blazar import context
from blazar.utils.openstack import base
from blazar.utils.openstack import exceptions
placement_opts = [
cfg.StrOpt('endpoint_type',
default='internal',
choices=['public', 'admin', 'internal'],
help='Type of the placement endpoint to use. This endpoint '
'will be looked up in the keystone catalog and should be '
'one of public, internal or admin.'),
]
CONF = cfg.CONF
CONF.register_opts(placement_opts, group='placement')
LOG = logging.getLogger(__name__)
PLACEMENT_MICROVERSION = 1.29
@ -78,7 +88,7 @@ class BlazarPlacementClient(object):
# service of our response body media type preferences.
headers = {'accept': 'application/json'}
kwargs.setdefault('service_type', 'placement')
kwargs.setdefault('interface', 'public')
kwargs.setdefault('interface', CONF.placement.endpoint_type)
kwargs.setdefault('additional_headers', headers)
kwargs.setdefault('region_name', region_name)
client = adapter.Adapter(sess, **kwargs)

View File

@ -43,7 +43,12 @@ function configure_blazar {
# Keystone authtoken
_blazar_setup_keystone $BLAZAR_CONF_FILE keystone_authtoken
iniset $BLAZAR_CONF_FILE neutron endpoint_type public
iniset $BLAZAR_CONF_FILE nova aggregate_freepool_name $BLAZAR_FREEPOOL_NAME
iniset $BLAZAR_CONF_FILE nova endpoint_type public
iniset $BLAZAR_CONF_FILE placement endpoint_type public
iniset $BLAZAR_CONF_FILE DEFAULT host $(ipv6_unquote $SERVICE_HOST)
iniset $BLAZAR_CONF_FILE DEFAULT debug $BLAZAR_DEBUG

View File

@ -0,0 +1,14 @@
---
fixes:
- |
Requests to other OpenStack services are now made using the internal
interface instead of the public interface. This fixes issues when public
endpoints are not reachable by Blazar. For more details, see `bug 1960335
<https://bugs.launchpad.net/blazar/+bug/1960335>`_.
This can be configured with the following options:
* ``[DEFAULT]/endpoint_type`` to configure the Keystone endpoint type
* ``[neutron]/endpoint_type`` to configure the Neutron endpoint type
* ``[nova]/endpoint_type`` to configure the Nova endpoint type
* ``[placement]/endpoint_type`` to configure the Placement endpoint type