Merge "NSX: properly handle floating ip status"
This commit is contained in:
commit
245297a49a
@ -1892,6 +1892,14 @@ class NsxPluginV2(addr_pair_db.AllowedAddressPairsMixin,
|
|||||||
pass
|
pass
|
||||||
return (port_id, internal_ip, router_id)
|
return (port_id, internal_ip, router_id)
|
||||||
|
|
||||||
|
def _floatingip_status(self, floatingip_db, associated):
|
||||||
|
if (associated and
|
||||||
|
floatingip_db['status'] != constants.FLOATINGIP_STATUS_ACTIVE):
|
||||||
|
return constants.FLOATINGIP_STATUS_ACTIVE
|
||||||
|
elif (not associated and
|
||||||
|
floatingip_db['status'] != constants.FLOATINGIP_STATUS_DOWN):
|
||||||
|
return constants.FLOATINGIP_STATUS_DOWN
|
||||||
|
|
||||||
def _update_fip_assoc(self, context, fip, floatingip_db, external_port):
|
def _update_fip_assoc(self, context, fip, floatingip_db, external_port):
|
||||||
"""Update floating IP association data.
|
"""Update floating IP association data.
|
||||||
|
|
||||||
@ -1984,10 +1992,12 @@ class NsxPluginV2(addr_pair_db.AllowedAddressPairsMixin,
|
|||||||
'internal_ip': internal_ip})
|
'internal_ip': internal_ip})
|
||||||
msg = _("Failed to update NAT rules for floatingip update")
|
msg = _("Failed to update NAT rules for floatingip update")
|
||||||
raise nsx_exc.NsxPluginException(err_msg=msg)
|
raise nsx_exc.NsxPluginException(err_msg=msg)
|
||||||
|
# Update also floating ip status (no need to call base class method)
|
||||||
floatingip_db.update({'fixed_ip_address': internal_ip,
|
floatingip_db.update(
|
||||||
'fixed_port_id': port_id,
|
{'fixed_ip_address': internal_ip,
|
||||||
'router_id': router_id})
|
'fixed_port_id': port_id,
|
||||||
|
'router_id': router_id,
|
||||||
|
'status': self._floatingip_status(floatingip_db, router_id)})
|
||||||
|
|
||||||
def delete_floatingip(self, context, id):
|
def delete_floatingip(self, context, id):
|
||||||
fip_db = self._get_floatingip(context, id)
|
fip_db = self._get_floatingip(context, id)
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
import netaddr
|
import netaddr
|
||||||
from oslo.config import cfg
|
from oslo.config import cfg
|
||||||
|
|
||||||
|
from neutron.common import constants
|
||||||
from neutron.common import exceptions as n_exc
|
from neutron.common import exceptions as n_exc
|
||||||
from neutron.db.firewall import firewall_db
|
from neutron.db.firewall import firewall_db
|
||||||
from neutron.db import l3_db
|
from neutron.db import l3_db
|
||||||
@ -758,6 +759,10 @@ class NsxAdvancedPlugin(sr_db.ServiceRouter_mixin,
|
|||||||
# do sync work (rollback, re-configure, or make router down)
|
# do sync work (rollback, re-configure, or make router down)
|
||||||
self._update_nat_rules(context, router)
|
self._update_nat_rules(context, router)
|
||||||
self._update_interface(context, router)
|
self._update_interface(context, router)
|
||||||
|
elif not router_id:
|
||||||
|
# The floating IP has been disassociated and should be set to DOWN
|
||||||
|
self.update_floatingip_status(context, fip['id'],
|
||||||
|
constants.FLOATINGIP_STATUS_DOWN)
|
||||||
return fip
|
return fip
|
||||||
|
|
||||||
def delete_floatingip(self, context, id):
|
def delete_floatingip(self, context, id):
|
||||||
|
@ -947,6 +947,13 @@ class TestL3NatTestCase(L3NatTest,
|
|||||||
# Test that route is deleted after dhcp port is removed
|
# Test that route is deleted after dhcp port is removed
|
||||||
self.assertEqual(len(subnets[0]['host_routes']), 0)
|
self.assertEqual(len(subnets[0]['host_routes']), 0)
|
||||||
|
|
||||||
|
def _test_floatingip_update(self, expected_status):
|
||||||
|
super(TestL3NatTestCase, self).test_floatingip_update(
|
||||||
|
expected_status)
|
||||||
|
|
||||||
|
def test_floatingip_update(self):
|
||||||
|
self._test_floatingip_update(constants.FLOATINGIP_STATUS_DOWN)
|
||||||
|
|
||||||
def test_floatingip_disassociate(self):
|
def test_floatingip_disassociate(self):
|
||||||
with self.port() as p:
|
with self.port() as p:
|
||||||
private_sub = {'subnet': {'id':
|
private_sub = {'subnet': {'id':
|
||||||
@ -956,12 +963,18 @@ class TestL3NatTestCase(L3NatTest,
|
|||||||
body = self._update('floatingips', fip['floatingip']['id'],
|
body = self._update('floatingips', fip['floatingip']['id'],
|
||||||
{'floatingip': {'port_id': port_id}})
|
{'floatingip': {'port_id': port_id}})
|
||||||
self.assertEqual(body['floatingip']['port_id'], port_id)
|
self.assertEqual(body['floatingip']['port_id'], port_id)
|
||||||
|
# Floating IP status should be active
|
||||||
|
self.assertEqual(constants.FLOATINGIP_STATUS_ACTIVE,
|
||||||
|
body['floatingip']['status'])
|
||||||
# Disassociate
|
# Disassociate
|
||||||
body = self._update('floatingips', fip['floatingip']['id'],
|
body = self._update('floatingips', fip['floatingip']['id'],
|
||||||
{'floatingip': {'port_id': None}})
|
{'floatingip': {'port_id': None}})
|
||||||
body = self._show('floatingips', fip['floatingip']['id'])
|
body = self._show('floatingips', fip['floatingip']['id'])
|
||||||
self.assertIsNone(body['floatingip']['port_id'])
|
self.assertIsNone(body['floatingip']['port_id'])
|
||||||
self.assertIsNone(body['floatingip']['fixed_ip_address'])
|
self.assertIsNone(body['floatingip']['fixed_ip_address'])
|
||||||
|
# Floating IP status should be down
|
||||||
|
self.assertEqual(constants.FLOATINGIP_STATUS_DOWN,
|
||||||
|
body['floatingip']['status'])
|
||||||
|
|
||||||
def test_create_router_maintenance_returns_503(self):
|
def test_create_router_maintenance_returns_503(self):
|
||||||
with self._create_l3_ext_network() as net:
|
with self._create_l3_ext_network() as net:
|
||||||
|
@ -20,6 +20,7 @@ import mock
|
|||||||
from oslo.config import cfg
|
from oslo.config import cfg
|
||||||
|
|
||||||
from neutron.api.v2 import attributes
|
from neutron.api.v2 import attributes
|
||||||
|
from neutron.common import constants
|
||||||
from neutron import context
|
from neutron import context
|
||||||
from neutron.extensions import l3
|
from neutron.extensions import l3
|
||||||
from neutron import manager as n_manager
|
from neutron import manager as n_manager
|
||||||
@ -232,6 +233,9 @@ class ServiceRouterTestCase(ServiceRouterTest,
|
|||||||
self)._test_router_update_gateway_on_l3_ext_net(
|
self)._test_router_update_gateway_on_l3_ext_net(
|
||||||
vlan_id, validate_ext_gw=False)
|
vlan_id, validate_ext_gw=False)
|
||||||
|
|
||||||
|
def test_floatingip_update(self):
|
||||||
|
self._test_floatingip_update(constants.FLOATINGIP_STATUS_ACTIVE)
|
||||||
|
|
||||||
|
|
||||||
class TestProxyCreateLswitch(base.BaseTestCase):
|
class TestProxyCreateLswitch(base.BaseTestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user