diff --git a/neutron/plugins/vmware/plugins/base.py b/neutron/plugins/vmware/plugins/base.py index 5581e691bac..e9bc8a6453c 100644 --- a/neutron/plugins/vmware/plugins/base.py +++ b/neutron/plugins/vmware/plugins/base.py @@ -1832,6 +1832,8 @@ class NsxPluginV2(addr_pair_db.AllowedAddressPairsMixin, elif (not associated and floatingip_db['status'] != constants.FLOATINGIP_STATUS_DOWN): return constants.FLOATINGIP_STATUS_DOWN + # in any case ensure the status is not reset by this method! + return floatingip_db['status'] def _update_fip_assoc(self, context, fip, floatingip_db, external_port): """Update floating IP association data. diff --git a/neutron/tests/unit/test_l3_plugin.py b/neutron/tests/unit/test_l3_plugin.py index c474458f289..209e68bc091 100644 --- a/neutron/tests/unit/test_l3_plugin.py +++ b/neutron/tests/unit/test_l3_plugin.py @@ -1330,6 +1330,18 @@ class L3NatTestCaseBase(L3NatTestCaseMixin): self._test_floatingip_with_assoc_fails( 'neutron.db.l3_db.L3_NAT_db_mixin._check_and_get_fip_assoc') + def test_create_floatingip_with_assoc( + self, expected_status=l3_constants.FLOATINGIP_STATUS_ACTIVE): + with self.floatingip_with_assoc() as fip: + body = self._show('floatingips', fip['floatingip']['id']) + self.assertEqual(body['floatingip']['id'], + fip['floatingip']['id']) + self.assertEqual(body['floatingip']['port_id'], + fip['floatingip']['port_id']) + self.assertEqual(expected_status, body['floatingip']['status']) + self.assertIsNotNone(body['floatingip']['fixed_ip_address']) + self.assertIsNotNone(body['floatingip']['router_id']) + def test_floatingip_update( self, expected_status=l3_constants.FLOATINGIP_STATUS_ACTIVE): with self.port() as p: @@ -1503,16 +1515,6 @@ class L3NatTestCaseBase(L3NatTestCaseMixin): fip2_r2_res = associate_and_assert(fip2, p2) self.assertEqual(fip2_r2_res, r2['router']['id']) - def test_floatingip_with_assoc(self): - with self.floatingip_with_assoc() as fip: - body = self._show('floatingips', fip['floatingip']['id']) - self.assertEqual(body['floatingip']['id'], - fip['floatingip']['id']) - self.assertEqual(body['floatingip']['port_id'], - fip['floatingip']['port_id']) - self.assertIsNotNone(body['floatingip']['fixed_ip_address']) - self.assertIsNotNone(body['floatingip']['router_id']) - def test_floatingip_port_delete(self): with self.subnet() as private_sub: with self.floatingip_no_assoc(private_sub) as fip: