diff --git a/nova/db/api.py b/nova/db/api.py index ab8b68969a1f..dc86445c0edd 100644 --- a/nova/db/api.py +++ b/nova/db/api.py @@ -781,6 +781,11 @@ def instance_group_get(context, group_uuid): return IMPL.instance_group_get(context, group_uuid) +def instance_group_get_by_instance(context, instance_uuid): + """Get the group an instance is a member of.""" + return IMPL.instance_group_get_by_instance(context, instance_uuid) + + def instance_group_update(context, group_uuid, values): """Update the attributes of an group.""" return IMPL.instance_group_update(context, group_uuid, values) diff --git a/nova/db/sqlalchemy/api.py b/nova/db/sqlalchemy/api.py index 07af9c26b4c2..e566dfb52275 100644 --- a/nova/db/sqlalchemy/api.py +++ b/nova/db/sqlalchemy/api.py @@ -5932,6 +5932,25 @@ def instance_group_get(context, group_uuid): return group +def instance_group_get_by_instance(context, instance_uuid): + session = get_session() + with session.begin(): + group_member = model_query(context, models.InstanceGroupMember, + session=session).\ + filter_by(instance_id=instance_uuid).\ + first() + if not group_member: + raise exception.InstanceGroupNotFound(group_uuid='') + group = _instance_group_get_query(context, models.InstanceGroup, + models.InstanceGroup.id, + group_member.group_id, + session=session).first() + if not group: + raise exception.InstanceGroupNotFound( + group_uuid=group_member.group_id) + return group + + def instance_group_update(context, group_uuid, values): """Update the attributes of an group. diff --git a/nova/tests/db/test_db_api.py b/nova/tests/db/test_db_api.py index 2df59c86388a..ec7d7cce2291 100644 --- a/nova/tests/db/test_db_api.py +++ b/nova/tests/db/test_db_api.py @@ -7092,6 +7092,18 @@ class InstanceGroupDBApiTestCase(test.TestCase, ModelsObjectComparatorMixin): db.instance_group_update, self.context, 'invalid_id', values) + def test_instance_group_get_by_instance(self): + values = self._get_default_values() + group1 = self._create_instance_group(self.context, values) + + members = ['instance_id1', 'instance_id2'] + db.instance_group_members_add(self.context, group1.uuid, members) + + group2 = db.instance_group_get_by_instance(self.context, + 'instance_id1') + + self.assertEqual(group2.uuid, group1.uuid) + class InstanceGroupMembersDBApiTestCase(InstanceGroupDBApiTestCase): def test_instance_group_members_on_create(self):