Merge "use payloads for FLOATING_IP"

This commit is contained in:
Zuul 2021-08-12 11:18:50 +00:00 committed by Gerrit Code Review
commit caac890c8e
4 changed files with 43 additions and 37 deletions

View File

@ -1424,10 +1424,14 @@ class L3_NAT_dbonly_mixin(l3.RouterPluginBase,
if self._is_fip_qos_supported:
self._process_extra_fip_qos_create(context, fip_id, fip)
registry.notify(resources.FLOATING_IP, events.PRECOMMIT_CREATE,
self, context=context, floatingip=fip,
floatingip_id=fip_id,
floatingip_db=floatingip_obj.db_obj)
registry.publish(resources.FLOATING_IP,
events.PRECOMMIT_CREATE,
self,
payload=events.DBEventPayload(
context,
resource_id=fip_id,
desired_state=floatingip_obj.db_obj,
states=(fip,)))
self._core_plugin.update_port(
context.elevated(), external_port['id'],
@ -1489,13 +1493,14 @@ class L3_NAT_dbonly_mixin(l3.RouterPluginBase,
floatingip_obj = l3_obj.FloatingIP.get_object(
context, id=floatingip_obj.id)
floatingip_db = floatingip_obj.db_obj
registry.notify(resources.FLOATING_IP,
events.PRECOMMIT_UPDATE,
self,
floatingip=floatingip,
floatingip_db=floatingip_db,
old_floatingip=old_floatingip,
**assoc_result)
registry.publish(resources.FLOATING_IP,
events.PRECOMMIT_UPDATE,
self,
payload=events.DBEventPayload(
context,
desired_state=floatingip_db,
states=(old_floatingip, floatingip)))
registry.notify(resources.FLOATING_IP,
events.AFTER_UPDATE,
@ -1680,12 +1685,16 @@ class L3_NAT_dbonly_mixin(l3.RouterPluginBase,
l3_obj.FloatingIP.update_objects(
context, values, fixed_port_id=port_id)
for fip in floating_ip_objs:
registry.notify(resources.FLOATING_IP, events.PRECOMMIT_UPDATE,
self, context=context,
floatingip={l3_apidef.FLOATINGIP: values},
floatingip_db=fip,
old_floatingip=old_fips[fip.id],
router_ids=router_ids)
registry.publish(
resources.FLOATING_IP,
events.PRECOMMIT_UPDATE,
self,
payload=events.DBEventPayload(
context,
desired_state=fip,
metadata={'router_ids': router_ids},
states=(old_fips[fip.id],
{l3_apidef.FLOATINGIP: values})))
for fip in floating_ip_objs:
assoc_result = {

View File

@ -250,8 +250,11 @@ class OVNL3RouterPlugin(service_base.ServicePluginBase,
context, router_id, interface_info)
return router_interface_info
def create_floatingip_precommit(self, resource, event, trigger, context,
floatingip, floatingip_id, floatingip_db):
def create_floatingip_precommit(self, resource, event, trigger, payload):
context = payload.context
floatingip_id = payload.resource_id
floatingip_db = payload.desired_state
db_rev.create_initial_revision(
context, floatingip_id, ovn_const.TYPE_FLOATINGIPS,
std_attr_id=floatingip_db.standard_attr.id)

View File

@ -147,29 +147,22 @@ class PortForwardingPlugin(fip_pf.PortForwardingPluginBase):
if l3_dvr_db.is_distributed_router(router):
raise pf_exc.PortHasPortForwarding(port_id=port_id)
@registry.receives(resources.FLOATING_IP, [events.PRECOMMIT_DELETE])
def _check_floatingip_request_precommit_delete(
self, resource, event, trigger, payload):
# TODO(isabek): refactor back into 1 method when FIP code is moved
# to event payloads
return self._check_floatingip_request(resource, event, trigger,
payload.context,
port=payload.latest_state)
@registry.receives(resources.FLOATING_IP, [events.PRECOMMIT_UPDATE])
def _check_floatingip_request(self, resource, event, trigger, context,
**kwargs):
@registry.receives(resources.FLOATING_IP, [events.PRECOMMIT_UPDATE,
events.PRECOMMIT_DELETE])
def _check_floatingip_request(self, resource, event, trigger, payload):
# We only support the "free" floatingip to be associated with
# port forwarding resources. And in the PUT request of floatingip,
# the request body must contain a "port_id" field which is not
# allowed in port forwarding functionality.
context = payload.context
floatingip_id = None
if event == events.PRECOMMIT_UPDATE:
fip_db = kwargs.get('floatingip_db')
floatingip = payload.states[-1]
fip_db = payload.desired_state
floatingip_id = fip_db.id
# Here the key-value must contain a floatingip param, and the value
# must a dict with key 'floatingip'.
if not kwargs['floatingip']['floatingip'].get('port_id'):
if not floatingip['floatingip'].get('port_id'):
# Only care about the associate floatingip cases.
# The port_id field is a must-option. But if a floatingip
# disassociate a internal port, the port_id should be null.
@ -177,7 +170,8 @@ class PortForwardingPlugin(fip_pf.PortForwardingPluginBase):
'request does not contain port_id.', floatingip_id)
return
elif event == events.PRECOMMIT_DELETE:
floatingip_id = kwargs.get('port').get('device_id')
port = payload.states[-1]
floatingip_id = port.get('device_id')
if not floatingip_id:
return

View File

@ -4005,9 +4005,9 @@ class L3AgentDbTestCaseBase(L3NatTestCaseMixin):
with self.floatingip_with_assoc() as f:
fake_method.assert_called_once_with(
resources.FLOATING_IP, events.PRECOMMIT_CREATE, mock.ANY,
context=mock.ANY, floatingip=mock.ANY,
floatingip_id=f['floatingip']['id'],
floatingip_db=mock.ANY)
payload=mock.ANY)
payload = fake_method.call_args_list[0][1]['payload']
self.assertEqual(f['floatingip']['id'], payload.resource_id)
finally:
registry.unsubscribe(fake_method, resources.FLOATING_IP,
events.PRECOMMIT_CREATE)