Merge "Add CRUD notification objects for volume connector and volume target"
This commit is contained in:
commit
8e593d9598
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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',
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue