From 7dad96deb4ae66509d968465bcd1c852c6743bc1 Mon Sep 17 00:00:00 2001 From: Jeremy McDermond Date: Tue, 8 Dec 2015 10:14:09 -0800 Subject: [PATCH] Add option for nova endpoint type When the neutron notification to nova was updated to use novaclient the nova_url parameter was disabled. This prevents administrators from using anything but the publicURL as the proper endpoint to notify nova. This patch adds an option to pass on to novaclient for the endpoint_type so that the administrator can set the notification url to public, internal or admin. Change-Id: I405f761944449cab6b8c8895f98419f79cd74cad Closes-Bug: #1478471 DocImpact: Need to add a new option to the neutron configuration reference. --- neutron/common/config.py | 6 ++++++ neutron/notifiers/nova.py | 1 + neutron/tests/unit/notifiers/test_nova.py | 20 ++++++++++++++++++++ 3 files changed, 27 insertions(+) diff --git a/neutron/common/config.py b/neutron/common/config.py index 3fcc4c4c112..be57a2b34f2 100644 --- a/neutron/common/config.py +++ b/neutron/common/config.py @@ -204,6 +204,12 @@ nova_opts = [ cfg.StrOpt('region_name', help=_('Name of nova region to use. Useful if keystone manages' ' more than one region.')), + cfg.StrOpt('endpoint_type', + default='public', + 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.CONF.register_opts(nova_opts, group=NOVA_CONF_SECTION) diff --git a/neutron/notifiers/nova.py b/neutron/notifiers/nova.py index 2f9cfabb2cc..9abe6bcc90d 100644 --- a/neutron/notifiers/nova.py +++ b/neutron/notifiers/nova.py @@ -60,6 +60,7 @@ class Notifier(object): NOVA_API_VERSION, session=session, region_name=cfg.CONF.nova.region_name, + endpoint_type=cfg.CONF.nova.endpoint_type, extensions=extensions) self.batch_notifier = batch_notifier.BatchNotifier( cfg.CONF.send_events_interval, self.send_events) diff --git a/neutron/tests/unit/notifiers/test_nova.py b/neutron/tests/unit/notifiers/test_nova.py index 6fd8e3f7fd7..2481a59d847 100644 --- a/neutron/tests/unit/notifiers/test_nova.py +++ b/neutron/tests/unit/notifiers/test_nova.py @@ -309,3 +309,23 @@ class TestNovaNotify(base.BaseTestCase): event = self.nova_notifier.create_port_changed_event('delete_port', {}, returned_obj) self.assertEqual(expected_event, event) + + @mock.patch('novaclient.client.Client') + def test_endpoint_types(self, mock_client): + nova.Notifier() + mock_client.assert_called_once_with( + nova.NOVA_API_VERSION, + session=mock.ANY, + region_name=cfg.CONF.nova.region_name, + endpoint_type='public', + extensions=mock.ANY) + + mock_client.reset_mock() + cfg.CONF.set_override('endpoint_type', 'internal', 'nova') + nova.Notifier() + mock_client.assert_called_once_with( + nova.NOVA_API_VERSION, + session=mock.ANY, + region_name=cfg.CONF.nova.region_name, + endpoint_type='internal', + extensions=mock.ANY)