Merge "Add CRUD notification objects for volume connector and volume target"

This commit is contained in:
Jenkins 2017-06-29 15:28:30 +00:00 committed by Gerrit Code Review
commit 8e593d9598
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.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)

View File

@ -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)

View File

@ -690,6 +690,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',
}

View File

@ -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)

View File

@ -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)