create or delete port forwarding, update the floating ip status

create port forwarding, should set floating ip status running, delete all port
forwarding, the floating ip status should be down.

Closes-Bug: #1910334

Change-Id: I8b3e4bf6b3cac3a95ea76b85dd4882ddafc962c8
This commit is contained in:
zhouhenglc 2021-01-06 15:24:29 +08:00
parent b2389a31a0
commit a37dc71ad6
2 changed files with 31 additions and 6 deletions

View File

@ -16,6 +16,7 @@ from ovsdbapp import constants as ovsdbapp_const
from neutron_lib.callbacks import events
from neutron_lib.callbacks import registry
from neutron_lib import constants as const
from neutron_lib.plugins import constants as plugin_constants
from neutron_lib.plugins import directory
@ -182,14 +183,23 @@ class OVNPortForwarding(object):
for pf_payload in payload:
self._handler.port_forwarding_created(ovn_txn, ovn_nb,
pf_payload.current_pf)
self._l3_plugin.update_floatingip_status(
context, pf_payload.current_pf.floatingip_id,
const.FLOATINGIP_STATUS_ACTIVE)
elif event_type == events.AFTER_UPDATE:
for pf_payload in payload:
self._handler.port_forwarding_updated(ovn_txn, ovn_nb,
pf_payload.current_pf, pf_payload.original_pf)
elif event_type == events.AFTER_DELETE:
for pf_payload in payload:
pfs = _pf_plugin.get_floatingip_port_forwardings(
context, pf_payload.original_pf.floatingip_id)
self._handler.port_forwarding_deleted(ovn_txn, ovn_nb,
pf_payload.original_pf)
if not pfs:
self._l3_plugin.update_floatingip_status(
context, pf_payload.original_pf.floatingip_id,
const.FLOATINGIP_STATUS_DOWN)
# Collect the revision numbers of all floating ips visited and
# update the corresponding load balancer entries affected.

View File

@ -23,6 +23,7 @@ from neutron.tests import base
from neutron.tests.unit import fake_resources
from neutron_lib.callbacks import events
from neutron_lib.callbacks import registry
from neutron_lib import constants as const
from neutron_lib.plugins import constants as plugin_constants
from oslo_utils import uuidutils
from ovsdbapp import constants as ovsdbapp_const
@ -238,7 +239,8 @@ class TestOVNPortForwarding(TestOVNPortForwardingBase):
fip_objs = {}
with mock.patch.object(self._ovn_pf, '_get_fip_objs',
return_value=fip_objs) as mock_get_fip_objs:
self._ovn_pf._handle_notification(None, event_type, None, payload)
self._ovn_pf._handle_notification(None, event_type,
self.pf_plugin, payload)
self.assertTrue(self.fake_db_rev.called or not fip_objs)
if not payload:
return
@ -273,6 +275,10 @@ class TestOVNPortForwarding(TestOVNPortForwardingBase):
calls = [mock.call(mock.ANY, self.l3_plugin._ovn, entry.current_pf)
for entry in fake_payload]
self.handler.port_forwarding_created.assert_has_calls(calls)
update_calls = [mock.call(
self.context, entry.current_pf.floatingip_id,
const.FLOATINGIP_STATUS_ACTIVE) for entry in fake_payload]
self.l3_plugin.update_floatingip_status.assert_has_calls(update_calls)
def test_handle_notification_update(self):
fip_objs = {100: {'description': 'hundred'}, 101: {}}
@ -289,11 +295,20 @@ class TestOVNPortForwarding(TestOVNPortForwardingBase):
2: {'description': 'two', 'revision_number': '222'}}
fake_payload = [self._fake_pf_payload_entry(None, id)
for id in range(1, 4)]
self._handle_notification_common(events.AFTER_DELETE, fake_payload,
fip_objs)
calls = [mock.call(mock.ANY, self.l3_plugin._ovn, entry.original_pf)
for entry in fake_payload]
self.handler.port_forwarding_deleted.assert_has_calls(calls)
with mock.patch.object(
self.pf_plugin, 'get_floatingip_port_forwardings',
return_value=[]):
self._handle_notification_common(
events.AFTER_DELETE, fake_payload, fip_objs)
calls = [mock.call(
mock.ANY, self.l3_plugin._ovn, entry.original_pf)
for entry in fake_payload]
self.handler.port_forwarding_deleted.assert_has_calls(calls)
update_calls = [mock.call(
self.context, entry.original_pf.floatingip_id,
const.FLOATINGIP_STATUS_DOWN) for entry in fake_payload]
self.l3_plugin.update_floatingip_status.assert_has_calls(
update_calls)
def test_maintenance_create_or_update(self):
pf_objs = [self._fake_pf_obj()]