From 471437e4559259957021d81dd8cbd432f0116933 Mon Sep 17 00:00:00 2001 From: Seyeong Kim Date: Tue, 12 Jun 2018 01:45:53 +0900 Subject: [PATCH] Support same projects in different domain Getting 500 error when there are same project name in different domain. Selecting one domain from service_credentials. e.g. services(or service) projects are in default and service_domain having differrent id. so this selects default's services project instead of service_domain's services project Closes-Bug: #1776375 Change-Id: Ibb79423a06062f2e00785c30f54e7ac2a41a4705 --- aodh/api/controllers/v2/alarm_rules/gnocchi.py | 10 +++++++++- aodh/tests/functional/api/v2/test_alarm_scenarios.py | 3 +++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/aodh/api/controllers/v2/alarm_rules/gnocchi.py b/aodh/api/controllers/v2/alarm_rules/gnocchi.py index fafdc02bb..e2b5be52c 100644 --- a/aodh/api/controllers/v2/alarm_rules/gnocchi.py +++ b/aodh/api/controllers/v2/alarm_rules/gnocchi.py @@ -34,6 +34,10 @@ GNOCCHI_OPTS = [ default="service", help='Project name of resources creator in Gnocchi. ' '(For example the Ceilometer project name'), + cfg.StrOpt('gnocchi_external_domain_name', + default="Default", + help='Domain name of resources creator in Gnocchi. ' + '(For example, default or service_domain'), ] @@ -139,8 +143,12 @@ class AggregationMetricByResourcesLookupRule(AlarmGnocchiThresholdRule): def get_external_project_owner(): kc = keystone_client.get_client(pecan.request.cfg) project_name = pecan.request.cfg.api.gnocchi_external_project_owner + domain_name = pecan.request.cfg.api.gnocchi_external_domain_name + domains = kc.domains.list(name=domain_name) try: - project = kc.projects.find(name=project_name) + project = kc.projects.find( + name=project_name, + domain_id=domains[0].id) return project.id except ka_exceptions.NotFound: return None diff --git a/aodh/tests/functional/api/v2/test_alarm_scenarios.py b/aodh/tests/functional/api/v2/test_alarm_scenarios.py index 02c04c869..1bbf6d54f 100644 --- a/aodh/tests/functional/api/v2/test_alarm_scenarios.py +++ b/aodh/tests/functional/api/v2/test_alarm_scenarios.py @@ -2370,6 +2370,9 @@ class TestAlarmsRuleGnocchi(TestAlarmsBase): ]} ks_client = mock.Mock() + ks_client.domains.list.return_value = [mock.Mock( + id='', + name='Default')] ks_client.projects.find.return_value = mock.Mock(id='') get_client.return_value = ks_client