]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
Revert "Revert "Add VIF_DELETED notification event to Nova""
authorKevin Benton <kevin.benton@bigswitch.com>
Wed, 3 Jun 2015 06:03:25 +0000 (00:03 -0600)
committerKevin Benton <kevinbenton@buttewifi.com>
Sun, 14 Jun 2015 02:20:27 +0000 (02:20 +0000)
This reverts commit 6575db592c92791a51540134192bc86465940283.

Depends-on: I998b6bb80cc0a81d665b61b8c4a424d7219c666f

DocImpact
If Neutron is upgraded to Liberty before the Nova API is,
the Nova API log will contain errors complaining that it doesn't
understand this new event. Nothing will be broken, but there will
be an error every time a port is deleted until Nova is upgraded.

Change-Id: I7aae44e62d2b1170bae31c3492148bfd516fb78b

neutron/notifiers/nova.py
neutron/tests/unit/notifiers/test_nova.py

index 4bad6dcbadd4de902aaf33d4f3ec8946f6965044..86e4a74088c7f68ac8f0c8f4162a7203ce74ec59 100644 (file)
@@ -35,6 +35,7 @@ LOG = logging.getLogger(__name__)
 
 VIF_UNPLUGGED = 'network-vif-unplugged'
 VIF_PLUGGED = 'network-vif-plugged'
+VIF_DELETED = 'network-vif-deleted'
 NEUTRON_NOVA_EVENT_STATUS_MAP = {constants.PORT_STATUS_ACTIVE: 'completed',
                                  constants.PORT_STATUS_ERROR: 'failed',
                                  constants.PORT_STATUS_DOWN: 'completed'}
@@ -121,6 +122,11 @@ class Notifier(object):
         return {'name': 'network-changed',
                 'server_uuid': device_id}
 
+    def _get_port_delete_event(self, port):
+        return {'server_uuid': port['device_id'],
+                'name': VIF_DELETED,
+                'tag': port['id']}
+
     @property
     def _plugin(self):
         # NOTE(arosen): this cannot be set in __init__ currently since
@@ -160,7 +166,7 @@ class Notifier(object):
 
     def create_port_changed_event(self, action, original_obj, returned_obj):
         port = None
-        if action == 'update_port':
+        if action in ['update_port', 'delete_port']:
             port = returned_obj['port']
 
         elif action in ['update_floatingip', 'create_floatingip',
@@ -178,7 +184,10 @@ class Notifier(object):
             port = self._plugin.get_port(ctx, port_id)
 
         if port and self._is_compute_port(port):
-            return self._get_network_changed_event(port['device_id'])
+            if action == 'delete_port':
+                return self._get_port_delete_event(port)
+            else:
+                return self._get_network_changed_event(port['device_id'])
 
     def record_port_status_changed(self, port, current_port_status,
                                    previous_port_status, initiator):
index 49ccb975ae7d5a851ba9619d630d949535856dba..b04e26257816f995e0f6711b736003396362b600 100644 (file)
@@ -290,3 +290,18 @@ class TestNovaNotify(base.BaseTestCase):
             self.nova_notifier.batch_notifier.pending_events[0], event_dis)
         self.assertEqual(
             self.nova_notifier.batch_notifier.pending_events[1], event_assoc)
+
+    def test_delete_port_notify(self):
+        device_id = '32102d7b-1cf4-404d-b50a-97aae1f55f87'
+        port_id = 'bee50827-bcee-4cc8-91c1-a27b0ce54222'
+        returned_obj = {'port':
+                        {'device_owner': 'compute:dfd',
+                         'id': port_id,
+                         'device_id': device_id}}
+
+        expected_event = {'server_uuid': device_id,
+                          'name': nova.VIF_DELETED,
+                          'tag': port_id}
+        event = self.nova_notifier.create_port_changed_event('delete_port',
+                                                             {}, returned_obj)
+        self.assertEqual(expected_event, event)