fix: un-hardcode v3 credentials

During cloud discovery resource creation, the domain_name and
user_domain_name information used to be hard coded to 'Default' which
might not be the case for all credentials, admin or non-admin.

This patch adds support for domain_name, project_domain_name and
user_domain_name information by defaulting all of them to 'Default'
however in the case they are available in the cloud credentials, using
them during python-tempestconf runtime as well as rendering them
correctly in the final tempest configuration.

Story: 2010811
Task: 48330
Change-Id: I4355837f4d8d514524039df6f3989dbd69f2c700
This commit is contained in:
Mert Kırpıcı 2023-07-12 07:27:22 +00:00 committed by Luigi Toscano
parent 915f9cea7a
commit 58e32bbe5a
5 changed files with 47 additions and 7 deletions

View File

@ -39,6 +39,9 @@ class Credentials(object):
self.username = self.get_credential('username')
self.password = self.get_credential('password')
self.project_name = self.get_credential('project_name')
self.domain_name = self.get_credential('domain_name')
self.user_domain_name = self.get_credential('user_domain_name')
self.project_domain_name = self.get_credential('project_domain_name')
self.identity_version = self._get_identity_version()
self.api_version = 3 if self.identity_version == "v3" else 2
self.identity_region = self._conf.get_defaulted('identity', 'region')
@ -122,9 +125,14 @@ class Credentials(object):
creds_kwargs = {'username': self.username,
'password': self.password}
if self.identity_version == 'v3':
creds_kwargs.update({'project_name': self.project_name,
'domain_name': 'Default',
'user_domain_name': 'Default'})
creds_kwargs.update(
{
'project_name': self.project_name,
'domain_name': self.domain_name,
'project_domain_name': self.project_domain_name,
'user_domain_name': self.user_domain_name
}
)
else:
creds_kwargs.update({'project_name': self.project_name})
return creds_kwargs

View File

@ -85,6 +85,8 @@ def load_basic_defaults(conf):
("username", "demo_tempestconf"),
("password", "secrete"),
("project_name", "demo"),
("project_domain_name", "Default"),
("user_domain_name", "Default"),
("alt_username", "alt_demo_tempestconf"),
("alt_password", "secrete"),
("alt_project_name", "alt_demo")
@ -93,7 +95,9 @@ def load_basic_defaults(conf):
("tempest_roles", "member"),
("admin_username", "admin"),
("admin_project_name", "admin"),
("admin_domain_name", "Default")
("admin_domain_name", "Default"),
("admin_project_domain_name", "Default"),
("admin_user_domain_name", "Default")
],
"object-storage": [
("reseller_admin_role", "ResellerAdmin")
@ -447,6 +451,9 @@ def set_cloud_config_values(non_admin, cloud_creds, conf):
'project_name',
cloud_creds['project_name'])
conf.set('identity', 'password', cloud_creds['password'])
for cred in ['project_domain_name', 'user_domain_name']:
if cred in cloud_creds:
conf.set('auth', cred, cloud_creds[cred])
else:
# admin credentials are under auth section
conf.set('auth', 'admin_username', cloud_creds['username'])
@ -454,6 +461,12 @@ def set_cloud_config_values(non_admin, cloud_creds, conf):
'admin_project_name',
cloud_creds['project_name'])
conf.set('auth', 'admin_password', cloud_creds['password'])
for cred in [
'domain_name', 'project_domain_name', 'user_domain_name'
]:
if cred in cloud_creds:
conf.set('auth', f'admin_{cred}', cloud_creds[cred])
conf.set('identity', 'uri', cloud_creds['auth_url'])
if 'region_name' in cloud_creds:

View File

@ -59,6 +59,9 @@ class BaseConfigTempestTest(base.BaseTestCase):
conf.set("identity", "username", "demo")
conf.set("identity", "password", "secret")
conf.set("identity", "project_name", "demo")
conf.set("identity", "domain_name", "Default")
conf.set("identity", "project_domain_name", "Default")
conf.set("identity", "user_domain_name", "Default")
conf.set("identity", "disable_ssl_certificate_validation", "true")
conf.set("identity", "auth_version", "v3")
conf.set("identity", "uri", uri + V2, priority=True)
@ -66,6 +69,8 @@ class BaseConfigTempestTest(base.BaseTestCase):
conf.set("auth", "admin_username", "admin")
conf.set("auth", "admin_project_name", "adminProject")
conf.set("auth", "admin_password", "adminPass")
conf.set("auth", "admin_project_domain_name", "Default")
conf.set("auth", "admin_user_domain_name", "Default")
conf.set("auth", "use_dynamic_credentials", "False", priority=True)
return conf
@ -76,6 +81,9 @@ class BaseConfigTempestTest(base.BaseTestCase):
conf.set("identity", "username", "demo")
conf.set("identity", "password", "secret")
conf.set("identity", "project_name", "demo")
conf.set("identity", "domain_name", "Default")
conf.set("identity", "project_domain_name", "Default")
conf.set("identity", "user_domain_name", "Default")
conf.set("identity", "disable_ssl_certificate_validation", "true")
conf.set("identity", "auth_version", "v3")
conf.set("identity", "uri", uri + V2, priority=True)
@ -83,6 +91,9 @@ class BaseConfigTempestTest(base.BaseTestCase):
conf.set("auth", "admin_username", "admin")
conf.set("auth", "admin_project_name", "adminProject")
conf.set("auth", "admin_password", "adminPass")
conf.set("auth", "admin_domain_name", "Default")
conf.set("auth", "admin_project_domain_name", "Default")
conf.set("auth", "admin_user_domain_name", "Default")
conf.set("auth", "use_dynamic_credentials", "True", priority=True)
return conf

View File

@ -51,7 +51,9 @@ class TestOsClientConfigSupport(BaseConfigTempestTest):
'username': 'cloud_user',
'password': 'cloud_pass',
'project_name': 'cloud_project',
'auth_url': 'http://auth.url.com/'
'auth_url': 'http://auth.url.com/',
'user_domain_name': 'cloud_domain',
'project_domain_name': 'cloud_domain',
}
if region_name:
cloud_args.update(region_name=region_name)
@ -74,6 +76,10 @@ class TestOsClientConfigSupport(BaseConfigTempestTest):
conf.get('auth', 'admin_password'))
self.assertEqual(cloud_args['project_name'],
conf.get('auth', 'admin_project_name'))
self.assertEqual(cloud_args['project_domain_name'],
conf.get('auth', 'admin_project_domain_name'))
self.assertEqual(cloud_args['user_domain_name'],
conf.get('auth', 'admin_user_domain_name'))
if region_name:
self.assertEqual(cloud_args['region_name'],
conf.get('identity', 'region'))

View File

@ -63,7 +63,8 @@ class TestCredentials(BaseConfigTempestTest):
'password': 'secret',
'project_name': 'demo',
'domain_name': 'Default',
'user_domain_name': 'Default'
'user_domain_name': 'Default',
'project_domain_name': 'Default',
}
self.assertEqual(self.creds._get_creds_kwargs(), expected_resp)
@ -97,7 +98,8 @@ class TestCredentials(BaseConfigTempestTest):
username='name',
project_name='project_name',
domain_name='Default',
user_domain_name='Default')
user_domain_name='Default',
project_domain_name='Default')
def test_get_auth_provider_keystone_v2(self):
# check if method returns correct method - KeystoneV2AuthProvider