Block subnet create with mismatched IP versions
Cherry picked from 615102520c
Change-Id: Ic0a3baf0e956505999d2473ae85ebac90e0970cd
Closes-Bug: 1444146
This commit is contained in:
parent
4d53e36225
commit
8c311072b7
|
@ -1267,6 +1267,15 @@ class NeutronDbPluginV2(neutron_plugin_base_v2.NeutronPluginBaseV2,
|
|||
|
||||
with context.session.begin(subtransactions=True):
|
||||
subnetpool = self._get_subnetpool(context, subnetpool_id)
|
||||
ip_version = s.get('ip_version')
|
||||
has_ip_version = attributes.is_attr_set(ip_version)
|
||||
if has_ip_version and ip_version != subnetpool.ip_version:
|
||||
args = {'req_ver': str(s['ip_version']),
|
||||
'pool_ver': str(subnetpool.ip_version)}
|
||||
reason = _("Cannot allocate IPv%(req_ver)s subnet from "
|
||||
"IPv%(pool_ver)s subnet pool") % args
|
||||
raise n_exc.BadRequest(resource='subnets', msg=reason)
|
||||
|
||||
network = self._get_network(context, s["network_id"])
|
||||
allocator = subnet_alloc.SubnetAllocator(subnetpool)
|
||||
req = self._make_subnet_request(tenant_id, s, subnetpool)
|
||||
|
|
|
@ -5297,6 +5297,21 @@ class TestSubnetPoolsV2(NeutronDbPluginV2TestCase):
|
|||
# Assert error
|
||||
self.assertEqual(res.status_int, 409)
|
||||
|
||||
def test_allocate_any_ipv4_subnet_ipv6_pool(self):
|
||||
with self.network() as network:
|
||||
sp = self._test_create_subnetpool(['2001:db8:1:2::/63'],
|
||||
tenant_id=self._tenant_id,
|
||||
name=self._POOL_NAME)
|
||||
|
||||
# Request a specific subnet allocation
|
||||
data = {'subnet': {'network_id': network['network']['id'],
|
||||
'subnetpool_id': sp['subnetpool']['id'],
|
||||
'ip_version': 4,
|
||||
'tenant_id': network['network']['tenant_id']}}
|
||||
req = self.new_create_request('subnets', data)
|
||||
res = req.get_response(self.api)
|
||||
self.assertEqual(res.status_int, 400)
|
||||
|
||||
|
||||
class DbModelTestCase(base.BaseTestCase):
|
||||
"""DB model tests."""
|
||||
|
|
Loading…
Reference in New Issue