diff --git a/neutron/db/l3_db.py b/neutron/db/l3_db.py index adca7d700ae..4564b0726f8 100644 --- a/neutron/db/l3_db.py +++ b/neutron/db/l3_db.py @@ -1250,9 +1250,8 @@ class L3_NAT_dbonly_mixin(l3.RouterPluginBase, 'context': context, 'association_event': association_event} - def _is_ipv4_network(self, context, net_id): - net = self._core_plugin._get_network(context, net_id) - return any(s.ip_version == 4 for s in net.subnets) + def _is_ipv4_network(self, context, net_db): + return any(s.ip_version == 4 for s in net_db.subnets) def _create_floatingip(self, context, floatingip, initial_status=constants.FLOATINGIP_STATUS_ACTIVE): @@ -1268,11 +1267,12 @@ class L3_NAT_dbonly_mixin(l3.RouterPluginBase, fip_id = uuidutils.generate_uuid() f_net_id = fip['floating_network_id'] - if not self._core_plugin._network_is_external(context, f_net_id): + f_net_db = self._core_plugin._get_network(context, f_net_id) + if not f_net_db.external: msg = _("Network %s is not a valid external network") % f_net_id raise n_exc.BadRequest(resource='floatingip', msg=msg) - if not self._is_ipv4_network(context, f_net_id): + if not self._is_ipv4_network(context, f_net_db): msg = _("Network %s does not contain any IPv4 subnet") % f_net_id raise n_exc.BadRequest(resource='floatingip', msg=msg) diff --git a/neutron/tests/unit/extensions/test_l3.py b/neutron/tests/unit/extensions/test_l3.py index a73eefd43ea..b08add97b5a 100644 --- a/neutron/tests/unit/extensions/test_l3.py +++ b/neutron/tests/unit/extensions/test_l3.py @@ -2961,9 +2961,15 @@ class L3NatTestCaseBase(L3NatTestCaseMixin): def test_create_floatingip_invalid_fixed_ipv6_address_returns_400(self): # API-level test - no need to create all objects for l3 plugin res = self._create_floatingip(self.fmt, uuidutils.generate_uuid(), - uuidutils.generate_uuid(), '2001:db8::a') + uuidutils.generate_uuid(), '2001:db8::m') self.assertEqual(400, res.status_int) + def test_create_floatingip_not_existing_network_returns_404(self): + # API-level test - no need to create all objects for l3 plugin + res = self._create_floatingip(self.fmt, uuidutils.generate_uuid(), + uuidutils.generate_uuid(), '2001:db8::a') + self.assertEqual(404, res.status_int) + def test_floatingip_list_with_sort(self): with self.subnet(cidr="10.0.0.0/24") as s1,\ self.subnet(cidr="11.0.0.0/24") as s2,\