diff --git a/nova/objects/instance_group.py b/nova/objects/instance_group.py index 8a519c4764c0..b06cf92fc51c 100644 --- a/nova/objects/instance_group.py +++ b/nova/objects/instance_group.py @@ -31,7 +31,8 @@ class InstanceGroup(base.NovaPersistentObject, base.NovaObject): # Version 1.6: Add get_by_name() # Version 1.7: Deprecate metadetails # Version 1.8: Add count_members_by_user() - VERSION = '1.8' + # Version 1.9: Add get_by_instance_uuid() + VERSION = '1.9' fields = { 'id': fields.IntegerField(), @@ -89,6 +90,11 @@ class InstanceGroup(base.NovaPersistentObject, base.NovaObject): raise exception.InstanceGroupNotFound(group_uuid=name) + @base.remotable_classmethod + def get_by_instance_uuid(cls, context, instance_uuid): + db_inst = db.instance_group_get_by_instance(context, instance_uuid) + return cls._from_db_object(context, cls(), db_inst) + @classmethod def get_by_hint(cls, context, hint): if uuidutils.is_uuid_like(hint): @@ -179,7 +185,8 @@ class InstanceGroupList(base.ObjectListBase, base.NovaObject): # Version 1.3: InstanceGroup <= version 1.6 # Version 1.4: InstanceGroup <= version 1.7 # Version 1.5: InstanceGroup <= version 1.8 - VERSION = '1.5' + # Version 1.6: InstanceGroup <= version 1.9 + VERSION = '1.6' fields = { 'objects': fields.ListOfObjectsField('InstanceGroup'), @@ -192,6 +199,7 @@ class InstanceGroupList(base.ObjectListBase, base.NovaObject): '1.3': '1.6', '1.4': '1.7', '1.5': '1.8', + '1.6': '1.9', } @base.remotable_classmethod diff --git a/nova/tests/objects/test_instance_group.py b/nova/tests/objects/test_instance_group.py index 27eb3034f877..24d2059221bf 100644 --- a/nova/tests/objects/test_instance_group.py +++ b/nova/tests/objects/test_instance_group.py @@ -54,6 +54,17 @@ class _TestInstanceGroupObjects(test.TestCase): self.assertEqual(obj_result.members, members) self.assertEqual(obj_result.policies, policies) + def test_get_by_instance_uuid(self): + values = self._get_default_values() + policies = ['policy1', 'policy2'] + members = ['instance_id1', 'instance_id2'] + db_result = self._create_instance_group(self.context, values, + policies=policies, + members=members) + obj_result = instance_group.InstanceGroup.get_by_instance_uuid( + self.context, 'instance_id1') + self.assertEqual(obj_result.uuid, db_result.uuid) + def test_refresh(self): values = self._get_default_values() db_result = self._create_instance_group(self.context, values) diff --git a/nova/tests/objects/test_objects.py b/nova/tests/objects/test_objects.py index f0611a9ea433..f5b1b65ad4a6 100644 --- a/nova/tests/objects/test_objects.py +++ b/nova/tests/objects/test_objects.py @@ -958,8 +958,8 @@ object_data = { 'InstanceExternalEvent': '1.0-f1134523654407a875fd59b80f759ee7', 'InstanceFault': '1.2-313438e37e9d358f3566c85f6ddb2d3e', 'InstanceFaultList': '1.1-aeb598ffd0cd6aa61fca7adf0f5e900d', - 'InstanceGroup': '1.8-9f3ef6ee21e424f817f76a63d35eb803', - 'InstanceGroupList': '1.5-b507229896d60fad117cb3223dbaa0cc', + 'InstanceGroup': '1.9-95ece99f092e8f4f88327cdbb44162c9', + 'InstanceGroupList': '1.6-c6b78f3c9d9080d33c08667e80589817', 'InstanceInfoCache': '1.5-ef64b604498bfa505a8c93747a9d8b2f', 'InstanceList': '1.9-6f290799b0ac19eb9e72ed580520b883', 'InstancePCIRequest': '1.1-e082d174f4643e5756ba098c47c1510f',