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
This commit is contained in:
Hironori Shiina 2017-05-11 16:32:31 +09:00
parent 152a3654ce
commit 4db3123e60
5 changed files with 104 additions and 2 deletions

View File

@ -20,6 +20,7 @@ from ironic.common import exception
from ironic.db import api as db_api from ironic.db import api as db_api
from ironic.objects import base from ironic.objects import base
from ironic.objects import fields as object_fields from ironic.objects import fields as object_fields
from ironic.objects import notification
@base.IronicObjectRegistry.register @base.IronicObjectRegistry.register
@ -240,3 +241,44 @@ class VolumeConnector(base.IronicObject,
current = self.get_by_uuid(self._context, uuid=self.uuid) current = self.get_by_uuid(self._context, uuid=self.uuid)
self.obj_refresh(current) self.obj_refresh(current)
self.obj_reset_changes() 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)

View File

@ -20,6 +20,7 @@ from ironic.common import exception
from ironic.db import api as db_api from ironic.db import api as db_api
from ironic.objects import base from ironic.objects import base
from ironic.objects import fields as object_fields from ironic.objects import fields as object_fields
from ironic.objects import notification
@base.IronicObjectRegistry.register @base.IronicObjectRegistry.register
@ -263,3 +264,47 @@ class VolumeTarget(base.IronicObject,
current = self.get_by_uuid(self._context, uuid=self.uuid) current = self.get_by_uuid(self._context, uuid=self.uuid)
self.obj_refresh(current) self.obj_refresh(current)
self.obj_reset_changes() 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)

View File

@ -654,6 +654,10 @@ expected_object_fingerprints = {
'NodeConsoleNotification': '1.0-59acc533c11d306f149846f922739c15', 'NodeConsoleNotification': '1.0-59acc533c11d306f149846f922739c15',
'PortgroupCRUDNotification': '1.0-59acc533c11d306f149846f922739c15', 'PortgroupCRUDNotification': '1.0-59acc533c11d306f149846f922739c15',
'PortgroupCRUDPayload': '1.0-b73c1fecf0cef3aa56bbe3c7e2275018', 'PortgroupCRUDPayload': '1.0-b73c1fecf0cef3aa56bbe3c7e2275018',
'VolumeConnectorCRUDNotification': '1.0-59acc533c11d306f149846f922739c15',
'VolumeConnectorCRUDPayload': '1.0-5e8dbb41e05b6149d8f7bfd4daff9339',
'VolumeTargetCRUDNotification': '1.0-59acc533c11d306f149846f922739c15',
'VolumeTargetCRUDPayload': '1.0-30dcc4735512c104a3a36a2ae1e2aeb2',
} }

View File

@ -21,9 +21,11 @@ from ironic.common import exception
from ironic import objects from ironic import objects
from ironic.tests.unit.db import base as db_base from ironic.tests.unit.db import base as db_base
from ironic.tests.unit.db import utils as db_utils 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): def setUp(self):
super(TestVolumeConnectorObject, self).setUp() super(TestVolumeConnectorObject, self).setUp()
@ -193,3 +195,7 @@ class TestVolumeConnectorObject(db_base.DbTestCase):
vc_copy.name = 'aaff' vc_copy.name = 'aaff'
# Ensure this passes and an exception is not generated # Ensure this passes and an exception is not generated
vc_copy.save() vc_copy.save()
def test_payload_schemas(self):
self._check_payload_schemas(objects.volume_connector,
objects.VolumeConnector.fields)

View File

@ -21,9 +21,10 @@ from ironic.common import exception
from ironic import objects from ironic import objects
from ironic.tests.unit.db import base as db_base from ironic.tests.unit.db import base as db_base
from ironic.tests.unit.db import utils as db_utils 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): def setUp(self):
super(TestVolumeTargetObject, self).setUp() super(TestVolumeTargetObject, self).setUp()
@ -204,3 +205,7 @@ class TestVolumeTargetObject(db_base.DbTestCase):
vt_copy.name = 'aaff' vt_copy.name = 'aaff'
# Ensure this passes and an exception is not generated # Ensure this passes and an exception is not generated
vt_copy.save() vt_copy.save()
def test_payload_schemas(self):
self._check_payload_schemas(objects.volume_target,
objects.VolumeTarget.fields)