Merge "BigSwitch: Fix tenant_id for shared net requests"
This commit is contained in:
commit
fe6320c2af
@ -312,6 +312,11 @@ class NeutronRestProxyV2Base(db_base_plugin_v2.NeutronDbPluginV2,
|
|||||||
return v
|
return v
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
def _get_port_net_tenantid(self, context, port):
|
||||||
|
net = super(NeutronRestProxyV2Base,
|
||||||
|
self).get_network(context, port["network_id"])
|
||||||
|
return net['tenant_id']
|
||||||
|
|
||||||
|
|
||||||
class NeutronRestProxyV2(NeutronRestProxyV2Base,
|
class NeutronRestProxyV2(NeutronRestProxyV2Base,
|
||||||
extradhcpopt_db.ExtraDhcpOptMixin,
|
extradhcpopt_db.ExtraDhcpOptMixin,
|
||||||
@ -505,8 +510,7 @@ class NeutronRestProxyV2(NeutronRestProxyV2Base,
|
|||||||
self._process_port_create_extra_dhcp_opts(context, new_port,
|
self._process_port_create_extra_dhcp_opts(context, new_port,
|
||||||
dhcp_opts)
|
dhcp_opts)
|
||||||
new_port = self._extend_port_dict_binding(context, new_port)
|
new_port = self._extend_port_dict_binding(context, new_port)
|
||||||
net = super(NeutronRestProxyV2,
|
net_tenant_id = self._get_port_net_tenantid(context, new_port)
|
||||||
self).get_network(context, new_port["network_id"])
|
|
||||||
if self.add_meta_server_route:
|
if self.add_meta_server_route:
|
||||||
if new_port['device_owner'] == 'network:dhcp':
|
if new_port['device_owner'] == 'network:dhcp':
|
||||||
destination = METADATA_SERVER_IP + '/32'
|
destination = METADATA_SERVER_IP + '/32'
|
||||||
@ -514,7 +518,7 @@ class NeutronRestProxyV2(NeutronRestProxyV2Base,
|
|||||||
|
|
||||||
# create on network ctrl
|
# create on network ctrl
|
||||||
mapped_port = self._map_state_and_status(new_port)
|
mapped_port = self._map_state_and_status(new_port)
|
||||||
self.servers.rest_create_port(net["tenant_id"],
|
self.servers.rest_create_port(net_tenant_id,
|
||||||
new_port["network_id"],
|
new_port["network_id"],
|
||||||
mapped_port)
|
mapped_port)
|
||||||
return new_port
|
return new_port
|
||||||
@ -589,9 +593,11 @@ class NeutronRestProxyV2(NeutronRestProxyV2Base,
|
|||||||
ctrl_update_required = True
|
ctrl_update_required = True
|
||||||
|
|
||||||
if ctrl_update_required:
|
if ctrl_update_required:
|
||||||
|
# tenant_id must come from network in case network is shared
|
||||||
|
net_tenant_id = self._get_port_net_tenantid(context, new_port)
|
||||||
new_port = self._extend_port_dict_binding(context, new_port)
|
new_port = self._extend_port_dict_binding(context, new_port)
|
||||||
mapped_port = self._map_state_and_status(new_port)
|
mapped_port = self._map_state_and_status(new_port)
|
||||||
self.servers.rest_update_port(new_port["tenant_id"],
|
self.servers.rest_update_port(net_tenant_id,
|
||||||
new_port["network_id"],
|
new_port["network_id"],
|
||||||
mapped_port)
|
mapped_port)
|
||||||
|
|
||||||
@ -621,15 +627,14 @@ class NeutronRestProxyV2(NeutronRestProxyV2Base,
|
|||||||
|
|
||||||
def _delete_port(self, context, port_id):
|
def _delete_port(self, context, port_id):
|
||||||
port = super(NeutronRestProxyV2, self).get_port(context, port_id)
|
port = super(NeutronRestProxyV2, self).get_port(context, port_id)
|
||||||
tenant_id = port['tenant_id']
|
|
||||||
net_id = port['network_id']
|
# Tenant ID must come from network in case the network is shared
|
||||||
if tenant_id == '':
|
tenant_id = self._get_port_net_tenantid(context, port)
|
||||||
net = super(NeutronRestProxyV2, self).get_network(context, net_id)
|
|
||||||
tenant_id = net['tenant_id']
|
|
||||||
# Delete from DB
|
# Delete from DB
|
||||||
ret_val = super(NeutronRestProxyV2,
|
ret_val = super(NeutronRestProxyV2,
|
||||||
self)._delete_port(context, port_id)
|
self)._delete_port(context, port_id)
|
||||||
self.servers.rest_delete_port(tenant_id, net_id, port_id)
|
self.servers.rest_delete_port(tenant_id, port['network_id'], port_id)
|
||||||
return ret_val
|
return ret_val
|
||||||
|
|
||||||
def create_subnet(self, context, subnet):
|
def create_subnet(self, context, subnet):
|
||||||
|
@ -118,6 +118,30 @@ class TestBigSwitchProxyPortsV2(test_plugin.TestPortsV2,
|
|||||||
port = self._get_ports(n['network']['id'])[0]
|
port = self._get_ports(n['network']['id'])[0]
|
||||||
self.assertEqual('ACTIVE', port['status'])
|
self.assertEqual('ACTIVE', port['status'])
|
||||||
|
|
||||||
|
def test_correct_shared_net_tenant_id(self):
|
||||||
|
# tenant_id in port requests should match network tenant_id instead
|
||||||
|
# of port tenant_id
|
||||||
|
def rest_port_op(self, ten_id, netid, port):
|
||||||
|
if ten_id != 'SHARED':
|
||||||
|
raise Exception('expecting tenant_id SHARED. got %s' % ten_id)
|
||||||
|
with self.network(tenant_id='SHARED', shared=True) as net:
|
||||||
|
with self.subnet(network=net) as sub:
|
||||||
|
pref = 'neutron.plugins.bigswitch.servermanager.ServerPool.%s'
|
||||||
|
tomock = [pref % 'rest_create_port',
|
||||||
|
pref % 'rest_update_port',
|
||||||
|
pref % 'rest_delete_port']
|
||||||
|
patches = [patch(f, create=True, new=rest_port_op)
|
||||||
|
for f in tomock]
|
||||||
|
for restp in patches:
|
||||||
|
restp.start()
|
||||||
|
with self.port(subnet=sub, tenant_id='port-owner') as port:
|
||||||
|
data = {'port': {'binding:host_id': 'someotherhost',
|
||||||
|
'device_id': 'override_dev'}}
|
||||||
|
req = self.new_update_request('ports', data,
|
||||||
|
port['port']['id'])
|
||||||
|
res = req.get_response(self.api)
|
||||||
|
self.assertEqual(res.status_int, 200)
|
||||||
|
|
||||||
|
|
||||||
class TestBigSwitchProxyPortsV2IVS(test_plugin.TestPortsV2,
|
class TestBigSwitchProxyPortsV2IVS(test_plugin.TestPortsV2,
|
||||||
BigSwitchProxyPluginV2TestCase,
|
BigSwitchProxyPluginV2TestCase,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user