Refactor keystone tenant fetcher

Refactor keystone tenant fetcher so that make it more robust and
readable.

Change-Id: If15f5bfa7e372825f51397ca9c77b7b9415fa981
This commit is contained in:
xiangjun li
2015-11-30 11:12:38 +08:00
committed by Xiangjun Li
parent 8f43e56c53
commit 6e13dbb6c4

View File

@@ -19,8 +19,10 @@
from keystoneclient import auth as ks_auth
from keystoneclient import client as kclient
from keystoneclient import discover
from keystoneclient import exceptions
from keystoneclient import session as ks_session
from oslo_config import cfg
import six
from cloudkitty import tenant_fetcher
@@ -59,19 +61,22 @@ class KeystoneFetcher(tenant_fetcher.BaseFetcher):
def get_tenants(self):
keystone_version = discover.normalize_version_number(
CONF.keystone_fetcher.keystone_version)
if discover.version_match((2,), keystone_version):
tenant_list = self.admin_ks.tenants.list()
else:
tenant_list = self.admin_ks.projects.list()
auth_dispatch = {(3,): ('project', 'projects', 'list'),
(2,): ('tenant', 'tenants', 'roles_for_user')}
for auth_version, auth_version_mapping in six.iteritems(auth_dispatch):
if discover.version_match(auth_version, keystone_version):
return self._do_get_tenants(auth_version_mapping)
msg = "Keystone version you've specified is not supported"
raise exceptions.VersionNotAvailable(msg)
def _do_get_tenants(self, auth_version_mapping):
tenant_attr, tenants_attr, role_func = auth_version_mapping
tenant_list = getattr(self.admin_ks, tenants_attr).list()
my_user_id = self.session.get_user_id()
for tenant in tenant_list[:]:
if discover.version_match((2,), keystone_version):
roles = self.admin_ks.roles.roles_for_user(
my_user_id,
tenant)
else:
roles = self.admin_ks.roles.list(user=my_user_id,
project=tenant)
roles = getattr(self.admin_ks.roles, role_func)(
**{'user': my_user_id,
tenant_attr: tenant})
if 'rating' not in [role.name for role in roles]:
tenant_list.remove(tenant)
return [tenant.id for tenant in tenant_list]