Re-home get_neutron_client() into common/clients.py

Move in preparation for re-homing OvnProviderHelper class.

Change-Id: Idc627fd1c74637d59c47f1e8989cf0bdfa3bb75f
This commit is contained in:
Brian Haley 2020-04-29 16:15:10 -04:00
parent 5685895a1a
commit fd460cd0fa
4 changed files with 63 additions and 58 deletions

View File

@ -11,13 +11,16 @@
# under the License.
from keystoneauth1 import loading as ks_loading
from neutronclient.common import exceptions as n_exc
from neutronclient.neutron import client as neutron_client
from octavia_lib.api.drivers import exceptions as driver_exceptions
from oslo_config import cfg
from oslo_log import log as logging
from oslo_utils import excutils
from ovn_octavia_provider.common import constants
from ovn_octavia_provider.i18n import _
LOG = logging.getLogger(__name__)
CONF = cfg.CONF
@ -96,3 +99,21 @@ class NeutronAuth(metaclass=Singleton):
except Exception:
with excutils.save_and_reraise_exception():
LOG.exception("Error creating Neutron client.")
def get_neutron_client():
try:
return NeutronAuth(
endpoint=CONF.neutron.endpoint,
region=CONF.neutron.region_name,
endpoint_type=CONF.neutron.endpoint_type,
service_name=CONF.neutron.service_name,
insecure=CONF.neutron.insecure,
ca_cert=CONF.neutron.ca_certificates_file,
).neutron_client
except n_exc.NeutronClientException as e:
msg = _('Cannot inialize Neutron Client. Exception: %s. '
'Please verify Neutron service configuration '
'in Octavia API configuration.') % e
raise driver_exceptions.DriverError(
operator_fault_string=msg)

View File

@ -47,24 +47,6 @@ CONF = cfg.CONF # Gets Octavia Conf as it runs under o-api domain
LOG = logging.getLogger(__name__)
def get_neutron_client():
try:
return clients.NeutronAuth(
endpoint=CONF.neutron.endpoint,
region=CONF.neutron.region_name,
endpoint_type=CONF.neutron.endpoint_type,
service_name=CONF.neutron.service_name,
insecure=CONF.neutron.insecure,
ca_cert=CONF.neutron.ca_certificates_file,
).neutron_client
except n_exc.NeutronClientException as e:
msg = _('Cannot inialize Neutron Client. Exception: %s. '
'Please verify Neutron service configuration '
'in Octavia API configuration.') % e
raise driver_exceptions.DriverError(
operator_fault_string=msg)
class LogicalRouterPortEvent(row_event.RowEvent):
def __init__(self, driver):
@ -519,7 +501,7 @@ class OvnProviderHelper(object):
if network_id:
ls_name = utils.ovn_name(network_id)
else:
neutron_client = get_neutron_client()
neutron_client = clients.get_neutron_client()
try:
subnet = neutron_client.show_subnet(subnet_id)
ls_name = utils.ovn_name(subnet['subnet']['network_id'])
@ -643,7 +625,7 @@ class OvnProviderHelper(object):
return self._add_lb_to_lr_association(ovn_lb, ovn_lr, lr_ref)
def _find_ls_for_lr(self, router):
neutron_client = get_neutron_client()
neutron_client = clients.get_neutron_client()
ls = []
for port in router.ports:
if port.gateway_chassis:
@ -814,7 +796,7 @@ class OvnProviderHelper(object):
def lb_create(self, loadbalancer, protocol=None):
port = None
neutron_client = get_neutron_client()
neutron_client = clients.get_neutron_client()
if loadbalancer.get(constants.VIP_PORT_ID):
# In case we don't have vip_network_id
port = neutron_client.show_port(
@ -1718,7 +1700,7 @@ class OvnProviderHelper(object):
vip_d[constants.VIP_ADDRESS])
except KeyError:
pass
neutron_client = get_neutron_client()
neutron_client = clients.get_neutron_client()
try:
return neutron_client.create_port(port)
except n_exc.IpAddressAlreadyAllocatedClient:
@ -1743,7 +1725,7 @@ class OvnProviderHelper(object):
return {'port': port}
def delete_vip_port(self, port_id):
neutron_client = get_neutron_client()
neutron_client = clients.get_neutron_client()
try:
neutron_client.delete_port(port_id)
except n_exc.PortNotFoundClient:
@ -1784,7 +1766,7 @@ class OvnProviderHelper(object):
return
# Find out if member has FIP assigned.
neutron_client = get_neutron_client()
neutron_client = clients.get_neutron_client()
try:
subnet = neutron_client.show_subnet(info['subnet_id'])
ls_name = utils.ovn_name(subnet['subnet']['network_id'])

View File

@ -32,6 +32,7 @@ from ovsdbapp.schema.ovn_northbound import impl_idl as idl_ovn
# mechanism driver and l3 plugin.
from neutron.tests.functional import base
from ovn_octavia_provider import agent as ovn_agent
from ovn_octavia_provider.common import clients
from ovn_octavia_provider.common import constants as ovn_const
from ovn_octavia_provider import driver as ovn_driver
from ovn_octavia_provider.ovsdb import impl_idl_ovn
@ -60,8 +61,8 @@ class TestOvnOctaviaBase(
self._o_driver_lib = self.ovn_driver._ovn_helper._octavia_driver_lib
self._o_driver_lib.update_loadbalancer_status = mock.Mock()
self.fake_neutron_client = mock.MagicMock()
ovn_driver.get_neutron_client = mock.MagicMock()
ovn_driver.get_neutron_client.return_value = self.fake_neutron_client
clients.get_neutron_client = mock.MagicMock()
clients.get_neutron_client.return_value = self.fake_neutron_client
self.fake_neutron_client.show_subnet = self._mock_show_subnet
self.fake_neutron_client.list_ports = self._mock_list_ports
self.fake_neutron_client.show_port = self._mock_show_port

View File

@ -24,6 +24,7 @@ from oslo_utils import uuidutils
from ovsdbapp.backend.ovs_idl import idlutils
from ovn_octavia_provider import agent as ovn_agent
from ovn_octavia_provider.common import clients
from ovn_octavia_provider.common import constants as ovn_const
from ovn_octavia_provider import driver as ovn_driver
from ovn_octavia_provider.tests.unit import fakes
@ -582,7 +583,7 @@ class TestOvnProviderDriver(TestOvnOctaviaBase):
self.mock_add_request.assert_called_once_with(expected_dict)
def test_create_vip_port(self):
with mock.patch.object(ovn_driver, 'get_neutron_client'):
with mock.patch.object(clients, 'get_neutron_client'):
port_dict = self.driver.create_vip_port(self.loadbalancer_id,
self.project_id,
self.vip_dict)
@ -597,7 +598,7 @@ class TestOvnProviderDriver(TestOvnOctaviaBase):
self.assertEqual(value, self.vip_output[key])
def test_create_vip_port_exception(self):
with mock.patch.object(ovn_driver, 'get_neutron_client',
with mock.patch.object(clients, 'get_neutron_client',
side_effect=[RuntimeError]):
self.assertRaises(
exceptions.DriverError,
@ -863,7 +864,7 @@ class TestOvnProviderHelper(TestOvnOctaviaBase):
self.helper.ovn_nbdb_api.db_set.assert_called_once_with(
'Load_Balancer', self.ovn_lb.uuid, ('protocol', 'tcp'))
@mock.patch('ovn_octavia_provider.driver.get_neutron_client')
@mock.patch('ovn_octavia_provider.common.clients.get_neutron_client')
def test_lb_create_disabled(self, net_cli):
self.lb['admin_state_up'] = False
net_cli.return_value.list_ports.return_value = self.ports
@ -880,7 +881,7 @@ class TestOvnProviderHelper(TestOvnOctaviaBase):
name=mock.ANY,
protocol=None)
@mock.patch('ovn_octavia_provider.driver.get_neutron_client')
@mock.patch('ovn_octavia_provider.common.clients.get_neutron_client')
def test_lb_create_enabled(self, net_cli):
self.lb['admin_state_up'] = True
net_cli.return_value.list_ports.return_value = self.ports
@ -897,7 +898,7 @@ class TestOvnProviderHelper(TestOvnOctaviaBase):
name=mock.ANY,
protocol=None)
@mock.patch('ovn_octavia_provider.driver.get_neutron_client')
@mock.patch('ovn_octavia_provider.common.clients.get_neutron_client')
def test_lb_create_on_multi_protocol(self, net_cli):
"""This test situation when new protocol is added
@ -927,7 +928,7 @@ class TestOvnProviderHelper(TestOvnOctaviaBase):
network_id=self.lb['vip_network_id']),
mock.call(self.ovn_lb, associate=True, network_id='foo')])
@mock.patch('ovn_octavia_provider.driver.get_neutron_client')
@mock.patch('ovn_octavia_provider.common.clients.get_neutron_client')
@mock.patch.object(ovn_driver.OvnProviderHelper, 'delete_vip_port')
def test_lb_create_exception(self, del_port, net_cli):
self.helper._find_ovn_lbs.side_effect = [RuntimeError]
@ -939,7 +940,7 @@ class TestOvnProviderHelper(TestOvnOctaviaBase):
constants.ERROR)
del_port.assert_called_once_with(self.ports.get('ports')[0]['id'])
@mock.patch('ovn_octavia_provider.driver.get_neutron_client')
@mock.patch('ovn_octavia_provider.common.clients.get_neutron_client')
@mock.patch.object(ovn_driver.OvnProviderHelper, 'delete_vip_port')
def test_lb_delete(self, del_port, net_cli):
net_cli.return_value.delete_port.return_value = None
@ -975,7 +976,7 @@ class TestOvnProviderHelper(TestOvnOctaviaBase):
self.ovn_lb.uuid)
del_port.assert_called_once_with('foo_port')
@mock.patch('ovn_octavia_provider.driver.get_neutron_client')
@mock.patch('ovn_octavia_provider.common.clients.get_neutron_client')
@mock.patch.object(ovn_driver.OvnProviderHelper, 'delete_vip_port')
def test_lb_delete_port_not_found(self, del_port, net_cli):
net_cli.return_value.delete_port.side_effect = (
@ -989,7 +990,7 @@ class TestOvnProviderHelper(TestOvnOctaviaBase):
self.ovn_lb.uuid)
del_port.assert_called_once_with('foo_port')
@mock.patch('ovn_octavia_provider.driver.get_neutron_client')
@mock.patch('ovn_octavia_provider.common.clients.get_neutron_client')
def test_lb_delete_cascade(self, net_cli):
net_cli.return_value.delete_port.return_value = None
self.lb['cascade'] = True
@ -1007,7 +1008,7 @@ class TestOvnProviderHelper(TestOvnOctaviaBase):
self.helper.ovn_nbdb_api.lb_del.assert_called_once_with(
self.ovn_lb.uuid)
@mock.patch('ovn_octavia_provider.driver.get_neutron_client')
@mock.patch('ovn_octavia_provider.common.clients.get_neutron_client')
def test_lb_delete_ls_lr(self, net_cli):
self.ovn_lb.external_ids.update({
ovn_const.LB_EXT_IDS_LR_REF_KEY: self.router.name,
@ -1024,7 +1025,7 @@ class TestOvnProviderHelper(TestOvnOctaviaBase):
self.helper.ovn_nbdb_api.lr_lb_del.assert_called_once_with(
self.router.uuid, self.ovn_lb.uuid)
@mock.patch('ovn_octavia_provider.driver.get_neutron_client')
@mock.patch('ovn_octavia_provider.common.clients.get_neutron_client')
def test_lb_delete_multiple_protocols(self, net_cli):
net_cli.return_value.delete_port.return_value = None
self.mock_find_ovn_lbs.stop()
@ -1876,7 +1877,7 @@ class TestOvnProviderHelper(TestOvnOctaviaBase):
self.assertEqual(status['listeners'][0]['id'],
'listener1')
@mock.patch('ovn_octavia_provider.driver.get_neutron_client')
@mock.patch('ovn_octavia_provider.common.clients.get_neutron_client')
def test_logical_router_port_event_create(self, net_cli):
self.router_port_event = ovn_driver.LogicalRouterPortEvent(
self.helper)
@ -1890,7 +1891,7 @@ class TestOvnProviderHelper(TestOvnOctaviaBase):
'type': 'lb_create_lrp_assoc'}
self.mock_add_request.assert_called_once_with(expected)
@mock.patch('ovn_octavia_provider.driver.get_neutron_client')
@mock.patch('ovn_octavia_provider.common.clients.get_neutron_client')
def test_logical_router_port_event_delete(self, net_cli):
self.router_port_event = ovn_driver.LogicalRouterPortEvent(
self.helper)
@ -1904,7 +1905,7 @@ class TestOvnProviderHelper(TestOvnOctaviaBase):
'type': 'lb_delete_lrp_assoc'}
self.mock_add_request.assert_called_once_with(expected)
@mock.patch('ovn_octavia_provider.driver.get_neutron_client')
@mock.patch('ovn_octavia_provider.common.clients.get_neutron_client')
def test_logical_router_port_event_gw_port(self, net_cli):
self.router_port_event = ovn_driver.LogicalRouterPortEvent(
self.helper)
@ -2091,7 +2092,7 @@ class TestOvnProviderHelper(TestOvnOctaviaBase):
for lb in self.network.load_balancer:
self.assertNotIn(lb, net_lb)
@mock.patch('ovn_octavia_provider.driver.get_neutron_client')
@mock.patch('ovn_octavia_provider.common.clients.get_neutron_client')
def test__find_ls_for_lr(self, net_cli):
fake_subnet1 = fakes.FakeSubnet.create_one_subnet()
fake_subnet1['network_id'] = 'foo1'
@ -2111,7 +2112,7 @@ class TestOvnProviderHelper(TestOvnOctaviaBase):
self.assertListEqual(['neutron-foo1', 'neutron-foo2'],
res)
@mock.patch('ovn_octavia_provider.driver.get_neutron_client')
@mock.patch('ovn_octavia_provider.common.clients.get_neutron_client')
def test__find_ls_for_lr_subnet_not_found(self, net_cli):
fake_subnet1 = fakes.FakeSubnet.create_one_subnet()
fake_subnet1['network_id'] = 'foo1'
@ -2130,7 +2131,7 @@ class TestOvnProviderHelper(TestOvnOctaviaBase):
res = self.helper._find_ls_for_lr(self.router)
self.assertListEqual(['neutron-foo1'], res)
@mock.patch('ovn_octavia_provider.driver.get_neutron_client')
@mock.patch('ovn_octavia_provider.common.clients.get_neutron_client')
def test__find_ls_for_lr_gw_port(self, net_cli):
p1 = fakes.FakeOVNPort.create_one_port(attrs={
'gateway_chassis': ['foo-gw-chassis'],
@ -2165,7 +2166,7 @@ class TestOvnProviderHelper(TestOvnOctaviaBase):
add.assert_not_called()
delete.assert_called_once_with(self.ref_lb1, self.router, lr_ref)
@mock.patch('ovn_octavia_provider.driver.get_neutron_client')
@mock.patch('ovn_octavia_provider.common.clients.get_neutron_client')
def test__del_lb_to_lr_association(self, net_cli):
lr_ref = self.ref_lb1.external_ids.get(
ovn_const.LB_EXT_IDS_LR_REF_KEY)
@ -2184,7 +2185,7 @@ class TestOvnProviderHelper(TestOvnOctaviaBase):
expected_calls)
self.helper.ovn_nbdb_api.db_remove.assert_not_called()
@mock.patch('ovn_octavia_provider.driver.get_neutron_client')
@mock.patch('ovn_octavia_provider.common.clients.get_neutron_client')
def test__del_lb_to_lr_association_no_lr_ref(self, net_cli):
lr_ref = ''
self.helper._del_lb_to_lr_association(
@ -2193,7 +2194,7 @@ class TestOvnProviderHelper(TestOvnOctaviaBase):
self.helper.ovn_nbdb_api.db_remove.assert_not_called()
self.helper.ovn_nbdb_api.lr_lb_del.assert_not_called()
@mock.patch('ovn_octavia_provider.driver.get_neutron_client')
@mock.patch('ovn_octavia_provider.common.clients.get_neutron_client')
def test__del_lb_to_lr_association_lr_ref_empty_after(self, net_cli):
lr_ref = self.router.name
self.helper._del_lb_to_lr_association(
@ -2318,7 +2319,7 @@ class TestOvnProviderHelper(TestOvnOctaviaBase):
self.helper.ovn_nbdb_api.db_set.assert_called_once_with(
'Load_Balancer', self.ref_lb1.uuid, ('external_ids', ls_refs))
@mock.patch('ovn_octavia_provider.driver.get_neutron_client')
@mock.patch('ovn_octavia_provider.common.clients.get_neutron_client')
def test__update_lb_to_ls_association_subnet(self, net_cli):
self._update_lb_to_ls_association.stop()
subnet = fakes.FakeSubnet.create_one_subnet(
@ -2390,7 +2391,7 @@ class TestOvnProviderHelper(TestOvnOctaviaBase):
('external_ids', {'ls_refs': '{}'}))
self.helper.ovn_nbdb_api.ls_lb_del.assert_not_called()
@mock.patch('ovn_octavia_provider.driver.get_neutron_client')
@mock.patch('ovn_octavia_provider.common.clients.get_neutron_client')
def test__update_lb_to_ls_association_network_dis_net_not_found(
self, net_cli):
net_cli.return_value.show_subnet.side_effect = n_exc.NotFound
@ -2575,7 +2576,7 @@ class TestOvnProviderHelper(TestOvnOctaviaBase):
'172.26.21.20:80': '192.168.2.149:1010'}))]
self.helper.ovn_nbdb_api.assert_has_calls(calls)
@mock.patch('ovn_octavia_provider.driver.get_neutron_client')
@mock.patch('ovn_octavia_provider.common.clients.get_neutron_client')
def test_handle_member_dvr_lb_has_no_fip(self, net_cli):
lb = mock.MagicMock()
info = {
@ -2590,7 +2591,7 @@ class TestOvnProviderHelper(TestOvnOctaviaBase):
net_cli.show_subnet.assert_not_called()
self.helper.ovn_nbdb_api.db_clear.assert_not_called()
@mock.patch('ovn_octavia_provider.driver.get_neutron_client')
@mock.patch('ovn_octavia_provider.common.clients.get_neutron_client')
def test_handle_member_dvr_lb_fip_no_ls_ports(self, net_cli):
lb = mock.MagicMock()
info = {
@ -2610,7 +2611,7 @@ class TestOvnProviderHelper(TestOvnOctaviaBase):
self.helper.handle_member_dvr(info)
self.helper.ovn_nbdb_api.db_clear.assert_not_called()
@mock.patch('ovn_octavia_provider.driver.get_neutron_client')
@mock.patch('ovn_octavia_provider.common.clients.get_neutron_client')
def test_handle_member_dvr_lb_fip_no_subnet(self, net_cli):
lb = mock.MagicMock()
info = {
@ -2626,7 +2627,7 @@ class TestOvnProviderHelper(TestOvnOctaviaBase):
self.helper.handle_member_dvr(info)
self.helper.ovn_nbdb_api.db_clear.assert_not_called()
@mock.patch('ovn_octavia_provider.driver.get_neutron_client')
@mock.patch('ovn_octavia_provider.common.clients.get_neutron_client')
def test_handle_member_dvr_lb_fip_no_ls(self, net_cli):
lb = mock.MagicMock()
info = {
@ -2702,11 +2703,11 @@ class TestOvnProviderHelper(TestOvnOctaviaBase):
'floatingip': {'description': 'bar'}}))
self.helper.ovn_nbdb_api.db_clear.assert_not_called()
@mock.patch('ovn_octavia_provider.driver.get_neutron_client')
@mock.patch('ovn_octavia_provider.common.clients.get_neutron_client')
def test_handle_member_dvr_lb_fip_member_added(self, net_cli):
self._test_handle_member_dvr_lb_fip(net_cli)
@mock.patch('ovn_octavia_provider.driver.get_neutron_client')
@mock.patch('ovn_octavia_provider.common.clients.get_neutron_client')
def test_handle_member_dvr_lb_fip_member_deleted(self, net_cli):
self._test_handle_member_dvr_lb_fip(
net_cli, action=ovn_const.REQ_INFO_MEMBER_DELETED)
@ -2735,7 +2736,7 @@ class TestOvnProviderHelper(TestOvnOctaviaBase):
'network_id': self.vip_dict['vip_network_id'],
'admin_state_up': True,
'project_id': self.project_id}}
with mock.patch.object(ovn_driver, 'get_neutron_client') as net_cli:
with mock.patch.object(clients, 'get_neutron_client') as net_cli:
self.vip_dict['vip_address'] = '10.1.10.1'
self.helper.create_vip_port(self.project_id,
self.loadbalancer_id,
@ -2753,7 +2754,7 @@ class TestOvnProviderHelper(TestOvnOctaviaBase):
'network_id': self.vip_dict['vip_network_id'],
'admin_state_up': True,
'project_id': self.project_id}}
with mock.patch.object(ovn_driver, 'get_neutron_client') as net_cli:
with mock.patch.object(clients, 'get_neutron_client') as net_cli:
self.helper.create_vip_port(self.project_id,
self.loadbalancer_id,
self.vip_dict)
@ -2761,7 +2762,7 @@ class TestOvnProviderHelper(TestOvnOctaviaBase):
mock.call().create_port(expected_dict)]
net_cli.assert_has_calls(expected_call)
@mock.patch('ovn_octavia_provider.driver.get_neutron_client')
@mock.patch('ovn_octavia_provider.common.clients.get_neutron_client')
def test_create_vip_port_vip_selected_already_exist(self, net_cli):
net_cli.return_value.create_port.side_effect = [
n_exc.IpAddressAlreadyAllocatedClient]
@ -2787,7 +2788,7 @@ class TestOvnProviderHelper(TestOvnOctaviaBase):
self.loadbalancer_id))]
net_cli.assert_has_calls(expected_call)
@mock.patch('ovn_octavia_provider.driver.get_neutron_client')
@mock.patch('ovn_octavia_provider.common.clients.get_neutron_client')
def test_create_vip_port_vip_selected_other_allocation_exist(
self, net_cli):
net_cli.return_value.create_port.side_effect = [