LBaaS plugin bugfix
Correct behavior of LBaaS plugin while deleting members, creating and updating VIPs. Change-Id: Ibc8f17b4e1406669c108c28821f41e6282a7f9f1
This commit is contained in:
parent
b582c78def
commit
4f08e0a72e
|
@ -477,7 +477,7 @@ class EdgeLbDriver(object):
|
|||
LOG.debug('Create VIP %s', vip)
|
||||
|
||||
app_profile = convert_lbaas_app_profile(
|
||||
vip['id'], vip.get('session_persistence', {}),
|
||||
vip['id'], vip.get('session_persistence') or {},
|
||||
vip.get('protocol'))
|
||||
|
||||
if not pool_mapping:
|
||||
|
@ -520,7 +520,7 @@ class EdgeLbDriver(object):
|
|||
edge_vip_id = vip_mapping['edge_vse_id']
|
||||
app_profile_id = vip_mapping['edge_app_profile_id']
|
||||
app_profile = convert_lbaas_app_profile(
|
||||
vip['name'], vip.get('session_persistence', {}),
|
||||
vip['name'], vip.get('session_persistence') or {},
|
||||
vip.get('protocol'))
|
||||
try:
|
||||
self.vcns.update_app_profile(edge_id, app_profile_id, app_profile)
|
||||
|
@ -544,34 +544,33 @@ class EdgeLbDriver(object):
|
|||
|
||||
if not vip_mapping:
|
||||
LOG.error(_LE('No mapping found for vip %s'), vip['id'])
|
||||
return
|
||||
else:
|
||||
edge_id = vip_mapping['edge_id']
|
||||
edge_vse_id = vip_mapping['edge_vse_id']
|
||||
app_profile_id = vip_mapping['edge_app_profile_id']
|
||||
|
||||
edge_id = vip_mapping['edge_id']
|
||||
edge_vse_id = vip_mapping['edge_vse_id']
|
||||
app_profile_id = vip_mapping['edge_app_profile_id']
|
||||
try:
|
||||
self.vcns.delete_vip(edge_id, edge_vse_id)
|
||||
self._del_vip_as_secondary_ip(edge_id, vip['address'])
|
||||
self._del_vip_fw_rule(edge_id, vip_mapping['edge_fw_rule_id'])
|
||||
except nsxv_exc.ResourceNotFound:
|
||||
LOG.error(_LE('vip not found on edge: %s'), edge_id)
|
||||
except nsxv_exc.VcnsApiException:
|
||||
with excutils.save_and_reraise_exception():
|
||||
self._lb_driver.vip_failed(context, vip)
|
||||
LOG.error(
|
||||
_LE('Failed to delete vip on edge: %s'), edge_id)
|
||||
|
||||
try:
|
||||
self.vcns.delete_vip(edge_id, edge_vse_id)
|
||||
self._del_vip_as_secondary_ip(edge_id, vip['address'])
|
||||
self._del_vip_fw_rule(edge_id, vip_mapping['edge_fw_rule_id'])
|
||||
except nsxv_exc.ResourceNotFound:
|
||||
LOG.error(_LE('vip not found on edge: %s'), edge_id)
|
||||
except nsxv_exc.VcnsApiException:
|
||||
with excutils.save_and_reraise_exception():
|
||||
self._lb_driver.vip_failed(context, vip)
|
||||
LOG.error(
|
||||
_LE('Failed to delete vip on edge: %s'), edge_id)
|
||||
|
||||
try:
|
||||
self.vcns.delete_app_profile(edge_id, app_profile_id)
|
||||
except nsxv_exc.ResourceNotFound:
|
||||
LOG.error(_LE('app profile not found on edge: %s'), edge_id)
|
||||
except nsxv_exc.VcnsApiException:
|
||||
with excutils.save_and_reraise_exception():
|
||||
self._lb_driver.vip_failed(context, vip)
|
||||
LOG.error(
|
||||
_LE('Failed to delete app profile on Edge: %s'),
|
||||
edge_id)
|
||||
try:
|
||||
self.vcns.delete_app_profile(edge_id, app_profile_id)
|
||||
except nsxv_exc.ResourceNotFound:
|
||||
LOG.error(_LE('app profile not found on edge: %s'), edge_id)
|
||||
except nsxv_exc.VcnsApiException:
|
||||
with excutils.save_and_reraise_exception():
|
||||
self._lb_driver.vip_failed(context, vip)
|
||||
LOG.error(
|
||||
_LE('Failed to delete app profile on Edge: %s'),
|
||||
edge_id)
|
||||
|
||||
self._lb_driver.delete_vip_successful(context, vip)
|
||||
|
||||
|
@ -655,7 +654,8 @@ class EdgeLbDriver(object):
|
|||
LOG.error(_LE('Failed to update member on edge: %s'),
|
||||
pool_mapping['edge_id'])
|
||||
|
||||
self._lb_driver.member_successful(context, member)
|
||||
lb_plugin = self._get_lb_plugin()
|
||||
lb_plugin._delete_db_member(context, member['id'])
|
||||
|
||||
def create_pool_health_monitor(self, context, health_monitor, pool_id,
|
||||
pool_mapping, mon_mappings):
|
||||
|
|
|
@ -412,6 +412,10 @@ class TestEdgeLbDriver(base.BaseTestCase):
|
|||
mock_member_successful.assert_called_with(self.context, member_to)
|
||||
|
||||
def test_delete_member(self):
|
||||
def _del_member(context, member_id):
|
||||
self.assertEqual(context, self.context)
|
||||
self.assertEqual(member_id, MEMBER_ID)
|
||||
|
||||
lbaas_member = lbaas_member_maker(status='PENDING_DELETE')
|
||||
edge_pool = {
|
||||
'monitorId': [], 'name': POOL_ID, 'applicationRuleId': [],
|
||||
|
@ -422,23 +426,25 @@ class TestEdgeLbDriver(base.BaseTestCase):
|
|||
'transparent': False}
|
||||
|
||||
pool_mapping = {'edge_id': EDGE_ID, 'edge_pool_id': EDGE_POOL_ID}
|
||||
mock_lb_plugin = mock.Mock()
|
||||
|
||||
with contextlib.nested(
|
||||
mock.patch.object(self.edge_driver.vcns, 'get_pool'),
|
||||
mock.patch.object(self.edge_driver.vcns, 'update_pool'),
|
||||
mock.patch.object(self.edge_driver, '_update_pool_fw_rule'),
|
||||
mock.patch.object(self.edge_driver._lb_driver, 'member_successful')
|
||||
mock.patch.object(self.edge_driver, '_get_lb_plugin'),
|
||||
mock.patch.object(mock_lb_plugin, '_delete_db_member',
|
||||
side_effect=_del_member)
|
||||
) as (mock_get_pool, mock_update_pool, mock_upd_fw_rule,
|
||||
mock_member_successful):
|
||||
mock_get_lb_plugin, mock_del_member):
|
||||
|
||||
mock_get_pool.return_value = (None, edge_pool)
|
||||
self.edge_driver.delete_member(self.context, lbaas_member,
|
||||
pool_mapping)
|
||||
mock_get_lb_plugin.return_value = mock_lb_plugin
|
||||
edge_pool['member'] = []
|
||||
mock_update_pool.assert_called_with(EDGE_ID, EDGE_POOL_ID,
|
||||
edge_pool)
|
||||
mock_member_successful.assert_called_with(self.context,
|
||||
lbaas_member)
|
||||
|
||||
def test__update_pool_fw_rule_add(self):
|
||||
edge_fw_section = (
|
||||
|
|
Loading…
Reference in New Issue