Merge "use payloads for FLOATING_IP"
This commit is contained in:
commit
caac890c8e
|
@ -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 = {
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue