From bc797dfb4bdb091627226cf058469f0787fa284c Mon Sep 17 00:00:00 2001 From: Danil Akhmetov Date: Thu, 9 Feb 2017 16:54:05 +0300 Subject: [PATCH] Enable Keystone v3 API when obtaining users and tenants Always use Keystone v3 API obtaining users and projects in order to list all users and tenants in multi-domain environments. Change-Id: If94ad4a0d61d0467031b384d132eb433682b3a20 Closes-Bug: #1662142 --- .../files/collectd/collectd_openstack.py | 11 +++++------ .../files/collectd/openstack_keystone.py | 6 +++--- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/deployment_scripts/puppet/modules/lma_collector/files/collectd/collectd_openstack.py b/deployment_scripts/puppet/modules/lma_collector/files/collectd/collectd_openstack.py index a8fa999b7..1aeeb3664 100644 --- a/deployment_scripts/puppet/modules/lma_collector/files/collectd/collectd_openstack.py +++ b/deployment_scripts/puppet/modules/lma_collector/files/collectd/collectd_openstack.py @@ -169,12 +169,11 @@ class CollectdPlugin(base.Base): def _build_url(self, service, resource): s = (self.get_service(service) or {}) - # the adminURL must be used to access resources with Keystone API v2 - if service == 'keystone' and \ - (resource in ['tenants', 'users'] or 'OS-KS' in resource): - url = s.get('admin_url') - else: - url = s.get('url') + url = s.get('url') + # v3 API must be used in order to obtain tenants in multi-domain envs + if service == 'keystone' and (resource in ['projects', + 'users', 'roles']): + url = url.replace('v2.0', 'v3') if url: if url[-1] != '/': diff --git a/deployment_scripts/puppet/modules/lma_collector/files/collectd/openstack_keystone.py b/deployment_scripts/puppet/modules/lma_collector/files/collectd/openstack_keystone.py index b84fbc6fc..e631baf01 100644 --- a/deployment_scripts/puppet/modules/lma_collector/files/collectd/openstack_keystone.py +++ b/deployment_scripts/puppet/modules/lma_collector/files/collectd/openstack_keystone.py @@ -40,11 +40,11 @@ class KeystoneStatsPlugin(openstack.CollectdPlugin): return 'enabled' if d.get('enabled') else 'disabled' # tenants - r = self.get('keystone', 'tenants') + r = self.get('keystone', 'projects') if not r: self.logger.warning('Could not find Keystone tenants') return - tenants_details = r.json().get('tenants', []) + tenants_details = r.json().get('projects', []) status = self.count_objects_group_by(tenants_details, group_by_func=groupby) for s, nb in status.iteritems(): @@ -70,7 +70,7 @@ class KeystoneStatsPlugin(openstack.CollectdPlugin): } # roles - r = self.get('keystone', 'OS-KSADM/roles') + r = self.get('keystone', 'roles') if not r: self.logger.warning('Could not find Keystone roles') return