Add endpoint override conf option for neutron and nova

In some implementations overriding the neutron and/or nova endpoint returned in
the keystone catalog will be necessary.  Adding this will allow that to happen.

Change-Id: I66a9ed82a895b9fe282ef7b2c4bdfb954af0cc0c
This commit is contained in:
Trevor Vardeman 2016-02-02 11:32:34 -06:00
parent 6f786fdad7
commit 240931610f
7 changed files with 32 additions and 16 deletions

View File

@ -207,7 +207,11 @@
[nova]
# The name of the nova service in the keystone catalog
# service_name =
# Custom nova endpoint if override is necessary
# endpoint =
[neutron]
# The name of the neutron service in the keystone catalog
# service_name =
# Custom neutron endpoint if override is necessary
# endpoint =

View File

@ -27,11 +27,12 @@ class NovaAuth(object):
nova_client = None
@classmethod
def get_nova_client(cls, region, service_name=None):
def get_nova_client(cls, region, service_name=None, endpoint=None):
"""Create nova client object.
:param region: The region of the service
:param service_name: The name of the nova service in the catalog
:param endpoint: The endpoint of the service
:return: a Nova Client object.
:raises Exception: if the client cannot be created
"""
@ -40,10 +41,11 @@ class NovaAuth(object):
'session': keystone.get_session()}
if service_name:
kwargs['service_name'] = service_name
if endpoint:
kwargs['endpoint_override'] = endpoint
try:
cls.nova_client = nova_client.Client(
NOVA_VERSION, **kwargs
)
NOVA_VERSION, **kwargs)
except Exception:
with excutils.save_and_reraise_exception():
LOG.exception(_LE("Error creating Nova client."))
@ -54,11 +56,12 @@ class NeutronAuth(object):
neutron_client = None
@classmethod
def get_neutron_client(cls, region, service_name=None):
def get_neutron_client(cls, region, service_name=None, endpoint=None):
"""Create neutron client object.
:param region: The region of the service
:param service_name: The name of the neutron service in the catalog
:param endpoint: The endpoint of the service
:return: a Neutron Client object.
:raises Exception: if the client cannot be created
"""
@ -67,10 +70,11 @@ class NeutronAuth(object):
'session': keystone.get_session()}
if service_name:
kwargs['service_name'] = service_name
if endpoint:
kwargs['endpoint_override'] = endpoint
try:
cls.neutron_client = neutron_client.Client(
NEUTRON_VERSION, **kwargs
)
NEUTRON_VERSION, **kwargs)
except Exception:
with excutils.save_and_reraise_exception():
LOG.exception(_LE("Error creating Neutron client."))

View File

@ -346,13 +346,17 @@ keepalived_vrrp_opts = [
nova_opts = [
cfg.StrOpt('service_name',
help=_('The name of the nova service in the keystone catalog'))
help=_('The name of the nova service in the keystone catalog')),
cfg.StrOpt('endpoint', help=_('A new endpoint to override the endpoint '
'in the keystone catalog.'))
]
neutron_opts = [
cfg.StrOpt('service_name',
help=_('The name of the neutron service in the '
'keystone catalog'))
'keystone catalog')),
cfg.StrOpt('endpoint', help=_('A new endpoint to override the endpoint '
'in the keystone catalog.'))
]
# Register the configuration options

View File

@ -37,7 +37,8 @@ class VirtualMachineManager(compute_base.ComputeBase):
super(VirtualMachineManager, self).__init__()
# Must initialize nova api
region = CONF.os_region_name
self._nova_client = clients.NovaAuth.get_nova_client(region)
self._nova_client = clients.NovaAuth.get_nova_client(
region, endpoint=CONF.nova.endpoint)
self.manager = self._nova_client.servers
def build(self, name="amphora_name", amphora_flavor=None, image_id=None,

View File

@ -40,8 +40,8 @@ class AllowedAddressPairsDriver(neutron_base.BaseNeutronDriver):
super(AllowedAddressPairsDriver, self).__init__()
self._check_aap_loaded()
self.nova_client = clients.NovaAuth.get_nova_client(
cfg.CONF.os_region_name, service_name=cfg.CONF.nova.service_name
)
cfg.CONF.os_region_name, service_name=cfg.CONF.nova.service_name,
endpoint=cfg.CONF.nova.endpoint)
def _check_aap_loaded(self):
aliases = [ext.get('alias') for ext in self._extensions]

View File

@ -33,8 +33,9 @@ class BaseNeutronDriver(base.AbstractNetworkDriver):
def __init__(self):
self.sec_grp_enabled = True
self.neutron_client = clients.NeutronAuth.get_neutron_client(
cfg.CONF.os_region_name, service_name=cfg.CONF.neutron.service_name
)
cfg.CONF.os_region_name,
service_name=cfg.CONF.neutron.service_name,
endpoint=cfg.CONF.neutron.endpoint)
extensions = self.neutron_client.list_extensions()
self._extensions = extensions.get('extensions')
self._check_sec_grps()

View File

@ -55,7 +55,8 @@ class TestNovaAuth(base.TestCase):
# Getting the session again should return the same object
bc2 = clients.NovaAuth.get_nova_client(
region="test-region", service_name='novaEndpoint1')
region="test-region", service_name='novaEndpoint1',
endpoint="test-endpoint")
self.assertIs(bc1, bc2)
@ -92,5 +93,6 @@ class TestNeutronAuth(base.TestCase):
# Getting the session again should return the same object
bc2 = clients.NeutronAuth.get_neutron_client(
region="test-region", service_name="neutronEndpoint1")
region="test-region", service_name="neutronEndpoint1",
endpoint="test-endpoint")
self.assertIs(bc1, bc2)