cinder/cinder/objects/manageableresources.py

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