objects: allow creation of objects without dict item compat
The dict compat support in NovaObject is useful for incrementally converting existing code over to use objects. Any brand new objects though have no reason to support dictionary access, so there should be a way to disable this compat mode. This moves all the dict compat support methods out of NovaObject, to a new class NovaObjectDictCompat. All existing objects are updated to add this new class as a mix-in parent. In future any completely new objects (ie ones which aren't being used to converted existing code from dict instances) should avoid inheriting from NovaObjectDictCompat. Existing objects should also have this parent class removed once all callers are audited and/or updated to ensure they do not require dict compat. Change-Id: I03f93f0c40df6f5f7df9cefe28dff900c22294c9
This commit is contained in:
parent
1eaa53de5e
commit
722e789309
|
@ -19,7 +19,9 @@ from nova.objects import base
|
|||
from nova.objects import fields
|
||||
|
||||
|
||||
class Agent(base.NovaPersistentObject, base.NovaObject):
|
||||
# TODO(berrange): Remove NovaObjectDictCompat
|
||||
class Agent(base.NovaPersistentObject, base.NovaObject,
|
||||
base.NovaObjectDictCompat):
|
||||
VERSION = '1.0'
|
||||
|
||||
fields = {
|
||||
|
@ -68,7 +70,9 @@ class Agent(base.NovaPersistentObject, base.NovaObject):
|
|||
self.obj_reset_changes()
|
||||
|
||||
|
||||
class AgentList(base.ObjectListBase, base.NovaObject):
|
||||
# TODO(berrange): Remove NovaObjectDictCompat
|
||||
class AgentList(base.ObjectListBase, base.NovaObject,
|
||||
base.NovaObjectDictCompat):
|
||||
VERSION = '1.0'
|
||||
|
||||
fields = {
|
||||
|
|
|
@ -20,7 +20,9 @@ from nova.objects import base
|
|||
from nova.objects import fields
|
||||
|
||||
|
||||
class Aggregate(base.NovaPersistentObject, base.NovaObject):
|
||||
# TODO(berrange): Remove NovaObjectDictCompat
|
||||
class Aggregate(base.NovaPersistentObject, base.NovaObject,
|
||||
base.NovaObjectDictCompat):
|
||||
# Version 1.0: Initial version
|
||||
# Version 1.1: String attributes updated to support unicode
|
||||
VERSION = '1.1'
|
||||
|
@ -147,7 +149,9 @@ class Aggregate(base.NovaPersistentObject, base.NovaObject):
|
|||
return self.metadata.get('availability_zone', None)
|
||||
|
||||
|
||||
class AggregateList(base.ObjectListBase, base.NovaObject):
|
||||
# TODO(berrange): Remove NovaObjectDictCompat
|
||||
class AggregateList(base.ObjectListBase, base.NovaObject,
|
||||
base.NovaObjectDictCompat):
|
||||
# Version 1.0: Initial version
|
||||
# Version 1.1: Added key argument to get_by_host()
|
||||
# Aggregate <= version 1.1
|
||||
|
|
|
@ -15,7 +15,9 @@ from nova.objects import base
|
|||
from nova.objects import fields
|
||||
|
||||
|
||||
class BandwidthUsage(base.NovaPersistentObject, base.NovaObject):
|
||||
# TODO(berrange): Remove NovaObjectDictCompat
|
||||
class BandwidthUsage(base.NovaPersistentObject, base.NovaObject,
|
||||
base.NovaObjectDictCompat):
|
||||
# Version 1.0: Initial version
|
||||
# Version 1.1: Add use_slave to get_by_instance_uuid_and_mac
|
||||
# Version 1.2: Add update_cells to create
|
||||
|
@ -63,7 +65,9 @@ class BandwidthUsage(base.NovaPersistentObject, base.NovaObject):
|
|||
self._from_db_object(context, self, db_bw_usage)
|
||||
|
||||
|
||||
class BandwidthUsageList(base.ObjectListBase, base.NovaObject):
|
||||
# TODO(berrange): Remove NovaObjectDictCompat
|
||||
class BandwidthUsageList(base.ObjectListBase, base.NovaObject,
|
||||
base.NovaObjectDictCompat):
|
||||
# Version 1.0: Initial version
|
||||
# Version 1.1: Add use_slave to get_by_uuids
|
||||
# Version 1.2: BandwidthUsage <= version 1.2
|
||||
|
|
|
@ -272,7 +272,7 @@ class NovaObject(object):
|
|||
self._changed_fields = set()
|
||||
self._context = context
|
||||
for key in kwargs.keys():
|
||||
self[key] = kwargs[key]
|
||||
setattr(self, key, kwargs[key])
|
||||
|
||||
def __repr__(self):
|
||||
return '%s(%s)' % (
|
||||
|
@ -518,8 +518,8 @@ class NovaObject(object):
|
|||
changes = set(self._changed_fields)
|
||||
for field in self.fields:
|
||||
if (self.obj_attr_is_set(field) and
|
||||
isinstance(self[field], NovaObject) and
|
||||
self[field].obj_what_changed()):
|
||||
isinstance(getattr(self, field), NovaObject) and
|
||||
getattr(self, field).obj_what_changed()):
|
||||
changes.add(field)
|
||||
return changes
|
||||
|
||||
|
@ -527,7 +527,7 @@ class NovaObject(object):
|
|||
"""Returns a dict of changed fields and their new values."""
|
||||
changes = {}
|
||||
for key in self.obj_what_changed():
|
||||
changes[key] = self[key]
|
||||
changes[key] = getattr(self, key)
|
||||
return changes
|
||||
|
||||
def obj_reset_changes(self, fields=None):
|
||||
|
@ -557,6 +557,19 @@ class NovaObject(object):
|
|||
def obj_fields(self):
|
||||
return self.fields.keys() + self.obj_extra_fields
|
||||
|
||||
|
||||
class NovaObjectDictCompat(object):
|
||||
"""Mix-in to provide dictionary key access compat
|
||||
|
||||
If an object needs to support attribute access using
|
||||
dictionary items instead of object attributes, inherit
|
||||
from this class. This should only be used as a temporary
|
||||
measure until all callers are converted to use modern
|
||||
attribute access.
|
||||
|
||||
NOTE(berrange) This class will eventually be deleted.
|
||||
"""
|
||||
|
||||
# dictish syntactic sugar
|
||||
def iteritems(self):
|
||||
"""For backwards-compatibility with dict-based objects.
|
||||
|
@ -605,7 +618,7 @@ class NovaObject(object):
|
|||
if value != NotSpecifiedSentinel and not self.obj_attr_is_set(key):
|
||||
return value
|
||||
else:
|
||||
return self[key]
|
||||
return getattr(self, key)
|
||||
|
||||
def update(self, updates):
|
||||
"""For backwards-compatibility with dict-base objects.
|
||||
|
@ -613,7 +626,7 @@ class NovaObject(object):
|
|||
NOTE(danms): May be removed in the future.
|
||||
"""
|
||||
for key, value in updates.items():
|
||||
self[key] = value
|
||||
setattr(self, key, value)
|
||||
|
||||
|
||||
class NovaPersistentObject(object):
|
||||
|
|
|
@ -36,7 +36,9 @@ def _expected_cols(expected_attrs):
|
|||
if attr in _BLOCK_DEVICE_OPTIONAL_JOINED_FIELD]
|
||||
|
||||
|
||||
class BlockDeviceMapping(base.NovaPersistentObject, base.NovaObject):
|
||||
# TODO(berrange): Remove NovaObjectDictCompat
|
||||
class BlockDeviceMapping(base.NovaPersistentObject, base.NovaObject,
|
||||
base.NovaObjectDictCompat):
|
||||
# Version 1.0: Initial version
|
||||
# Version 1.1: Add instance_uuid to get_by_volume_id method
|
||||
# Version 1.2: Instance version 1.14
|
||||
|
@ -194,7 +196,9 @@ class BlockDeviceMapping(base.NovaPersistentObject, base.NovaObject):
|
|||
self.obj_reset_changes(fields=['instance'])
|
||||
|
||||
|
||||
class BlockDeviceMappingList(base.ObjectListBase, base.NovaObject):
|
||||
# TODO(berrange): Remove NovaObjectDictCompat
|
||||
class BlockDeviceMappingList(base.ObjectListBase, base.NovaObject,
|
||||
base.NovaObjectDictCompat):
|
||||
# Version 1.0: Initial version
|
||||
# Version 1.1: BlockDeviceMapping <= version 1.1
|
||||
# Version 1.2: Added use_slave to get_by_instance_uuid
|
||||
|
|
|
@ -22,7 +22,9 @@ from nova.objects import fields
|
|||
from nova import utils
|
||||
|
||||
|
||||
class ComputeNode(base.NovaPersistentObject, base.NovaObject):
|
||||
# TODO(berrange): Remove NovaObjectDictCompat
|
||||
class ComputeNode(base.NovaPersistentObject, base.NovaObject,
|
||||
base.NovaObjectDictCompat):
|
||||
# Version 1.0: Initial version
|
||||
# Version 1.1: Added get_by_service_id()
|
||||
# Version 1.2: String attributes updated to support unicode
|
||||
|
@ -219,7 +221,9 @@ class ComputeNode(base.NovaPersistentObject, base.NovaObject):
|
|||
return self._cached_service
|
||||
|
||||
|
||||
class ComputeNodeList(base.ObjectListBase, base.NovaObject):
|
||||
# TODO(berrange): Remove NovaObjectDictCompat
|
||||
class ComputeNodeList(base.ObjectListBase, base.NovaObject,
|
||||
base.NovaObjectDictCompat):
|
||||
# Version 1.0: Initial version
|
||||
# ComputeNode <= version 1.2
|
||||
# Version 1.1 ComputeNode version 1.3
|
||||
|
|
|
@ -18,7 +18,9 @@ from nova.objects import base
|
|||
from nova.objects import fields
|
||||
|
||||
|
||||
class DNSDomain(base.NovaPersistentObject, base.NovaObject):
|
||||
# TODO(berrange): Remove NovaObjectDictCompat
|
||||
class DNSDomain(base.NovaPersistentObject, base.NovaObject,
|
||||
base.NovaObjectDictCompat):
|
||||
# Version 1.0: Initial version
|
||||
VERSION = '1.0'
|
||||
|
||||
|
@ -56,7 +58,9 @@ class DNSDomain(base.NovaPersistentObject, base.NovaObject):
|
|||
db.dnsdomain_unregister(context, domain)
|
||||
|
||||
|
||||
class DNSDomainList(base.ObjectListBase, base.NovaObject):
|
||||
# TODO(berrange): Remove NovaObjectDictCompat
|
||||
class DNSDomainList(base.ObjectListBase, base.NovaObject,
|
||||
base.NovaObjectDictCompat):
|
||||
# Version 1.0: Initial version
|
||||
VERSION = '1.0'
|
||||
fields = {
|
||||
|
|
|
@ -18,7 +18,9 @@ from nova.objects import base
|
|||
from nova.objects import fields
|
||||
|
||||
|
||||
class EC2InstanceMapping(base.NovaPersistentObject, base.NovaObject):
|
||||
# TODO(berrange): Remove NovaObjectDictCompat
|
||||
class EC2InstanceMapping(base.NovaPersistentObject, base.NovaObject,
|
||||
base.NovaObjectDictCompat):
|
||||
# Version 1.0: Initial version
|
||||
VERSION = '1.0'
|
||||
|
||||
|
@ -56,7 +58,9 @@ class EC2InstanceMapping(base.NovaPersistentObject, base.NovaObject):
|
|||
return cls._from_db_object(context, cls(), db_imap)
|
||||
|
||||
|
||||
class EC2VolumeMapping(base.NovaPersistentObject, base.NovaObject):
|
||||
# TODO(berrange): Remove NovaObjectDictCompat
|
||||
class EC2VolumeMapping(base.NovaPersistentObject, base.NovaObject,
|
||||
base.NovaObjectDictCompat):
|
||||
# Version 1.0: Initial version
|
||||
VERSION = '1.0'
|
||||
|
||||
|
@ -94,7 +98,9 @@ class EC2VolumeMapping(base.NovaPersistentObject, base.NovaObject):
|
|||
return cls._from_db_object(context, cls(context), db_vmap)
|
||||
|
||||
|
||||
class EC2SnapshotMapping(base.NovaPersistentObject, base.NovaObject):
|
||||
# TODO(berrange): Remove NovaObjectDictCompat
|
||||
class EC2SnapshotMapping(base.NovaPersistentObject, base.NovaObject,
|
||||
base.NovaObjectDictCompat):
|
||||
# Version 1.0: Initial version
|
||||
VERSION = '1.0'
|
||||
|
||||
|
@ -132,7 +138,9 @@ class EC2SnapshotMapping(base.NovaPersistentObject, base.NovaObject):
|
|||
return cls._from_db_object(context, cls(context), db_smap)
|
||||
|
||||
|
||||
class S3ImageMapping(base.NovaPersistentObject, base.NovaObject):
|
||||
# TODO(berrange): Remove NovaObjectDictCompat
|
||||
class S3ImageMapping(base.NovaPersistentObject, base.NovaObject,
|
||||
base.NovaObjectDictCompat):
|
||||
# Version 1.0: Initial version
|
||||
VERSION = '1.0'
|
||||
|
||||
|
|
|
@ -28,7 +28,9 @@ EVENT_NAMES = [
|
|||
EVENT_STATUSES = ['failed', 'completed', 'in-progress']
|
||||
|
||||
|
||||
class InstanceExternalEvent(obj_base.NovaObject):
|
||||
# TODO(berrange): Remove NovaObjectDictCompat
|
||||
class InstanceExternalEvent(obj_base.NovaObject,
|
||||
obj_base.NovaObjectDictCompat):
|
||||
# Version 1.0: Initial version
|
||||
# Supports network-changed and vif-plugged
|
||||
VERSION = '1.0'
|
||||
|
|
|
@ -26,7 +26,9 @@ FIXED_IP_OPTIONAL_ATTRS = ['instance', 'network', 'virtual_interface',
|
|||
'floating_ips']
|
||||
|
||||
|
||||
class FixedIP(obj_base.NovaPersistentObject, obj_base.NovaObject):
|
||||
# TODO(berrange): Remove NovaObjectDictCompat
|
||||
class FixedIP(obj_base.NovaPersistentObject, obj_base.NovaObject,
|
||||
obj_base.NovaObjectDictCompat):
|
||||
# Version 1.0: Initial version
|
||||
# Version 1.1: Added virtual_interface field
|
||||
# Version 1.2: Instance version 1.14
|
||||
|
@ -197,7 +199,9 @@ class FixedIP(obj_base.NovaPersistentObject, obj_base.NovaObject):
|
|||
self.obj_reset_changes(['instance_uuid', 'instance'])
|
||||
|
||||
|
||||
class FixedIPList(obj_base.ObjectListBase, obj_base.NovaObject):
|
||||
# TODO(berrange): Remove NovaObjectDictCompat
|
||||
class FixedIPList(obj_base.ObjectListBase, obj_base.NovaObject,
|
||||
obj_base.NovaObjectDictCompat):
|
||||
# Version 1.0: Initial version
|
||||
# Version 1.1: Added get_by_network()
|
||||
# Version 1.2: FixedIP <= version 1.2
|
||||
|
|
|
@ -22,7 +22,9 @@ from nova.objects import fields
|
|||
OPTIONAL_FIELDS = ['extra_specs', 'projects']
|
||||
|
||||
|
||||
class Flavor(base.NovaPersistentObject, base.NovaObject):
|
||||
# TODO(berrange): Remove NovaObjectDictCompat
|
||||
class Flavor(base.NovaPersistentObject, base.NovaObject,
|
||||
base.NovaObjectDictCompat):
|
||||
# Version 1.0: Initial version
|
||||
# Version 1.1: Added save_projects(), save_extra_specs(), removed
|
||||
# remoteable from save()
|
||||
|
@ -248,7 +250,9 @@ class Flavor(base.NovaPersistentObject, base.NovaObject):
|
|||
db.flavor_destroy(context, self.name)
|
||||
|
||||
|
||||
class FlavorList(base.ObjectListBase, base.NovaObject):
|
||||
# TODO(berrange): Remove NovaObjectDictCompat
|
||||
class FlavorList(base.ObjectListBase, base.NovaObject,
|
||||
base.NovaObjectDictCompat):
|
||||
VERSION = '1.1'
|
||||
|
||||
fields = {
|
||||
|
|
|
@ -21,7 +21,9 @@ from nova.objects import fields
|
|||
FLOATING_IP_OPTIONAL_ATTRS = ['fixed_ip']
|
||||
|
||||
|
||||
class FloatingIP(obj_base.NovaPersistentObject, obj_base.NovaObject):
|
||||
# TODO(berrange): Remove NovaObjectDictCompat
|
||||
class FloatingIP(obj_base.NovaPersistentObject, obj_base.NovaObject,
|
||||
obj_base.NovaObjectDictCompat):
|
||||
# Version 1.0: Initial version
|
||||
# Version 1.1: Added _get_addresses_by_instance_uuid()
|
||||
# Version 1.2: FixedIP <= version 1.2
|
||||
|
@ -160,7 +162,9 @@ class FloatingIP(obj_base.NovaPersistentObject, obj_base.NovaObject):
|
|||
self._from_db_object(context, self, db_floatingip)
|
||||
|
||||
|
||||
class FloatingIPList(obj_base.ObjectListBase, obj_base.NovaObject):
|
||||
# TODO(berrange): Remove NovaObjectDictCompat
|
||||
class FloatingIPList(obj_base.ObjectListBase, obj_base.NovaObject,
|
||||
obj_base.NovaObjectDictCompat):
|
||||
# Version 1.3: FloatingIP 1.2
|
||||
# Version 1.4: FloatingIP 1.3
|
||||
# Version 1.5: FloatingIP 1.4
|
||||
|
|
|
@ -17,7 +17,9 @@ from nova.objects import base
|
|||
from nova.objects import fields
|
||||
|
||||
|
||||
class HVSpec(base.NovaObject):
|
||||
# TODO(berrange): Remove NovaObjectDictCompat
|
||||
class HVSpec(base.NovaObject,
|
||||
base.NovaObjectDictCompat):
|
||||
# Version 1.0: Initial version
|
||||
VERSION = '1.0'
|
||||
|
||||
|
|
|
@ -67,7 +67,9 @@ def _expected_cols(expected_attrs):
|
|||
return simple_cols + complex_cols
|
||||
|
||||
|
||||
class Instance(base.NovaPersistentObject, base.NovaObject):
|
||||
# TODO(berrange): Remove NovaObjectDictCompat
|
||||
class Instance(base.NovaPersistentObject, base.NovaObject,
|
||||
base.NovaObjectDictCompat):
|
||||
# Version 1.0: Initial version
|
||||
# Version 1.1: Added info_cache
|
||||
# Version 1.2: Added security_groups
|
||||
|
@ -699,7 +701,9 @@ def _make_instance_list(context, inst_list, db_inst_list, expected_attrs):
|
|||
return inst_list
|
||||
|
||||
|
||||
class InstanceList(base.ObjectListBase, base.NovaObject):
|
||||
# TODO(berrange): Remove NovaObjectDictCompat
|
||||
class InstanceList(base.ObjectListBase, base.NovaObject,
|
||||
base.NovaObjectDictCompat):
|
||||
# Version 1.0: Initial version
|
||||
# Version 1.1: Added use_slave to get_by_host
|
||||
# Instance <= version 1.9
|
||||
|
|
|
@ -20,7 +20,9 @@ from nova.objects import base
|
|||
from nova.objects import fields
|
||||
|
||||
|
||||
class InstanceAction(base.NovaPersistentObject, base.NovaObject):
|
||||
# TODO(berrange): Remove NovaObjectDictCompat
|
||||
class InstanceAction(base.NovaPersistentObject, base.NovaObject,
|
||||
base.NovaObjectDictCompat):
|
||||
# Version 1.0: Initial version
|
||||
# Version 1.1: String attributes updated to support unicode
|
||||
VERSION = '1.1'
|
||||
|
@ -91,7 +93,9 @@ class InstanceAction(base.NovaPersistentObject, base.NovaObject):
|
|||
self._from_db_object(context, self, db_action)
|
||||
|
||||
|
||||
class InstanceActionList(base.ObjectListBase, base.NovaObject):
|
||||
# TODO(berrange): Remove NovaObjectDictCompat
|
||||
class InstanceActionList(base.ObjectListBase, base.NovaObject,
|
||||
base.NovaObjectDictCompat):
|
||||
# Version 1.0: Initial version
|
||||
# InstanceAction <= version 1.1
|
||||
VERSION = '1.0'
|
||||
|
@ -109,7 +113,9 @@ class InstanceActionList(base.ObjectListBase, base.NovaObject):
|
|||
return base.obj_make_list(context, cls(), InstanceAction, db_actions)
|
||||
|
||||
|
||||
class InstanceActionEvent(base.NovaPersistentObject, base.NovaObject):
|
||||
# TODO(berrange): Remove NovaObjectDictCompat
|
||||
class InstanceActionEvent(base.NovaPersistentObject, base.NovaObject,
|
||||
base.NovaObjectDictCompat):
|
||||
# Version 1.0: Initial version
|
||||
# Version 1.1: event_finish_with_failure decorated with serialize_args
|
||||
VERSION = '1.1'
|
||||
|
@ -199,7 +205,9 @@ class InstanceActionEvent(base.NovaPersistentObject, base.NovaObject):
|
|||
self.finish_with_failure(context, exc_val=None, exc_tb=None)
|
||||
|
||||
|
||||
class InstanceActionEventList(base.ObjectListBase, base.NovaObject):
|
||||
# TODO(berrange): Remove NovaObjectDictCompat
|
||||
class InstanceActionEventList(base.ObjectListBase, base.NovaObject,
|
||||
base.NovaObjectDictCompat):
|
||||
fields = {
|
||||
'objects': fields.ListOfObjectsField('InstanceActionEvent'),
|
||||
}
|
||||
|
|
|
@ -28,7 +28,9 @@ from nova.openstack.common import log as logging
|
|||
LOG = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class InstanceFault(base.NovaPersistentObject, base.NovaObject):
|
||||
# TODO(berrange): Remove NovaObjectDictCompat
|
||||
class InstanceFault(base.NovaPersistentObject, base.NovaObject,
|
||||
base.NovaObjectDictCompat):
|
||||
# Version 1.0: Initial version
|
||||
# Version 1.1: String attributes updated to support unicode
|
||||
# Version 1.2: Added create()
|
||||
|
@ -87,7 +89,9 @@ class InstanceFault(base.NovaPersistentObject, base.NovaObject):
|
|||
LOG.exception(_LE("Failed to notify cells of instance fault"))
|
||||
|
||||
|
||||
class InstanceFaultList(base.ObjectListBase, base.NovaObject):
|
||||
# TODO(berrange): Remove NovaObjectDictCompat
|
||||
class InstanceFaultList(base.ObjectListBase, base.NovaObject,
|
||||
base.NovaObjectDictCompat):
|
||||
# Version 1.0: Initial version
|
||||
# InstanceFault <= version 1.1
|
||||
# Version 1.1: InstanceFault version 1.2
|
||||
|
|
|
@ -22,7 +22,9 @@ from nova.openstack.common import uuidutils
|
|||
from nova import utils
|
||||
|
||||
|
||||
class InstanceGroup(base.NovaPersistentObject, base.NovaObject):
|
||||
# TODO(berrange): Remove NovaObjectDictCompat
|
||||
class InstanceGroup(base.NovaPersistentObject, base.NovaObject,
|
||||
base.NovaObjectDictCompat):
|
||||
# Version 1.0: Initial version
|
||||
# Version 1.1: String attributes updated to support unicode
|
||||
# Version 1.2: Use list/dict helpers for policies, metadetails, members
|
||||
|
@ -194,7 +196,9 @@ class InstanceGroup(base.NovaPersistentObject, base.NovaObject):
|
|||
return len(instances)
|
||||
|
||||
|
||||
class InstanceGroupList(base.ObjectListBase, base.NovaObject):
|
||||
# TODO(berrange): Remove NovaObjectDictCompat
|
||||
class InstanceGroupList(base.ObjectListBase, base.NovaObject,
|
||||
base.NovaObjectDictCompat):
|
||||
# Version 1.0: Initial version
|
||||
# InstanceGroup <= version 1.3
|
||||
# Version 1.1: InstanceGroup <= version 1.4
|
||||
|
|
|
@ -24,7 +24,9 @@ from nova.openstack.common import log as logging
|
|||
LOG = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class InstanceInfoCache(base.NovaPersistentObject, base.NovaObject):
|
||||
# TODO(berrange): Remove NovaObjectDictCompat
|
||||
class InstanceInfoCache(base.NovaPersistentObject, base.NovaObject,
|
||||
base.NovaObjectDictCompat):
|
||||
# Version 1.0: Initial version
|
||||
# Version 1.1: Converted network_info to store the model.
|
||||
# Version 1.2: Added new() and update_cells kwarg to save().
|
||||
|
|
|
@ -21,7 +21,9 @@ from nova.objects import fields as obj_fields
|
|||
from nova.virt import hardware
|
||||
|
||||
|
||||
class InstanceNUMACell(base.NovaObject):
|
||||
# TODO(berrange): Remove NovaObjectDictCompat
|
||||
class InstanceNUMACell(base.NovaObject,
|
||||
base.NovaObjectDictCompat):
|
||||
# Version 1.0: Initial version
|
||||
# Version 1.1: Add pagesize field
|
||||
# Version 1.2: Add cpu_pinning_raw and topology fields
|
||||
|
@ -97,7 +99,9 @@ class InstanceNUMACell(base.NovaObject):
|
|||
self.pin(vcpu, pcpu)
|
||||
|
||||
|
||||
class InstanceNUMATopology(base.NovaObject):
|
||||
# TODO(berrange): Remove NovaObjectDictCompat
|
||||
class InstanceNUMATopology(base.NovaObject,
|
||||
base.NovaObjectDictCompat):
|
||||
# Version 1.0: Initial version
|
||||
# Version 1.1: Takes into account pagesize
|
||||
VERSION = '1.1'
|
||||
|
|
|
@ -18,7 +18,9 @@ from nova.objects import fields
|
|||
from nova import utils
|
||||
|
||||
|
||||
class InstancePCIRequest(base.NovaObject):
|
||||
# TODO(berrange): Remove NovaObjectDictCompat
|
||||
class InstancePCIRequest(base.NovaObject,
|
||||
base.NovaObjectDictCompat):
|
||||
# Version 1.0: Initial version
|
||||
# Version 1.1: Add request_id
|
||||
VERSION = '1.1'
|
||||
|
@ -49,7 +51,9 @@ class InstancePCIRequest(base.NovaObject):
|
|||
del primitive['request_id']
|
||||
|
||||
|
||||
class InstancePCIRequests(base.NovaObject):
|
||||
# TODO(berrange): Remove NovaObjectDictCompat
|
||||
class InstancePCIRequests(base.NovaObject,
|
||||
base.NovaObjectDictCompat):
|
||||
# Version 1.0: Initial version
|
||||
# Version 1.1: InstancePCIRequest 1.1
|
||||
VERSION = '1.1'
|
||||
|
|
|
@ -19,7 +19,9 @@ from nova.objects import base
|
|||
from nova.objects import fields
|
||||
|
||||
|
||||
class KeyPair(base.NovaPersistentObject, base.NovaObject):
|
||||
# TODO(berrange): Remove NovaObjectDictCompat
|
||||
class KeyPair(base.NovaPersistentObject, base.NovaObject,
|
||||
base.NovaObjectDictCompat):
|
||||
# Version 1.0: Initial version
|
||||
# Version 1.1: String attributes updated to support unicode
|
||||
VERSION = '1.1'
|
||||
|
@ -63,7 +65,9 @@ class KeyPair(base.NovaPersistentObject, base.NovaObject):
|
|||
db.key_pair_destroy(context, self.user_id, self.name)
|
||||
|
||||
|
||||
class KeyPairList(base.ObjectListBase, base.NovaObject):
|
||||
# TODO(berrange): Remove NovaObjectDictCompat
|
||||
class KeyPairList(base.ObjectListBase, base.NovaObject,
|
||||
base.NovaObjectDictCompat):
|
||||
# Version 1.0: Initial version
|
||||
# KeyPair <= version 1.1
|
||||
VERSION = '1.0'
|
||||
|
|
|
@ -19,7 +19,9 @@ from nova.objects import base
|
|||
from nova.objects import fields
|
||||
|
||||
|
||||
class Migration(base.NovaPersistentObject, base.NovaObject):
|
||||
# TODO(berrange): Remove NovaObjectDictCompat
|
||||
class Migration(base.NovaPersistentObject, base.NovaObject,
|
||||
base.NovaObjectDictCompat):
|
||||
# Version 1.0: Initial version
|
||||
# Version 1.1: String attributes updated to support unicode
|
||||
VERSION = '1.1'
|
||||
|
@ -78,7 +80,9 @@ class Migration(base.NovaPersistentObject, base.NovaObject):
|
|||
return objects.Instance.get_by_uuid(self._context, self.instance_uuid)
|
||||
|
||||
|
||||
class MigrationList(base.ObjectListBase, base.NovaObject):
|
||||
# TODO(berrange): Remove NovaObjectDictCompat
|
||||
class MigrationList(base.ObjectListBase, base.NovaObject,
|
||||
base.NovaObjectDictCompat):
|
||||
# Version 1.0: Initial version
|
||||
# Migration <= 1.1
|
||||
# Version 1.1: Added use_slave to get_unconfirmed_by_dest_compute
|
||||
|
|
|
@ -40,7 +40,9 @@ CONF = cfg.CONF
|
|||
CONF.register_opts(network_opts)
|
||||
|
||||
|
||||
class Network(obj_base.NovaPersistentObject, obj_base.NovaObject):
|
||||
# TODO(berrange): Remove NovaObjectDictCompat
|
||||
class Network(obj_base.NovaPersistentObject, obj_base.NovaObject,
|
||||
obj_base.NovaObjectDictCompat):
|
||||
# Version 1.0: Initial version
|
||||
# Version 1.1: Added in_use_on_host()
|
||||
# Version 1.2: Added mtu, dhcp_server, enable_dhcp, share_address
|
||||
|
@ -203,7 +205,9 @@ class Network(obj_base.NovaPersistentObject, obj_base.NovaObject):
|
|||
self._from_db_object(context, self, db_network)
|
||||
|
||||
|
||||
class NetworkList(obj_base.ObjectListBase, obj_base.NovaObject):
|
||||
# TODO(berrange): Remove NovaObjectDictCompat
|
||||
class NetworkList(obj_base.ObjectListBase, obj_base.NovaObject,
|
||||
obj_base.NovaObjectDictCompat):
|
||||
# Version 1.0: Initial version
|
||||
# Version 1.1: Added get_by_project()
|
||||
# Version 1.2: Network <= version 1.2
|
||||
|
|
|
@ -17,7 +17,9 @@ from nova.objects import fields
|
|||
from nova import utils
|
||||
|
||||
|
||||
class NetworkRequest(obj_base.NovaObject):
|
||||
# TODO(berrange): Remove NovaObjectDictCompat
|
||||
class NetworkRequest(obj_base.NovaObject,
|
||||
obj_base.NovaObjectDictCompat):
|
||||
# Version 1.0: Initial version
|
||||
# Version 1.1: Added pci_request_id
|
||||
VERSION = '1.1'
|
||||
|
@ -55,7 +57,9 @@ class NetworkRequest(obj_base.NovaObject):
|
|||
return cls(network_id=network_id, address=address)
|
||||
|
||||
|
||||
class NetworkRequestList(obj_base.ObjectListBase, obj_base.NovaObject):
|
||||
# TODO(berrange): Remove NovaObjectDictCompat
|
||||
class NetworkRequestList(obj_base.ObjectListBase, obj_base.NovaObject,
|
||||
obj_base.NovaObjectDictCompat):
|
||||
fields = {
|
||||
'objects': fields.ListOfObjectsField('NetworkRequest'),
|
||||
}
|
||||
|
|
|
@ -19,7 +19,9 @@ from nova.objects import fields
|
|||
from nova.virt import hardware
|
||||
|
||||
|
||||
class NUMACell(base.NovaObject):
|
||||
# TODO(berrange): Remove NovaObjectDictCompat
|
||||
class NUMACell(base.NovaObject,
|
||||
base.NovaObjectDictCompat):
|
||||
# Version 1.0: Initial version
|
||||
# Version 1.1: Added pinned_cpus and siblings fields
|
||||
# Version 1.2: Added mempages field
|
||||
|
@ -73,7 +75,9 @@ class NUMACell(base.NovaObject):
|
|||
cpu_usage=cpu_usage, memory_usage=memory_usage)
|
||||
|
||||
|
||||
class NUMAPagesTopology(base.NovaObject):
|
||||
# TODO(berrange): Remove NovaObjectDictCompat
|
||||
class NUMAPagesTopology(base.NovaObject,
|
||||
base.NovaObjectDictCompat):
|
||||
# Version 1.0: Initial version
|
||||
VERSION = '1.0'
|
||||
|
||||
|
@ -94,7 +98,9 @@ class NUMAPagesTopology(base.NovaObject):
|
|||
return self.free * self.size_kb
|
||||
|
||||
|
||||
class NUMATopology(base.NovaObject):
|
||||
# TODO(berrange): Remove NovaObjectDictCompat
|
||||
class NUMATopology(base.NovaObject,
|
||||
base.NovaObjectDictCompat):
|
||||
# Version 1.0: Initial version
|
||||
# Version 1.1: Update NUMACell to 1.1
|
||||
# Version 1.1: Update NUMACell to 1.2
|
||||
|
|
|
@ -26,7 +26,9 @@ from nova import utils
|
|||
LOG = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class PciDevice(base.NovaPersistentObject, base.NovaObject):
|
||||
# TODO(berrange): Remove NovaObjectDictCompat
|
||||
class PciDevice(base.NovaPersistentObject, base.NovaObject,
|
||||
base.NovaObjectDictCompat):
|
||||
|
||||
"""Object to represent a PCI device on a compute node.
|
||||
|
||||
|
@ -173,7 +175,9 @@ class PciDevice(base.NovaPersistentObject, base.NovaObject):
|
|||
self._from_db_object(context, self, db_pci)
|
||||
|
||||
|
||||
class PciDeviceList(base.ObjectListBase, base.NovaObject):
|
||||
# TODO(berrange): Remove NovaObjectDictCompat
|
||||
class PciDeviceList(base.ObjectListBase, base.NovaObject,
|
||||
base.NovaObjectDictCompat):
|
||||
# Version 1.0: Initial version
|
||||
# PciDevice <= 1.1
|
||||
# Version 1.1: PciDevice 1.2
|
||||
|
|
|
@ -46,7 +46,9 @@ def ids_from_server_group(context, server_group):
|
|||
return ids_from_instance(context, server_group)
|
||||
|
||||
|
||||
class Quotas(base.NovaObject):
|
||||
# TODO(berrange): Remove NovaObjectDictCompat
|
||||
class Quotas(base.NovaObject,
|
||||
base.NovaObjectDictCompat):
|
||||
# Version 1.0: initial version
|
||||
# Version 1.1: Added create_limit() and update_limit()
|
||||
# Version 1.2: Added limit_check() and count()
|
||||
|
|
|
@ -18,7 +18,9 @@ from nova.objects import base
|
|||
from nova.objects import fields
|
||||
|
||||
|
||||
class SecurityGroup(base.NovaPersistentObject, base.NovaObject):
|
||||
# TODO(berrange): Remove NovaObjectDictCompat
|
||||
class SecurityGroup(base.NovaPersistentObject, base.NovaObject,
|
||||
base.NovaObjectDictCompat):
|
||||
# Version 1.0: Initial version
|
||||
# Version 1.1: String attributes updated to support unicode
|
||||
VERSION = '1.1'
|
||||
|
@ -70,7 +72,9 @@ class SecurityGroup(base.NovaPersistentObject, base.NovaObject):
|
|||
db.security_group_get(context, self.id))
|
||||
|
||||
|
||||
class SecurityGroupList(base.ObjectListBase, base.NovaObject):
|
||||
# TODO(berrange): Remove NovaObjectDictCompat
|
||||
class SecurityGroupList(base.ObjectListBase, base.NovaObject,
|
||||
base.NovaObjectDictCompat):
|
||||
# Version 1.0: Initial version
|
||||
# SecurityGroup <= version 1.1
|
||||
VERSION = '1.0'
|
||||
|
|
|
@ -21,7 +21,9 @@ from nova.objects import fields
|
|||
OPTIONAL_ATTRS = ['parent_group', 'grantee_group']
|
||||
|
||||
|
||||
class SecurityGroupRule(base.NovaPersistentObject, base.NovaObject):
|
||||
# TODO(berrange): Remove NovaObjectDictCompat
|
||||
class SecurityGroupRule(base.NovaPersistentObject, base.NovaObject,
|
||||
base.NovaObjectDictCompat):
|
||||
# Version 1.0: Initial version
|
||||
# Version 1.1: Added create() and set id as read_only
|
||||
VERSION = '1.1'
|
||||
|
@ -82,7 +84,9 @@ class SecurityGroupRule(base.NovaPersistentObject, base.NovaObject):
|
|||
return cls._from_db_object(context, cls(), db_rule)
|
||||
|
||||
|
||||
class SecurityGroupRuleList(base.ObjectListBase, base.NovaObject):
|
||||
# TODO(berrange): Remove NovaObjectDictCompat
|
||||
class SecurityGroupRuleList(base.ObjectListBase, base.NovaObject,
|
||||
base.NovaObjectDictCompat):
|
||||
fields = {
|
||||
'objects': fields.ListOfObjectsField('SecurityGroupRule'),
|
||||
}
|
||||
|
|
|
@ -24,7 +24,9 @@ from nova.openstack.common import log as logging
|
|||
LOG = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class Service(base.NovaPersistentObject, base.NovaObject):
|
||||
# TODO(berrange): Remove NovaObjectDictCompat
|
||||
class Service(base.NovaPersistentObject, base.NovaObject,
|
||||
base.NovaObjectDictCompat):
|
||||
# Version 1.0: Initial version
|
||||
# Version 1.1: Added compute_node nested object
|
||||
# Version 1.2: String attributes updated to support unicode
|
||||
|
@ -135,7 +137,9 @@ class Service(base.NovaPersistentObject, base.NovaObject):
|
|||
db.service_destroy(context, self.id)
|
||||
|
||||
|
||||
class ServiceList(base.ObjectListBase, base.NovaObject):
|
||||
# TODO(berrange): Remove NovaObjectDictCompat
|
||||
class ServiceList(base.ObjectListBase, base.NovaObject,
|
||||
base.NovaObjectDictCompat):
|
||||
# Version 1.0: Initial version
|
||||
# Service <= version 1.2
|
||||
# Version 1.1 Service version 1.3
|
||||
|
|
|
@ -16,7 +16,9 @@ from nova.objects import base
|
|||
from nova.objects import fields
|
||||
|
||||
|
||||
class Tag(base.NovaObject):
|
||||
# TODO(berrange): Remove NovaObjectDictCompat
|
||||
class Tag(base.NovaObject,
|
||||
base.NovaObjectDictCompat):
|
||||
# Version 1.0: Initial version
|
||||
VERSION = '1.0'
|
||||
|
||||
|
@ -43,7 +45,9 @@ class Tag(base.NovaObject):
|
|||
db.instance_tag_delete(context, resource_id, name)
|
||||
|
||||
|
||||
class TagList(base.ObjectListBase, base.NovaObject):
|
||||
# TODO(berrange): Remove NovaObjectDictCompat
|
||||
class TagList(base.ObjectListBase, base.NovaObject,
|
||||
base.NovaObjectDictCompat):
|
||||
# Version 1.0: Initial version
|
||||
VERSION = '1.0'
|
||||
|
||||
|
|
|
@ -14,7 +14,9 @@ from nova.objects import base
|
|||
from nova.objects import fields
|
||||
|
||||
|
||||
class VirtCPUTopology(base.NovaObject):
|
||||
# TODO(berrange): Remove NovaObjectDictCompat
|
||||
class VirtCPUTopology(base.NovaObject,
|
||||
base.NovaObjectDictCompat):
|
||||
# Version 1.0: Initial version
|
||||
VERSION = '1.0'
|
||||
|
||||
|
|
|
@ -19,7 +19,9 @@ from nova.objects import base
|
|||
from nova.objects import fields
|
||||
|
||||
|
||||
class VirtualInterface(base.NovaPersistentObject, base.NovaObject):
|
||||
# TODO(berrange): Remove NovaObjectDictCompat
|
||||
class VirtualInterface(base.NovaPersistentObject, base.NovaObject,
|
||||
base.NovaObjectDictCompat):
|
||||
# Version 1.0: Initial version
|
||||
VERSION = '1.0'
|
||||
|
||||
|
@ -78,7 +80,9 @@ class VirtualInterface(base.NovaPersistentObject, base.NovaObject):
|
|||
db.virtual_interface_delete_by_instance(context, instance_uuid)
|
||||
|
||||
|
||||
class VirtualInterfaceList(base.ObjectListBase, base.NovaObject):
|
||||
# TODO(berrange): Remove NovaObjectDictCompat
|
||||
class VirtualInterfaceList(base.ObjectListBase, base.NovaObject,
|
||||
base.NovaObjectDictCompat):
|
||||
# Version 1.0: Initial version
|
||||
VERSION = '1.0'
|
||||
fields = {
|
||||
|
|
|
@ -570,7 +570,8 @@ class ConductorTestCase(_BaseTestCase, test.TestCase):
|
|||
self._test_object_action, True, True)
|
||||
|
||||
def test_object_action_copies_object(self):
|
||||
class TestObject(obj_base.NovaObject):
|
||||
class TestObject(obj_base.NovaObject,
|
||||
obj_base.NovaObjectDictCompat):
|
||||
fields = {'dict': fields.DictOfStringsField()}
|
||||
|
||||
def touch_dict(self, context):
|
||||
|
|
|
@ -47,7 +47,8 @@ class MyOwnedObject(base.NovaPersistentObject, base.NovaObject):
|
|||
fields = {'baz': fields.Field(fields.Integer())}
|
||||
|
||||
|
||||
class MyObj(base.NovaPersistentObject, base.NovaObject):
|
||||
class MyObj(base.NovaPersistentObject, base.NovaObject,
|
||||
base.NovaObjectDictCompat):
|
||||
VERSION = '1.6'
|
||||
fields = {'foo': fields.Field(fields.Integer(), default=1),
|
||||
'bar': fields.Field(fields.String()),
|
||||
|
@ -207,7 +208,7 @@ class TestMetaclass(test.TestCase):
|
|||
class TestObjToPrimitive(test.TestCase):
|
||||
|
||||
def test_obj_to_primitive_list(self):
|
||||
class MyObjElement(base.NovaObject):
|
||||
class MyObjElement(base.NovaObject, base.NovaObjectDictCompat):
|
||||
fields = {'foo': fields.IntegerField()}
|
||||
|
||||
def __init__(self, foo):
|
||||
|
@ -238,7 +239,7 @@ class TestObjToPrimitive(test.TestCase):
|
|||
base.obj_to_primitive(mylist))
|
||||
|
||||
def test_obj_to_primitive_with_ip_addr(self):
|
||||
class TestObject(base.NovaObject):
|
||||
class TestObject(base.NovaObject, base.NovaObjectDictCompat):
|
||||
fields = {'addr': fields.IPAddressField(),
|
||||
'cidr': fields.IPNetworkField()}
|
||||
|
||||
|
|
Loading…
Reference in New Issue