From 4db3123e605f2dccb15f8a159e1d65bc3d6a4a40 Mon Sep 17 00:00:00 2001 From: Hironori Shiina Date: Thu, 11 May 2017 16:32:31 +0900 Subject: [PATCH] Add CRUD notification objects for volume connector and volume target This patch adds CRUD notification objects for volume connector and volume target. Emission will be implemented in API changes for volume connector and volume target. Change-Id: Ib13428702f109c20d014ea1870b3c5982db3df0f Partial-Bug: 1526231 --- ironic/objects/volume_connector.py | 42 +++++++++++++++++ ironic/objects/volume_target.py | 45 +++++++++++++++++++ ironic/tests/unit/objects/test_objects.py | 4 ++ .../unit/objects/test_volume_connector.py | 8 +++- .../tests/unit/objects/test_volume_target.py | 7 ++- 5 files changed, 104 insertions(+), 2 deletions(-) diff --git a/ironic/objects/volume_connector.py b/ironic/objects/volume_connector.py index c66535f0bc..e91706d78c 100644 --- a/ironic/objects/volume_connector.py +++ b/ironic/objects/volume_connector.py @@ -20,6 +20,7 @@ from ironic.common import exception from ironic.db import api as db_api from ironic.objects import base from ironic.objects import fields as object_fields +from ironic.objects import notification @base.IronicObjectRegistry.register @@ -240,3 +241,44 @@ class VolumeConnector(base.IronicObject, current = self.get_by_uuid(self._context, uuid=self.uuid) self.obj_refresh(current) self.obj_reset_changes() + + +@base.IronicObjectRegistry.register +class VolumeConnectorCRUDNotification(notification.NotificationBase): + """Notification emitted at CRUD of a volume connector.""" + # Version 1.0: Initial version + VERSION = '1.0' + + fields = { + 'payload': object_fields.ObjectField('VolumeConnectorCRUDPayload') + } + + +@base.IronicObjectRegistry.register +class VolumeConnectorCRUDPayload(notification.NotificationPayloadBase): + """Payload schema for CRUD of a volume connector.""" + # Version 1.0: Initial version + VERSION = '1.0' + + SCHEMA = { + 'extra': ('connector', 'extra'), + 'type': ('connector', 'type'), + 'connector_id': ('connector', 'connector_id'), + 'created_at': ('connector', 'created_at'), + 'updated_at': ('connector', 'updated_at'), + 'uuid': ('connector', 'uuid'), + } + + fields = { + 'extra': object_fields.FlexibleDictField(nullable=True), + 'type': object_fields.StringField(nullable=True), + 'connector_id': object_fields.StringField(nullable=True), + 'node_uuid': object_fields.UUIDField(), + 'created_at': object_fields.DateTimeField(nullable=True), + 'updated_at': object_fields.DateTimeField(nullable=True), + 'uuid': object_fields.UUIDField(), + } + + def __init__(self, connector, node_uuid): + super(VolumeConnectorCRUDPayload, self).__init__(node_uuid=node_uuid) + self.populate_schema(connector=connector) diff --git a/ironic/objects/volume_target.py b/ironic/objects/volume_target.py index 20092c445a..68a54c4357 100644 --- a/ironic/objects/volume_target.py +++ b/ironic/objects/volume_target.py @@ -20,6 +20,7 @@ from ironic.common import exception from ironic.db import api as db_api from ironic.objects import base from ironic.objects import fields as object_fields +from ironic.objects import notification @base.IronicObjectRegistry.register @@ -263,3 +264,47 @@ class VolumeTarget(base.IronicObject, current = self.get_by_uuid(self._context, uuid=self.uuid) self.obj_refresh(current) self.obj_reset_changes() + + +@base.IronicObjectRegistry.register +class VolumeTargetCRUDNotification(notification.NotificationBase): + """Notification emitted at CRUD of a volume target.""" + # Version 1.0: Initial version + VERSION = '1.0' + + fields = { + 'payload': object_fields.ObjectField('VolumeTargetCRUDPayload') + } + + +@base.IronicObjectRegistry.register +class VolumeTargetCRUDPayload(notification.NotificationPayloadBase): + # Version 1.0: Initial Version + VERSION = '1.0' + + SCHEMA = { + 'boot_index': ('target', 'boot_index'), + 'extra': ('target', 'extra'), + 'properties': ('target', 'properties'), + 'volume_id': ('target', 'volume_id'), + 'volume_type': ('target', 'volume_type'), + 'created_at': ('target', 'created_at'), + 'updated_at': ('target', 'updated_at'), + 'uuid': ('target', 'uuid'), + } + + fields = { + 'boot_index': object_fields.IntegerField(nullable=True), + 'extra': object_fields.FlexibleDictField(nullable=True), + 'node_uuid': object_fields.UUIDField(), + 'properties': object_fields.FlexibleDictField(nullable=True), + 'volume_id': object_fields.StringField(nullable=True), + 'volume_type': object_fields.StringField(nullable=True), + 'created_at': object_fields.DateTimeField(nullable=True), + 'updated_at': object_fields.DateTimeField(nullable=True), + 'uuid': object_fields.UUIDField(), + } + + def __init__(self, target, node_uuid): + super(VolumeTargetCRUDPayload, self).__init__(node_uuid=node_uuid) + self.populate_schema(target=target) diff --git a/ironic/tests/unit/objects/test_objects.py b/ironic/tests/unit/objects/test_objects.py index fc1eb3529e..f6656677ce 100644 --- a/ironic/tests/unit/objects/test_objects.py +++ b/ironic/tests/unit/objects/test_objects.py @@ -654,6 +654,10 @@ expected_object_fingerprints = { 'NodeConsoleNotification': '1.0-59acc533c11d306f149846f922739c15', 'PortgroupCRUDNotification': '1.0-59acc533c11d306f149846f922739c15', 'PortgroupCRUDPayload': '1.0-b73c1fecf0cef3aa56bbe3c7e2275018', + 'VolumeConnectorCRUDNotification': '1.0-59acc533c11d306f149846f922739c15', + 'VolumeConnectorCRUDPayload': '1.0-5e8dbb41e05b6149d8f7bfd4daff9339', + 'VolumeTargetCRUDNotification': '1.0-59acc533c11d306f149846f922739c15', + 'VolumeTargetCRUDPayload': '1.0-30dcc4735512c104a3a36a2ae1e2aeb2', } diff --git a/ironic/tests/unit/objects/test_volume_connector.py b/ironic/tests/unit/objects/test_volume_connector.py index 090fff3351..817914d891 100644 --- a/ironic/tests/unit/objects/test_volume_connector.py +++ b/ironic/tests/unit/objects/test_volume_connector.py @@ -21,9 +21,11 @@ from ironic.common import exception from ironic import objects from ironic.tests.unit.db import base as db_base from ironic.tests.unit.db import utils as db_utils +from ironic.tests.unit.objects import utils as obj_utils -class TestVolumeConnectorObject(db_base.DbTestCase): +class TestVolumeConnectorObject(db_base.DbTestCase, + obj_utils.SchemasTestMixIn): def setUp(self): super(TestVolumeConnectorObject, self).setUp() @@ -193,3 +195,7 @@ class TestVolumeConnectorObject(db_base.DbTestCase): vc_copy.name = 'aaff' # Ensure this passes and an exception is not generated vc_copy.save() + + def test_payload_schemas(self): + self._check_payload_schemas(objects.volume_connector, + objects.VolumeConnector.fields) diff --git a/ironic/tests/unit/objects/test_volume_target.py b/ironic/tests/unit/objects/test_volume_target.py index c22ab5233a..cbb467947f 100644 --- a/ironic/tests/unit/objects/test_volume_target.py +++ b/ironic/tests/unit/objects/test_volume_target.py @@ -21,9 +21,10 @@ from ironic.common import exception from ironic import objects from ironic.tests.unit.db import base as db_base from ironic.tests.unit.db import utils as db_utils +from ironic.tests.unit.objects import utils as obj_utils -class TestVolumeTargetObject(db_base.DbTestCase): +class TestVolumeTargetObject(db_base.DbTestCase, obj_utils.SchemasTestMixIn): def setUp(self): super(TestVolumeTargetObject, self).setUp() @@ -204,3 +205,7 @@ class TestVolumeTargetObject(db_base.DbTestCase): vt_copy.name = 'aaff' # Ensure this passes and an exception is not generated vt_copy.save() + + def test_payload_schemas(self): + self._check_payload_schemas(objects.volume_target, + objects.VolumeTarget.fields)