Merge "NVP plugin:fix delete sec group when backend is out of sync"
This commit is contained in:
commit
6df373d9c0
@ -2055,8 +2055,12 @@ class NvpPluginV2(addr_pair_db.AllowedAddressPairsMixin,
|
||||
if super(NvpPluginV2, self)._get_port_security_group_bindings(
|
||||
context, filters):
|
||||
raise ext_sg.SecurityGroupInUse(id=security_group['id'])
|
||||
nvplib.delete_security_profile(self.cluster,
|
||||
security_group['id'])
|
||||
try:
|
||||
nvplib.delete_security_profile(
|
||||
self.cluster, security_group['id'])
|
||||
except q_exc.NotFound:
|
||||
LOG.info(_("Security group: %s was already deleted "
|
||||
"from backend"), security_group_id)
|
||||
return super(NvpPluginV2, self).delete_security_group(
|
||||
context, security_group_id)
|
||||
|
||||
|
@ -1142,13 +1142,13 @@ def update_security_group_rules(cluster, spid, rules):
|
||||
|
||||
def delete_security_profile(cluster, spid):
|
||||
path = "/ws.v1/security-profile/%s" % spid
|
||||
|
||||
try:
|
||||
do_request(HTTP_DELETE, path, cluster=cluster)
|
||||
except exception.NotFound as e:
|
||||
# FIXME(salv-orlando): should not raise NeutronException
|
||||
LOG.error(format_exception("Unknown", e, locals()))
|
||||
raise exception.NeutronException()
|
||||
except exception.NotFound:
|
||||
# This is not necessarily an error condition
|
||||
LOG.warn(_("Unable to find security profile %s on NSX backend"),
|
||||
spid)
|
||||
raise
|
||||
|
||||
|
||||
def _create_nat_match_obj(**kwargs):
|
||||
|
@ -486,6 +486,30 @@ class TestNiciraL3ExtensionManager(object):
|
||||
return []
|
||||
|
||||
|
||||
class TestNiciraL3SecGrpExtensionManager(TestNiciraL3ExtensionManager):
|
||||
"""A fake extension manager for L3 and Security Group extensions.
|
||||
|
||||
Includes also Nicira-specific L3 attributes.
|
||||
"""
|
||||
|
||||
def get_resources(self):
|
||||
resources = super(TestNiciraL3SecGrpExtensionManager,
|
||||
self).get_resources()
|
||||
resources.extend(secgrp.Securitygroup.get_resources())
|
||||
return resources
|
||||
|
||||
|
||||
def backup_l3_attribute_map():
|
||||
"""Return a backup of the original l3 attribute map."""
|
||||
return dict((res, attrs.copy()) for
|
||||
(res, attrs) in l3.RESOURCE_ATTRIBUTE_MAP.iteritems())
|
||||
|
||||
|
||||
def restore_l3_attribute_map(map_to_restore):
|
||||
"""Ensure changes made by fake ext mgrs are reverted."""
|
||||
l3.RESOURCE_ATTRIBUTE_MAP = map_to_restore
|
||||
|
||||
|
||||
class NiciraL3NatTest(test_l3_plugin.L3BaseForIntTests,
|
||||
NiciraPluginV2TestCase):
|
||||
|
||||
@ -498,7 +522,8 @@ class NiciraL3NatTest(test_l3_plugin.L3BaseForIntTests,
|
||||
self._l3_attribute_map_bk[item] = (
|
||||
l3.RESOURCE_ATTRIBUTE_MAP[item].copy())
|
||||
cfg.CONF.set_override('api_extensions_path', NVPEXT_PATH)
|
||||
self.addCleanup(self._restore_l3_attribute_map)
|
||||
l3_attribute_map_bk = backup_l3_attribute_map()
|
||||
self.addCleanup(restore_l3_attribute_map, l3_attribute_map_bk)
|
||||
ext_mgr = ext_mgr or TestNiciraL3ExtensionManager()
|
||||
super(NiciraL3NatTest, self).setUp(
|
||||
plugin=plugin, ext_mgr=ext_mgr, service_plugins=service_plugins)
|
||||
@ -1256,11 +1281,14 @@ class NiciraExtGwModeTestCase(NiciraPluginV2TestCase,
|
||||
|
||||
|
||||
class NiciraNeutronNVPOutOfSync(NiciraPluginV2TestCase,
|
||||
test_l3_plugin.L3NatTestCaseMixin):
|
||||
test_l3_plugin.L3NatTestCaseMixin,
|
||||
ext_sg.SecurityGroupsTestCase):
|
||||
|
||||
def setUp(self):
|
||||
ext_mgr = test_l3_plugin.L3TestExtensionManager()
|
||||
super(NiciraNeutronNVPOutOfSync, self).setUp(ext_mgr=ext_mgr)
|
||||
l3_attribute_map_bk = backup_l3_attribute_map()
|
||||
self.addCleanup(restore_l3_attribute_map, l3_attribute_map_bk)
|
||||
super(NiciraNeutronNVPOutOfSync, self).setUp(
|
||||
ext_mgr=TestNiciraL3SecGrpExtensionManager())
|
||||
|
||||
def test_delete_network_not_in_nvp(self):
|
||||
res = self._create_network('json', 'net1', True)
|
||||
@ -1414,6 +1442,16 @@ class NiciraNeutronNVPOutOfSync(NiciraPluginV2TestCase,
|
||||
self.assertEqual(router['router']['status'],
|
||||
constants.NET_STATUS_ERROR)
|
||||
|
||||
def test_delete_security_group_not_in_nvp(self):
|
||||
res = self._create_security_group('json', 'name', 'desc')
|
||||
sec_group = self.deserialize('json', res)
|
||||
self.fc._fake_securityprofile_dict.clear()
|
||||
req = self.new_delete_request(
|
||||
'security-groups',
|
||||
sec_group['security_group']['id'])
|
||||
res = req.get_response(self.ext_api)
|
||||
self.assertEqual(res.status_int, 204)
|
||||
|
||||
|
||||
class TestNiciraNetworkGateway(NiciraPluginV2TestCase,
|
||||
test_l2_gw.NetworkGatewayDbTestCase):
|
||||
|
Loading…
x
Reference in New Issue
Block a user