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)
# 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."""