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

Change-Id: I3f12811684a49794bca87c4a10b18d45879da773
Closes-Bug: #1776375
This commit is contained in:
Seyeong Kim 2018-06-15 13:50:09 +09:00
parent 75d7aff659
commit e923493e4f
2 changed files with 19 additions and 1 deletions

View File

@ -20,6 +20,7 @@ from gnocchiclient import client
from gnocchiclient import exceptions
from keystoneauth1 import exceptions as ka_exceptions
from oslo_config import cfg
from oslo_log import log
import pecan
import wsme
from wsme import types as wtypes
@ -28,12 +29,17 @@ from aodh.api.controllers.v2 import base
from aodh.api.controllers.v2 import utils as v2_utils
from aodh import keystone_client
LOG = log.getLogger(__name__)
GNOCCHI_OPTS = [
cfg.StrOpt('gnocchi_external_project_owner',
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,10 +145,19 @@ 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
try:
project = kc.projects.find(name=project_name)
domains = kc.domains.list(name=domain_name)
project = kc.projects.find(
name=project_name,
domain_id=domains[0].id)
return project.id
except ka_exceptions.NotFound:
LOG.warning("Unable to get domain or project information. "
"domain_name : %(domain_name)s, "
"project_name : %(project_name)s",
{'domain_name': domain_name,
'project_name': project_name})
return None
@classmethod

View File

@ -2370,6 +2370,9 @@ class TestAlarmsRuleGnocchi(TestAlarmsBase):
]}
ks_client = mock.Mock()
ks_client.domains.list.return_value = [mock.Mock(
id='<my-uuid>',
name='Default')]
ks_client.projects.find.return_value = mock.Mock(id='<my-uuid>')
get_client.return_value = ks_client