Merge "Replace tenant by project, part 2"
This commit is contained in:
commit
ab4e518bab
|
@ -64,7 +64,7 @@ class ProjectsClient(object):
|
||||||
if project['name'] == project_name:
|
if project['name'] == project_name:
|
||||||
return project
|
return project
|
||||||
raise exceptions.NotFound(
|
raise exceptions.NotFound(
|
||||||
'No such tenant/project (%s) in %s' % (project_name, projects))
|
'No such project/tenant (%s) in %s' % (project_name, projects))
|
||||||
|
|
||||||
def create_project(self, name, description):
|
def create_project(self, name, description):
|
||||||
if self.identity_version == "v2":
|
if self.identity_version == "v2":
|
||||||
|
@ -99,7 +99,7 @@ class ClientManager(object):
|
||||||
catalog_type,
|
catalog_type,
|
||||||
default_params)
|
default_params)
|
||||||
|
|
||||||
self.tenants = ProjectsClient(
|
self.projects = ProjectsClient(
|
||||||
self.auth_provider,
|
self.auth_provider,
|
||||||
conf.get_defaulted('identity', 'catalog_type'),
|
conf.get_defaulted('identity', 'catalog_type'),
|
||||||
self.identity_region,
|
self.identity_region,
|
||||||
|
@ -178,10 +178,10 @@ class ClientManager(object):
|
||||||
self.get_nova_net_client = create_nova_network_client
|
self.get_nova_net_client = create_nova_network_client
|
||||||
self.get_neutron_client = create_neutron_client
|
self.get_neutron_client = create_neutron_client
|
||||||
|
|
||||||
# Set admin tenant id needed for keystone v3 tests.
|
# Set admin project id needed for keystone v3 tests.
|
||||||
if creds.admin:
|
if creds.admin:
|
||||||
tenant = self.tenants.get_project_by_name(creds.tenant_name)
|
project = self.projects.get_project_by_name(creds.project_name)
|
||||||
conf.set('auth', 'admin_project_id', tenant['id'])
|
conf.set('auth', 'admin_project_id', project['id'])
|
||||||
|
|
||||||
def _get_default_params(self, conf):
|
def _get_default_params(self, conf):
|
||||||
default_params = {
|
default_params = {
|
||||||
|
|
|
@ -33,7 +33,7 @@ class Credentials(object):
|
||||||
self._conf = conf
|
self._conf = conf
|
||||||
self.username = self.get_credential('username')
|
self.username = self.get_credential('username')
|
||||||
self.password = self.get_credential('password')
|
self.password = self.get_credential('password')
|
||||||
self.tenant_name = self.get_credential('project_name')
|
self.project_name = self.get_credential('project_name')
|
||||||
self.identity_version = self._get_identity_version()
|
self.identity_version = self._get_identity_version()
|
||||||
self.api_version = 3 if self.identity_version == "v3" else 2
|
self.api_version = 3 if self.identity_version == "v3" else 2
|
||||||
self.identity_region = self._conf.get_defaulted('identity', 'region')
|
self.identity_region = self._conf.get_defaulted('identity', 'region')
|
||||||
|
@ -85,11 +85,11 @@ class Credentials(object):
|
||||||
creds_kwargs = {'username': self.username,
|
creds_kwargs = {'username': self.username,
|
||||||
'password': self.password}
|
'password': self.password}
|
||||||
if self.identity_version == 'v3':
|
if self.identity_version == 'v3':
|
||||||
creds_kwargs.update({'project_name': self.tenant_name,
|
creds_kwargs.update({'project_name': self.project_name,
|
||||||
'domain_name': 'Default',
|
'domain_name': 'Default',
|
||||||
'user_domain_name': 'Default'})
|
'user_domain_name': 'Default'})
|
||||||
else:
|
else:
|
||||||
creds_kwargs.update({'project_name': self.tenant_name})
|
creds_kwargs.update({'project_name': self.project_name})
|
||||||
return creds_kwargs
|
return creds_kwargs
|
||||||
|
|
||||||
def set_credentials(self):
|
def set_credentials(self):
|
||||||
|
|
|
@ -380,7 +380,7 @@ def config_tempest(**kwargs):
|
||||||
services = Services(clients, conf, credentials)
|
services = Services(clients, conf, credentials)
|
||||||
|
|
||||||
if kwargs.get('create', False) and kwargs.get('test_accounts') is None:
|
if kwargs.get('create', False) and kwargs.get('test_accounts') is None:
|
||||||
users = Users(clients.tenants, clients.roles, clients.users, conf)
|
users = Users(clients.projects, clients.roles, clients.users, conf)
|
||||||
users.create_tempest_users(services.is_service('orchestration'))
|
users.create_tempest_users(services.is_service('orchestration'))
|
||||||
flavors = Flavors(clients.flavors, kwargs.get('create', False), conf)
|
flavors = Flavors(clients.flavors, kwargs.get('create', False), conf)
|
||||||
flavors.create_tempest_flavors()
|
flavors.create_tempest_flavors()
|
||||||
|
|
|
@ -41,7 +41,7 @@ class BaseConfigTempestTest(base.BaseTestCase):
|
||||||
conf.set("identity", "uri", uri + V2, priority=True)
|
conf.set("identity", "uri", uri + V2, priority=True)
|
||||||
conf.set("identity", "uri_v3", uri + V3)
|
conf.set("identity", "uri_v3", uri + V3)
|
||||||
conf.set("auth", "admin_username", "admin")
|
conf.set("auth", "admin_username", "admin")
|
||||||
conf.set("auth", "admin_project_name", "adminTenant")
|
conf.set("auth", "admin_project_name", "adminProject")
|
||||||
conf.set("auth", "admin_password", "adminPass")
|
conf.set("auth", "admin_password", "adminPass")
|
||||||
conf.set("auth", "use_dynamic_credentials", "False")
|
conf.set("auth", "use_dynamic_credentials", "False")
|
||||||
return conf
|
return conf
|
||||||
|
@ -58,7 +58,7 @@ class BaseConfigTempestTest(base.BaseTestCase):
|
||||||
conf.set("identity", "uri", uri + V2, priority=True)
|
conf.set("identity", "uri", uri + V2, priority=True)
|
||||||
conf.set("identity", "uri_v3", uri + V3)
|
conf.set("identity", "uri_v3", uri + V3)
|
||||||
conf.set("auth", "admin_username", "admin")
|
conf.set("auth", "admin_username", "admin")
|
||||||
conf.set("auth", "admin_project_name", "adminTenant")
|
conf.set("auth", "admin_project_name", "adminProject")
|
||||||
conf.set("auth", "admin_password", "adminPass")
|
conf.set("auth", "admin_password", "adminPass")
|
||||||
conf.set("auth", "use_dynamic_credentials", "True")
|
conf.set("auth", "use_dynamic_credentials", "True")
|
||||||
return conf
|
return conf
|
||||||
|
|
|
@ -36,7 +36,7 @@ class TestAccounts(BaseConfigTempestTest):
|
||||||
# credentials under auth section
|
# credentials under auth section
|
||||||
accounts.create_accounts_file(True, path, self.conf)
|
accounts.create_accounts_file(True, path, self.conf)
|
||||||
mock_write.assert_called_with(path, "admin", "adminPass",
|
mock_write.assert_called_with(path, "admin", "adminPass",
|
||||||
"adminTenant")
|
"adminProject")
|
||||||
self.assertEqual(self.conf.get("auth", "test_accounts_file"),
|
self.assertEqual(self.conf.get("auth", "test_accounts_file"),
|
||||||
os.path.abspath(path))
|
os.path.abspath(path))
|
||||||
|
|
||||||
|
|
|
@ -114,9 +114,9 @@ class TestClientManager(BaseConfigTempestTest):
|
||||||
'get_project_by_name')
|
'get_project_by_name')
|
||||||
self.useFixture(MonkeyPatch(func2mock, mock_function))
|
self.useFixture(MonkeyPatch(func2mock, mock_function))
|
||||||
ClientManager(self.conf, self.creds)
|
ClientManager(self.conf, self.creds)
|
||||||
# check if admin tenant id was set
|
# check if admin project id was set
|
||||||
admin_tenant_id = self.conf.get("auth", "admin_project_id")
|
admin_project_id = self.conf.get("auth", "admin_project_id")
|
||||||
self.assertEqual(admin_tenant_id, "my_fake_id")
|
self.assertEqual(admin_project_id, "my_fake_id")
|
||||||
|
|
||||||
def test_get_service_client(self):
|
def test_get_service_client(self):
|
||||||
resp = self.client_manager.get_service_client('image')
|
resp = self.client_manager.get_service_client('image')
|
||||||
|
|
|
@ -34,13 +34,14 @@ class TestOsClientConfigSupport(BaseConfigTempestTest):
|
||||||
super(TestOsClientConfigSupport, self).setUp()
|
super(TestOsClientConfigSupport, self).setUp()
|
||||||
self.conf = self._get_conf("v2.0", "v3")
|
self.conf = self._get_conf("v2.0", "v3")
|
||||||
|
|
||||||
def _check_credentials(self, manager, username, password, tenant_name):
|
def _check_credentials(self, manager, username, password, project_name):
|
||||||
exp_user = manager.auth_provider.credentials._initial['username']
|
exp_user = manager.auth_provider.credentials._initial['username']
|
||||||
exp_pass = manager.auth_provider.credentials._initial['password']
|
exp_pass = manager.auth_provider.credentials._initial['password']
|
||||||
exp_tenant = manager.auth_provider.credentials._initial['project_name']
|
creds = manager.auth_provider.credentials
|
||||||
|
exp_project = creds._initial['project_name']
|
||||||
self.assertEqual(exp_user, username)
|
self.assertEqual(exp_user, username)
|
||||||
self.assertEqual(exp_pass, password)
|
self.assertEqual(exp_pass, password)
|
||||||
self.assertEqual(exp_tenant, tenant_name)
|
self.assertEqual(exp_project, project_name)
|
||||||
|
|
||||||
@mock.patch('os_client_config.cloud_config.CloudConfig')
|
@mock.patch('os_client_config.cloud_config.CloudConfig')
|
||||||
def _override_setup(self, mock_args):
|
def _override_setup(self, mock_args):
|
||||||
|
|
|
@ -71,7 +71,7 @@ class TestCredentials(BaseConfigTempestTest):
|
||||||
self.useFixture(MonkeyPatch(function2mock, mock_function))
|
self.useFixture(MonkeyPatch(function2mock, mock_function))
|
||||||
self.creds.username = "name"
|
self.creds.username = "name"
|
||||||
self.creds.password = "pass"
|
self.creds.password = "pass"
|
||||||
self.creds.tenant_name = "Tname"
|
self.creds.project_name = "Tname"
|
||||||
self.creds.set_credentials()
|
self.creds.set_credentials()
|
||||||
mock_function.assert_called_with(
|
mock_function.assert_called_with(
|
||||||
auth_url=None, fill_in=False, identity_version='v2',
|
auth_url=None, fill_in=False, identity_version='v2',
|
||||||
|
@ -85,7 +85,7 @@ class TestCredentials(BaseConfigTempestTest):
|
||||||
self.useFixture(MonkeyPatch(function2mock, mock_function))
|
self.useFixture(MonkeyPatch(function2mock, mock_function))
|
||||||
self.creds.username = "name"
|
self.creds.username = "name"
|
||||||
self.creds.password = "pass"
|
self.creds.password = "pass"
|
||||||
self.creds.tenant_name = "project_name"
|
self.creds.project_name = "project_name"
|
||||||
self.creds.identity_version = "v3"
|
self.creds.identity_version = "v3"
|
||||||
self.creds.set_credentials()
|
self.creds.set_credentials()
|
||||||
mock_function.assert_called_with(
|
mock_function.assert_called_with(
|
||||||
|
|
|
@ -66,7 +66,7 @@ class TestTempestConf(BaseConfigTempestTest):
|
||||||
remove_exts = ["router", "project-id", "dvr"]
|
remove_exts = ["router", "project-id", "dvr"]
|
||||||
remove = {
|
remove = {
|
||||||
"identity.username": ["demo"],
|
"identity.username": ["demo"],
|
||||||
"identity.project_name": ["tenant"],
|
"identity.project_name": ["project"],
|
||||||
"compute.image_ssh_user": ["rhel", "cirros"],
|
"compute.image_ssh_user": ["rhel", "cirros"],
|
||||||
"network-feature-enabled.api_extensions": remove_exts
|
"network-feature-enabled.api_extensions": remove_exts
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,15 +25,16 @@ class TestUsers(BaseConfigTempestTest):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(TestUsers, self).setUp()
|
super(TestUsers, self).setUp()
|
||||||
self.conf = self._get_conf("v2.0", "v3")
|
self.conf = self._get_conf("v2.0", "v3")
|
||||||
tenants_client = self._get_clients(self.conf).tenants
|
projects_client = self._get_clients(self.conf).projects
|
||||||
users_client = self._get_clients(self.conf).users
|
users_client = self._get_clients(self.conf).users
|
||||||
roles_client = self._get_clients(self.conf).roles
|
roles_client = self._get_clients(self.conf).roles
|
||||||
self.Service = Users(tenants_client, roles_client,
|
self.Service = Users(projects_client, roles_client,
|
||||||
users_client, self.conf)
|
users_client, self.conf)
|
||||||
self.username = "test_user"
|
self.username = "test_user"
|
||||||
self.password = "cryptic"
|
self.password = "cryptic"
|
||||||
self.tenant_name = "project"
|
self.project_name = "project"
|
||||||
self.tenant_description = "Tenant for Tempest %s user" % self.username
|
description = "Project for Tempest %s user" % self.username
|
||||||
|
self.project_description = description
|
||||||
self.role_name = "fake_role"
|
self.role_name = "fake_role"
|
||||||
self.email = "%s@test.com" % self.username
|
self.email = "%s@test.com" % self.username
|
||||||
self.users = {'users':
|
self.users = {'users':
|
||||||
|
@ -48,18 +49,18 @@ class TestUsers(BaseConfigTempestTest):
|
||||||
'id': "fake_role_id2"}]}
|
'id': "fake_role_id2"}]}
|
||||||
|
|
||||||
@mock.patch('config_tempest.users.Users.'
|
@mock.patch('config_tempest.users.Users.'
|
||||||
'create_user_with_tenant')
|
'create_user_with_project')
|
||||||
@mock.patch('config_tempest.users.Users.give_role_to_user')
|
@mock.patch('config_tempest.users.Users.give_role_to_user')
|
||||||
def _test_create_tempest_user(self,
|
def _test_create_tempest_user(self,
|
||||||
mock_give_role_to_user,
|
mock_give_role_to_user,
|
||||||
mock_create_user_with_tenant,
|
mock_create_user_with_project,
|
||||||
orchestration=False):
|
orchestration=False):
|
||||||
alt_username = "my_user"
|
alt_username = "my_user"
|
||||||
alt_password = "my_pass"
|
alt_password = "my_pass"
|
||||||
alt_tenant_name = "my_tenant"
|
alt_project_name = "my_project"
|
||||||
self.conf.set("identity", "alt_username", alt_username)
|
self.conf.set("identity", "alt_username", alt_username)
|
||||||
self.conf.set("identity", "alt_password", alt_password)
|
self.conf.set("identity", "alt_password", alt_password)
|
||||||
self.conf.set("identity", "alt_project_name", alt_tenant_name)
|
self.conf.set("identity", "alt_project_name", alt_project_name)
|
||||||
self.Service.create_tempest_users(orchestration)
|
self.Service.create_tempest_users(orchestration)
|
||||||
if orchestration:
|
if orchestration:
|
||||||
self.assertEqual(mock_give_role_to_user.mock_calls, [
|
self.assertEqual(mock_give_role_to_user.mock_calls, [
|
||||||
|
@ -75,7 +76,7 @@ class TestUsers(BaseConfigTempestTest):
|
||||||
mock_give_role_to_user.assert_called_with(
|
mock_give_role_to_user.assert_called_with(
|
||||||
self.conf.get('auth', 'admin_username'),
|
self.conf.get('auth', 'admin_username'),
|
||||||
role_name='admin')
|
role_name='admin')
|
||||||
self.assertEqual(mock_create_user_with_tenant.mock_calls, [
|
self.assertEqual(mock_create_user_with_project.mock_calls, [
|
||||||
mock.call(self.conf.get('identity', 'username'),
|
mock.call(self.conf.get('identity', 'username'),
|
||||||
self.conf.get('identity', 'password'),
|
self.conf.get('identity', 'password'),
|
||||||
self.conf.get('identity', 'project_name')),
|
self.conf.get('identity', 'project_name')),
|
||||||
|
@ -95,17 +96,17 @@ class TestUsers(BaseConfigTempestTest):
|
||||||
@mock.patch('config_tempest.clients.ProjectsClient.create_project')
|
@mock.patch('config_tempest.clients.ProjectsClient.create_project')
|
||||||
@mock.patch('tempest.lib.services.identity.v2.users_client.'
|
@mock.patch('tempest.lib.services.identity.v2.users_client.'
|
||||||
'UsersClient.create_user')
|
'UsersClient.create_user')
|
||||||
def test_create_user_with_tenant(self,
|
def test_create_user_with_project(self,
|
||||||
mock_create_user,
|
mock_create_user,
|
||||||
mock_create_project,
|
mock_create_project,
|
||||||
mock_get_project_by_name):
|
mock_get_project_by_name):
|
||||||
mock_get_project_by_name.return_value = {'id': "fake-id"}
|
mock_get_project_by_name.return_value = {'id': "fake-id"}
|
||||||
self.Service.create_user_with_tenant(
|
self.Service.create_user_with_project(
|
||||||
username=self.username,
|
username=self.username,
|
||||||
password=self.password,
|
password=self.password,
|
||||||
tenant_name=self.tenant_name)
|
project_name=self.project_name)
|
||||||
mock_create_project.assert_called_with(
|
mock_create_project.assert_called_with(
|
||||||
name=self.tenant_name, description=self.tenant_description)
|
name=self.project_name, description=self.project_description)
|
||||||
mock_create_user.assert_called_with(name=self.username,
|
mock_create_user.assert_called_with(name=self.username,
|
||||||
password=self.password,
|
password=self.password,
|
||||||
tenantId="fake-id",
|
tenantId="fake-id",
|
||||||
|
@ -116,7 +117,7 @@ class TestUsers(BaseConfigTempestTest):
|
||||||
@mock.patch('config_tempest.clients.ProjectsClient.create_project')
|
@mock.patch('config_tempest.clients.ProjectsClient.create_project')
|
||||||
@mock.patch('tempest.lib.services.identity.v2'
|
@mock.patch('tempest.lib.services.identity.v2'
|
||||||
'.users_client.UsersClient.create_user')
|
'.users_client.UsersClient.create_user')
|
||||||
def test_create_user_with_tenant_tenant_exists(
|
def test_create_user_with_project_project_exists(
|
||||||
self,
|
self,
|
||||||
mock_create_user,
|
mock_create_user,
|
||||||
mock_create_project,
|
mock_create_project,
|
||||||
|
@ -124,12 +125,12 @@ class TestUsers(BaseConfigTempestTest):
|
||||||
mock_get_project_by_name.return_value = {'id': "fake-id"}
|
mock_get_project_by_name.return_value = {'id': "fake-id"}
|
||||||
exc = exceptions.Conflict
|
exc = exceptions.Conflict
|
||||||
mock_create_project.side_effect = exc
|
mock_create_project.side_effect = exc
|
||||||
self.Service.create_user_with_tenant(
|
self.Service.create_user_with_project(
|
||||||
username=self.username,
|
username=self.username,
|
||||||
password=self.password,
|
password=self.password,
|
||||||
tenant_name=self.tenant_name)
|
project_name=self.project_name)
|
||||||
mock_create_project.assert_called_with(
|
mock_create_project.assert_called_with(
|
||||||
name=self.tenant_name, description=self.tenant_description)
|
name=self.project_name, description=self.project_description)
|
||||||
mock_create_user.assert_called_with(
|
mock_create_user.assert_called_with(
|
||||||
name=self.username,
|
name=self.username,
|
||||||
password=self.password,
|
password=self.password,
|
||||||
|
@ -143,8 +144,8 @@ class TestUsers(BaseConfigTempestTest):
|
||||||
'tenants_client.TenantsClient.create_tenant')
|
'tenants_client.TenantsClient.create_tenant')
|
||||||
@mock.patch('tempest.lib.services.identity.'
|
@mock.patch('tempest.lib.services.identity.'
|
||||||
'v2.users_client.UsersClient.create_user')
|
'v2.users_client.UsersClient.create_user')
|
||||||
def test_create_user_with_tenant_user_exists(
|
def test_create_user_with_project_user_exists(
|
||||||
self, mock_create_user, mock_create_tenant,
|
self, mock_create_user, mock_create_project,
|
||||||
mock_get_project_by_name,
|
mock_get_project_by_name,
|
||||||
mock_get_user_by_username):
|
mock_get_user_by_username):
|
||||||
mock_get_project_by_name.return_value = {'id': "fake-id"}
|
mock_get_project_by_name.return_value = {'id': "fake-id"}
|
||||||
|
@ -152,11 +153,11 @@ class TestUsers(BaseConfigTempestTest):
|
||||||
mock_create_user.side_effect = exc
|
mock_create_user.side_effect = exc
|
||||||
fake_user = {'id': "fake_user_id"}
|
fake_user = {'id': "fake_user_id"}
|
||||||
mock_get_user_by_username.return_value = fake_user
|
mock_get_user_by_username.return_value = fake_user
|
||||||
self.Service.create_user_with_tenant(
|
self.Service.create_user_with_project(
|
||||||
username=self.username, password=self.password,
|
username=self.username, password=self.password,
|
||||||
tenant_name=self.tenant_name)
|
project_name=self.project_name)
|
||||||
mock_create_tenant.assert_called_with(
|
mock_create_project.assert_called_with(
|
||||||
name=self.tenant_name, description=self.tenant_description)
|
name=self.project_name, description=self.project_description)
|
||||||
mock_create_user.assert_called_with(name=self.username,
|
mock_create_user.assert_called_with(name=self.username,
|
||||||
password=self.password,
|
password=self.password,
|
||||||
tenantId="fake-id",
|
tenantId="fake-id",
|
||||||
|
@ -168,7 +169,7 @@ class TestUsers(BaseConfigTempestTest):
|
||||||
@mock.patch('config_tempest.clients.ProjectsClient.create_project')
|
@mock.patch('config_tempest.clients.ProjectsClient.create_project')
|
||||||
@mock.patch('tempest.lib.services.identity.v2.'
|
@mock.patch('tempest.lib.services.identity.v2.'
|
||||||
'users_client.UsersClient.create_user')
|
'users_client.UsersClient.create_user')
|
||||||
def test_create_user_with_tenant_exists_user_exists(
|
def test_create_user_with_project_exists_user_exists(
|
||||||
self, mock_create_user, mock_create_project,
|
self, mock_create_user, mock_create_project,
|
||||||
mock_get_project_by_name,
|
mock_get_project_by_name,
|
||||||
mock_get_user_by_username):
|
mock_get_user_by_username):
|
||||||
|
@ -178,11 +179,11 @@ class TestUsers(BaseConfigTempestTest):
|
||||||
mock_create_user.side_effect = exc
|
mock_create_user.side_effect = exc
|
||||||
fake_user = {'id': "fake_user_id"}
|
fake_user = {'id': "fake_user_id"}
|
||||||
mock_get_user_by_username.return_value = fake_user
|
mock_get_user_by_username.return_value = fake_user
|
||||||
self.Service.create_user_with_tenant(username=self.username,
|
self.Service.create_user_with_project(username=self.username,
|
||||||
password=self.password,
|
password=self.password,
|
||||||
tenant_name=self.tenant_name)
|
project_name=self.project_name)
|
||||||
mock_create_project.assert_called_with(
|
mock_create_project.assert_called_with(
|
||||||
name=self.tenant_name, description=self.tenant_description)
|
name=self.project_name, description=self.project_description)
|
||||||
mock_create_user.assert_called_with(name=self.username,
|
mock_create_user.assert_called_with(name=self.username,
|
||||||
password=self.password,
|
password=self.password,
|
||||||
tenantId="fake-id",
|
tenantId="fake-id",
|
||||||
|
|
|
@ -18,15 +18,15 @@ from tempest.lib import exceptions
|
||||||
|
|
||||||
|
|
||||||
class Users(object):
|
class Users(object):
|
||||||
def __init__(self, tenants_client, roles_client, users_client, conf):
|
def __init__(self, projects_client, roles_client, users_client, conf):
|
||||||
"""Init.
|
"""Init.
|
||||||
|
|
||||||
:type tenants_client: ProjectsClient object
|
:type projects_client: ProjectsClient object
|
||||||
:type roles_client: RolesClient object from tempest lib
|
:type roles_client: RolesClient object from tempest lib
|
||||||
:type users_client: UsersClient object from tempest lib
|
:type users_client: UsersClient object from tempest lib
|
||||||
:type conf: TempestConf object
|
:type conf: TempestConf object
|
||||||
"""
|
"""
|
||||||
self.tenants_client = tenants_client
|
self.projects_client = projects_client
|
||||||
self.roles_client = roles_client
|
self.roles_client = roles_client
|
||||||
self.users_client = users_client
|
self.users_client = users_client
|
||||||
self._conf = conf
|
self._conf = conf
|
||||||
|
@ -37,13 +37,13 @@ class Users(object):
|
||||||
:type orchestration: boolean
|
:type orchestration: boolean
|
||||||
"""
|
"""
|
||||||
sec = 'identity'
|
sec = 'identity'
|
||||||
self.create_user_with_tenant(self._conf.get(sec, 'username'),
|
self.create_user_with_project(self._conf.get(sec, 'username'),
|
||||||
self._conf.get(sec, 'password'),
|
self._conf.get(sec, 'password'),
|
||||||
self._conf.get(sec, 'project_name'))
|
self._conf.get(sec, 'project_name'))
|
||||||
|
|
||||||
self.create_user_with_tenant(self._conf.get(sec, 'alt_username'),
|
self.create_user_with_project(self._conf.get(sec, 'alt_username'),
|
||||||
self._conf.get(sec, 'alt_password'),
|
self._conf.get(sec, 'alt_password'),
|
||||||
self._conf.get(sec, 'alt_project_name'))
|
self._conf.get(sec, 'alt_project_name'))
|
||||||
|
|
||||||
username = self._conf.get_defaulted('auth', 'admin_username')
|
username = self._conf.get_defaulted('auth', 'admin_username')
|
||||||
|
|
||||||
|
@ -59,14 +59,14 @@ class Users(object):
|
||||||
|
|
||||||
def give_role_to_user(self, username, role_name,
|
def give_role_to_user(self, username, role_name,
|
||||||
role_required=True):
|
role_required=True):
|
||||||
"""Give the user a role in the project (tenant).
|
"""Give the user a role in the project.
|
||||||
|
|
||||||
:type username: string
|
:type username: string
|
||||||
:type role_name: string
|
:type role_name: string
|
||||||
:type role_required: boolean
|
:type role_required: boolean
|
||||||
"""
|
"""
|
||||||
tenant_name = self._conf.get('identity', 'project_name')
|
project_name = self._conf.get('identity', 'project_name')
|
||||||
tenant_id = self.tenants_client.get_project_by_name(tenant_name)['id']
|
proj_id = self.projects_client.get_project_by_name(project_name)['id']
|
||||||
users = self.users_client.list_users()
|
users = self.users_client.list_users()
|
||||||
user_ids = [u['id'] for u in users['users'] if u['name'] == username]
|
user_ids = [u['id'] for u in users['users'] if u['name'] == username]
|
||||||
user_id = user_ids[0]
|
user_id = user_ids[0]
|
||||||
|
@ -79,36 +79,36 @@ class Users(object):
|
||||||
return
|
return
|
||||||
role_id = role_ids[0]
|
role_id = role_ids[0]
|
||||||
try:
|
try:
|
||||||
self.roles_client.create_user_role_on_project(tenant_id, user_id,
|
self.roles_client.create_user_role_on_project(proj_id, user_id,
|
||||||
role_id)
|
role_id)
|
||||||
LOG.debug("User '%s' was given the '%s' role in project '%s'",
|
LOG.debug("User '%s' was given the '%s' role in project '%s'",
|
||||||
username, role_name, tenant_name)
|
username, role_name, project_name)
|
||||||
except exceptions.Conflict:
|
except exceptions.Conflict:
|
||||||
LOG.debug("(no change) User '%s' already has the '%s' role in"
|
LOG.debug("(no change) User '%s' already has the '%s' role in"
|
||||||
" project '%s'", username, role_name, tenant_name)
|
" project '%s'", username, role_name, project_name)
|
||||||
|
|
||||||
def create_user_with_tenant(self, username, password, tenant_name):
|
def create_user_with_project(self, username, password, project_name):
|
||||||
"""Create a user and a tenant if it doesn't exist.
|
"""Create a user and a project if it doesn't exist.
|
||||||
|
|
||||||
:type username: string
|
:type username: string
|
||||||
:type password: string
|
:type password: string
|
||||||
:type tenant_name: string
|
:type project_name: string
|
||||||
"""
|
"""
|
||||||
LOG.info("Creating user '%s' with tenant '%s' and password '%s'",
|
LOG.info("Creating user '%s' with project '%s' and password '%s'",
|
||||||
username, tenant_name, password)
|
username, project_name, password)
|
||||||
tenant_description = "Tenant for Tempest %s user" % username
|
project_description = "Project for Tempest %s user" % username
|
||||||
email = "%s@test.com" % username
|
email = "%s@test.com" % username
|
||||||
# create a tenant
|
# create a project
|
||||||
try:
|
try:
|
||||||
self.tenants_client.create_project(name=tenant_name,
|
self.projects_client.create_project(
|
||||||
description=tenant_description)
|
name=project_name, description=project_description)
|
||||||
except exceptions.Conflict:
|
except exceptions.Conflict:
|
||||||
LOG.info("(no change) Tenant '%s' already exists", tenant_name)
|
LOG.info("(no change) Project '%s' already exists", project_name)
|
||||||
|
|
||||||
tenant_id = self.tenants_client.get_project_by_name(tenant_name)['id']
|
proj_id = self.projects_client.get_project_by_name(project_name)['id']
|
||||||
|
|
||||||
params = {'name': username, 'password': password,
|
params = {'name': username, 'password': password,
|
||||||
'tenantId': tenant_id, 'email': email}
|
'tenantId': proj_id, 'email': email}
|
||||||
# create a user
|
# create a user
|
||||||
try:
|
try:
|
||||||
self.users_client.create_user(**params)
|
self.users_client.create_user(**params)
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
---
|
---
|
||||||
other:
|
upgrade:
|
||||||
- |
|
- |
|
||||||
Use of 'tenant' wherever it's set to tempest.conf, is replaced
|
Use of 'tenant' wherever it's set to tempest.conf, is replaced
|
||||||
by 'project'. This is part 1 of the tenant->project transition.
|
by 'project'. This is part 1 of the tenant->project transition.
|
||||||
|
|
Loading…
Reference in New Issue