104 lines
3.4 KiB
Python
104 lines
3.4 KiB
Python
# Copyright 2016 Intel Corporation
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
# not use this file except in compliance with the License. You may obtain
|
|
# a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
# License for the specific language governing permissions and limitations
|
|
# under the License.
|
|
|
|
from oslo_versionedobjects import fields
|
|
|
|
from cinder.objects import base
|
|
|
|
|
|
class ManageableObject(object):
|
|
|
|
fields = {
|
|
'reference': fields.DictOfNullableStringsField(nullable=False),
|
|
'size': fields.IntegerField(nullable=True),
|
|
'safe_to_manage': fields.BooleanField(default=False, nullable=True),
|
|
'reason_not_safe': fields.StringField(nullable=True),
|
|
'cinder_id': fields.UUIDField(nullable=True),
|
|
'extra_info': fields.DictOfNullableStringsField(nullable=True),
|
|
}
|
|
|
|
@classmethod
|
|
def from_primitives(cls, context, dict_resource):
|
|
resource = cls()
|
|
driverkeys = set(dict_resource.keys()) - set(cls.fields.keys())
|
|
for name, field in cls.fields.items():
|
|
value = dict_resource.get(name)
|
|
resource[name] = value
|
|
|
|
for key in driverkeys:
|
|
if resource['extra_info'] is None:
|
|
resource['extra_info'] = {key: dict_resource[key]}
|
|
|
|
resource._context = context
|
|
resource.obj_reset_changes()
|
|
return resource
|
|
|
|
|
|
@base.CinderObjectRegistry.register
|
|
class ManageableVolume(base.CinderObject, base.CinderObjectDictCompat,
|
|
base.CinderComparableObject, ManageableObject):
|
|
# Version 1.0: Initial version
|
|
VERSION = '1.0'
|
|
|
|
|
|
@base.CinderObjectRegistry.register
|
|
class ManageableSnapshot(base.CinderObject, base.CinderObjectDictCompat,
|
|
ManageableObject):
|
|
# Version 1.0: Initial version
|
|
VERSION = '1.0'
|
|
|
|
fields = {
|
|
'source_reference': fields.DictOfNullableStringsField(),
|
|
}
|
|
|
|
|
|
@base.CinderObjectRegistry.register
|
|
class ManageableVolumeList(base.ObjectListBase, base.CinderObject):
|
|
# Version 1.0: Initial version
|
|
VERSION = '1.0'
|
|
|
|
fields = {
|
|
'objects': fields.ListOfObjectsField('ManageableVolume'),
|
|
}
|
|
|
|
@classmethod
|
|
def from_primitives(cls, context, data):
|
|
ManageableVolumeList.objects = []
|
|
|
|
for item in data:
|
|
manage_vol_obj = ManageableVolume.from_primitives(context, item)
|
|
ManageableVolumeList.objects.append(manage_vol_obj)
|
|
ManageableVolumeList._context = context
|
|
return ManageableVolumeList.objects
|
|
|
|
|
|
@base.CinderObjectRegistry.register
|
|
class ManageableSnapshotList(base.ObjectListBase, base.CinderObject):
|
|
# Version 1.0: Initial version
|
|
VERSION = '1.0'
|
|
|
|
fields = {
|
|
'objects': fields.ListOfObjectsField('ManageableSnapshot'),
|
|
}
|
|
|
|
@classmethod
|
|
def from_primitives(cls, context, data):
|
|
ManageableSnapshotList.objects = []
|
|
|
|
for item in data:
|
|
manage_snap_obj = ManageableSnapshot.from_primitives(context, item)
|
|
ManageableSnapshotList.objects.append(manage_snap_obj)
|
|
ManageableSnapshotList._context = context
|
|
return ManageableSnapshotList.objects
|