summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--nova/objects/base.py6
-rw-r--r--nova/objects/instance.py2
-rw-r--r--nova/tests/objects/test_instance.py9
3 files changed, 15 insertions, 2 deletions
diff --git a/nova/objects/base.py b/nova/objects/base.py
index 2e0797477..b6071779f 100644
--- a/nova/objects/base.py
+++ b/nova/objects/base.py
@@ -182,6 +182,7 @@ class NovaObject(object):
'deleted_at': obj_utils.datetime_or_str_or_none,
'deleted': bool,
}
+ obj_extra_fields = []
def __init__(self):
self._changed_fields = set()
@@ -330,8 +331,9 @@ class NovaObject(object):
NOTE(danms): May be removed in the future.
"""
- for name in self.fields:
- if hasattr(self, get_attrname(name)):
+ for name in self.fields.keys() + self.obj_extra_fields:
+ if (hasattr(self, get_attrname(name)) or
+ name in self.obj_extra_fields):
yield name, getattr(self, name)
items = lambda self: list(self.iteritems())
diff --git a/nova/objects/instance.py b/nova/objects/instance.py
index aec6fe968..592206476 100644
--- a/nova/objects/instance.py
+++ b/nova/objects/instance.py
@@ -110,6 +110,8 @@ class Instance(base.NovaObject):
}
+ obj_extra_fields = ['name']
+
@property
def name(self):
try:
diff --git a/nova/tests/objects/test_instance.py b/nova/tests/objects/test_instance.py
index a9238a924..91c59f6ff 100644
--- a/nova/tests/objects/test_instance.py
+++ b/nova/tests/objects/test_instance.py
@@ -212,6 +212,15 @@ class _TestInstanceObject(object):
inst.info_cache.network_info = 'bar'
inst.save()
+ def test_iteritems_with_extra_attrs(self):
+ self.stubs.Set(instance.Instance, 'name', 'foo')
+ inst = instance.Instance()
+ inst.uuid = 'fake-uuid'
+ self.assertEqual(inst.items(),
+ {'uuid': 'fake-uuid',
+ 'name': 'foo',
+ }.items())
+
class TestInstanceObject(test_objects._LocalTest,
_TestInstanceObject):