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:
parent
152a3654ce
commit
4db3123e60
@ -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)
|
||||
|
@ -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',
|
||||
}
|
||||
|
||||
|
||||
|
@ -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…
x
Reference in New Issue
Block a user