Fixed bug of deleting vm that is created with port
If resource group name is empty when the port is deleted, get it from nwa_data. The resource group name is corresponding with MAC address of the port. Change-Id: I1fecef6dae0edf4484bc5d160b17d1e7a430b3bf Closes-Bug: #1567139
This commit is contained in:
parent
cc4efc5ec3
commit
06a26a4c68
|
@ -20,6 +20,7 @@ from neutron.plugins.common import constants as plugin_const
|
|||
from neutron.plugins.ml2 import driver_api as api
|
||||
from oslo_log import helpers
|
||||
from oslo_log import log as logging
|
||||
import six
|
||||
|
||||
from networking_nec._i18n import _LE, _LI, _LW
|
||||
from networking_nec.common import utils
|
||||
|
@ -80,6 +81,25 @@ def check_segment_tfw(network_id, res_name, nwa_data):
|
|||
nwa_const.NWA_DEVICE_TFW)
|
||||
|
||||
|
||||
def get_resource_group_name(nwa_info, nwa_data, dev_type):
|
||||
device_id = nwa_info['device']['id']
|
||||
network_id = nwa_info['network']['id']
|
||||
mac = nwa_info['port']['mac']
|
||||
|
||||
found_mac = None
|
||||
found_dev_type = None
|
||||
dev_prefix = 'DEV_%s_%s_' % (device_id, network_id)
|
||||
for k, v in six.iteritems(nwa_data):
|
||||
if not k.startswith(dev_prefix):
|
||||
continue
|
||||
if v == mac:
|
||||
found_mac = k[len(dev_prefix):]
|
||||
elif v == dev_type:
|
||||
found_dev_type = k[len(dev_prefix):]
|
||||
if found_mac and found_dev_type:
|
||||
return found_dev_type
|
||||
|
||||
|
||||
class AgentProxyL2(object):
|
||||
|
||||
def __init__(self, agent_top, client):
|
||||
|
@ -398,6 +418,16 @@ class AgentProxyL2(object):
|
|||
'nwa_tenant_id': nwa_tenant_id})
|
||||
return {'result': 'FAILED'}
|
||||
|
||||
if not resource_group_name:
|
||||
resource_group_name = get_resource_group_name(
|
||||
nwa_info, nwa_data, nwa_const.NWA_DEVICE_GDV)
|
||||
if not resource_group_name:
|
||||
LOG.debug('skip delete_general_dev.'
|
||||
' No nwa device is associated with'
|
||||
' the port %s', nwa_info.get('port'))
|
||||
return {'result': 'FAILED'}
|
||||
nwa_info['resource_group_name'] = resource_group_name
|
||||
|
||||
gd_count = check_segment_gd(network_id, resource_group_name, nwa_data)
|
||||
|
||||
if 1 < gd_count:
|
||||
|
|
|
@ -0,0 +1,21 @@
|
|||
{
|
||||
"CreateTenant": true,
|
||||
"CreateTenantNW": true,
|
||||
"DEV_dhcpcea0d383-9268-577e-ba23-10e5e2d43886-315414a5-8d06-4d8e-8932-6f73665e5733": "device_id",
|
||||
"DEV_dhcpcea0d383-9268-577e-ba23-10e5e2d43886-315414a5-8d06-4d8e-8932-6f73665e5733_315414a5-8d06-4d8e-8932-6f73665e5733": "LNetA",
|
||||
"DEV_dhcpcea0d383-9268-577e-ba23-10e5e2d43886-315414a5-8d06-4d8e-8932-6f73665e5733_315414a5-8d06-4d8e-8932-6f73665e5733_OpenStack/DC/HA1": "GeneralDev",
|
||||
"DEV_dhcpcea0d383-9268-577e-ba23-10e5e2d43886-315414a5-8d06-4d8e-8932-6f73665e5733_315414a5-8d06-4d8e-8932-6f73665e5733_ip_address": "192.168.1.1",
|
||||
"DEV_dhcpcea0d383-9268-577e-ba23-10e5e2d43886-315414a5-8d06-4d8e-8932-6f73665e5733_315414a5-8d06-4d8e-8932-6f73665e5733_mac_address": "fa:16:3e:71:5c:2c",
|
||||
"DEV_dhcpcea0d383-9268-577e-ba23-10e5e2d43886-315414a5-8d06-4d8e-8932-6f73665e5733_device_owner": "network:dhcp",
|
||||
"NWA_tenant_id": "T01DC7483b391c2c647c59097240d59e705d4",
|
||||
"NW_315414a5-8d06-4d8e-8932-6f73665e5733": "LNetA",
|
||||
"NW_315414a5-8d06-4d8e-8932-6f73665e5733_network_id": "315414a5-8d06-4d8e-8932-6f73665e5733",
|
||||
"NW_315414a5-8d06-4d8e-8932-6f73665e5733_nwa_network_name": "LNW_BusinessVLAN_448",
|
||||
"NW_315414a5-8d06-4d8e-8932-6f73665e5733_subnet": "192.168.201.0",
|
||||
"NW_315414a5-8d06-4d8e-8932-6f73665e5733_subnet_id": "44345c6f-f597-48c7-b97b-a0d8df39059b",
|
||||
"VLAN_315414a5-8d06-4d8e-8932-6f73665e5733": "physical_network",
|
||||
"VLAN_315414a5-8d06-4d8e-8932-6f73665e5733_CreateVlan": "",
|
||||
"VLAN_315414a5-8d06-4d8e-8932-6f73665e5733_OpenStack/DC/HA1_GD": "physical_network",
|
||||
"VLAN_315414a5-8d06-4d8e-8932-6f73665e5733_OpenStack/DC/HA1_GD_VlanID": "685",
|
||||
"VLAN_315414a5-8d06-4d8e-8932-6f73665e5733_VlanID": ""
|
||||
}
|
|
@ -0,0 +1,26 @@
|
|||
{
|
||||
"device": {
|
||||
"id": "dhcpcea0d383-9268-577e-ba23-10e5e2d43886-315414a5-8d06-4d8e-8932-6f73665e5733",
|
||||
"owner": "compute:DC01_KVM01_ZONE01"
|
||||
},
|
||||
"network": {
|
||||
"id": "315414a5-8d06-4d8e-8932-6f73665e5733",
|
||||
"name": "LNetA",
|
||||
"vlan_type": "BusinessVLAN"
|
||||
},
|
||||
"nwa_tenant_id": "T01DC7483b391c2c647c59097240d59e705d4",
|
||||
"physical_network": "OpenStack/DC/HA1",
|
||||
"port": {
|
||||
"id": "4693c521-280c-4052-a95d-f2fd53052824",
|
||||
"ip": "192.168.1.3",
|
||||
"mac": "fa:16:3e:71:5c:2c"
|
||||
},
|
||||
"resource_group_name": null,
|
||||
"resource_group_name_nw": "OpenStack/DC/APP",
|
||||
"subnet": {
|
||||
"id": "85fcc2a6-a121-4635-814d-04df134090ab",
|
||||
"mask": "24",
|
||||
"netaddr": "192.168.1.0"
|
||||
},
|
||||
"tenant_id": "7483b391c2c647c59097240d59e705d4"
|
||||
}
|
|
@ -343,6 +343,47 @@ def test_check_segment():
|
|||
proxy_l2.check_segment(network_id, nwa_data)
|
||||
|
||||
|
||||
class TestGetResourceGroupName(base.TestNWAAgentBase):
|
||||
|
||||
def setUp(self):
|
||||
super(TestGetResourceGroupName, self).setUp()
|
||||
self.nwa_info = load_data_file('nwa_info_get_resource_group_name.json')
|
||||
self.nwa_data = load_data_file('nwa_data_get_resource_group_name.json')
|
||||
self.dev_type = 'GeneralDev'
|
||||
self.resource_group_name = 'OpenStack/DC/HA1'
|
||||
|
||||
def test_resource_group_name_found(self):
|
||||
self.assertEqual(
|
||||
proxy_l2.get_resource_group_name(self.nwa_info, self.nwa_data,
|
||||
self.dev_type),
|
||||
self.resource_group_name
|
||||
)
|
||||
|
||||
def test_mac_not_found(self):
|
||||
self.nwa_info['port']['mac'] = 'X'
|
||||
self.assertIsNone(
|
||||
proxy_l2.get_resource_group_name(self.nwa_info, self.nwa_data,
|
||||
self.dev_type))
|
||||
|
||||
def test_network_id_not_found(self):
|
||||
self.nwa_info['network']['id'] = 'X'
|
||||
self.assertIsNone(
|
||||
proxy_l2.get_resource_group_name(self.nwa_info, self.nwa_data,
|
||||
self.dev_type))
|
||||
|
||||
def test_device_id_not_found(self):
|
||||
self.nwa_info['device']['id'] = 'X'
|
||||
self.assertIsNone(
|
||||
proxy_l2.get_resource_group_name(self.nwa_info, self.nwa_data,
|
||||
self.dev_type))
|
||||
|
||||
def test_dev_type_not_found(self):
|
||||
dev_type = 'X'
|
||||
self.assertIsNone(
|
||||
proxy_l2.get_resource_group_name(self.nwa_info, self.nwa_data,
|
||||
dev_type))
|
||||
|
||||
|
||||
class TestNECNWANeutronAgentRpc(testscenarios.WithScenarios,
|
||||
base.TestNWAAgentBase):
|
||||
|
||||
|
|
Loading…
Reference in New Issue