Update dynamic creds to properly handle types during creation
A recent change modified how credential_types are passed into
_create_creds:
https://review.opendev.org/c/openstack/tempest/+/773177
This change updates the code to check for types and only cast creds to a
list if it's a string.
It also adds a condition to only create a project role assignment if the
credential type is project-scoped. Otherwise, this fails with
system-scoped credentials.
Change-Id: I010434e1a97520cc7a55384af55e0b61ee4e2556
diff --git a/tempest/lib/common/dynamic_creds.py b/tempest/lib/common/dynamic_creds.py
index 5e2308e..b641542 100644
--- a/tempest/lib/common/dynamic_creds.py
+++ b/tempest/lib/common/dynamic_creds.py
@@ -228,8 +228,9 @@
roles_to_assign = [r for r in roles]
if admin:
roles_to_assign.append(self.admin_role)
- self.creds_client.assign_user_role(
- user, project, self.identity_admin_role)
+ if scope == 'project':
+ self.creds_client.assign_user_role(
+ user, project, self.identity_admin_role)
if (self.identity_version == 'v3' and
self.identity_admin_domain_scope):
self.creds_client.assign_user_role_on_domain(
@@ -386,8 +387,10 @@
cred_type = credential_type
if credential_type in [['alt_member'], ['alt_reader']]:
cred_type = credential_type[0][4:]
+ if isinstance(cred_type, str):
+ cred_type = [cred_type]
credentials = self._create_creds(
- roles=[cred_type], scope=scope)
+ roles=cred_type, scope=scope)
elif credential_type in ['primary', 'alt', 'admin']:
is_admin = (credential_type == 'admin')
credentials = self._create_creds(admin=is_admin)