Merge "De-client-ify User Create"

This commit is contained in:
Jenkins
2017-07-07 19:35:24 +00:00
committed by Gerrit Code Review
5 changed files with 31 additions and 62 deletions

View File

@@ -722,17 +722,17 @@ class OpenStackCloud(
return self.keystone_client.tenants
return self.keystone_client.projects
def _get_project_param_dict(self, name_or_id):
project_dict = dict()
def _get_project_id_param_dict(self, name_or_id):
if name_or_id:
project = self.get_project(name_or_id)
if not project:
return project_dict
return {}
if self.cloud_config.get_api_version('identity') == '3':
project_dict['default_project'] = project['id']
return {'default_project_id': project['id']}
else:
project_dict['tenant_id'] = project['id']
return project_dict
return {'tenant_id': project['id']}
else:
return {}
def _get_domain_id_param_dict(self, domain_id):
"""Get a useable domain."""
@@ -751,25 +751,6 @@ class OpenStackCloud(
else:
return {}
# TODO(samueldmq): Get rid of this method once create_user is migrated to
# REST and, consequently, _get_domain_id_param_dict is used instead
def _get_domain_param_dict(self, domain_id):
"""Get a useable domain."""
# Keystone v3 requires domains for user and project creation. v2 does
# not. However, keystone v2 does not allow user creation by non-admin
# users, so we can throw an error to the user that does not need to
# mention api versions
if self.cloud_config.get_api_version('identity') == '3':
if not domain_id:
raise OpenStackCloudException(
"User or project creation requires an explicit"
" domain_id argument.")
else:
return {'domain': domain_id}
else:
return {}
def _get_identity_params(self, domain_id=None, project=None):
"""Get the domain and project/tenant parameters if needed.
@@ -777,8 +758,8 @@ class OpenStackCloud(
pass project or tenant_id or domain or nothing in a sane manner.
"""
ret = {}
ret.update(self._get_domain_param_dict(domain_id))
ret.update(self._get_project_param_dict(project))
ret.update(self._get_domain_id_param_dict(domain_id))
ret.update(self._get_project_id_param_dict(project))
return ret
def range_search(self, data, filters):
@@ -1071,23 +1052,20 @@ class OpenStackCloud(
self, name, password=None, email=None, default_project=None,
enabled=True, domain_id=None, description=None):
"""Create a user."""
with _utils.shade_exceptions("Error in creating user {user}".format(
user=name)):
identity_params = self._get_identity_params(
domain_id, default_project)
if self.cloud_config.get_api_version('identity') != '3':
if description is not None:
self.log.info(
"description parameter is not supported on Keystone v2"
)
user = self.manager.submit_task(_tasks.UserCreate(
name=name, password=password, email=email,
enabled=enabled, **identity_params))
else:
user = self.manager.submit_task(_tasks.UserCreate(
name=name, password=password, email=email,
enabled=enabled, description=description,
**identity_params))
params = self._get_identity_params(domain_id, default_project)
params.update({'name': name, 'password': password, 'email': email,
'enabled': enabled})
if self.cloud_config.get_api_version('identity') == '3':
params['description'] = description
elif description is not None:
self.log.info(
"description parameter is not supported on Keystone v2")
error_msg = "Error in creating user {user}".format(user=name)
data = self._identity_client.post('/users', json={'user': params},
error_message=error_msg)
user = meta.get_and_munchify('user', data)
self.list_users.invalidate(self)
return _utils.normalize_users([user])[0]

View File

@@ -290,11 +290,12 @@ class RequestsMockTestCase(BaseTestCase):
user_id = uuid.uuid4().hex
response = {'name': name, 'id': user_id}
request = {'name': name, 'password': password, 'tenantId': None}
request = {'name': name, 'password': password}
if kwargs.get('domain_id'):
kwargs['domain_id'] = uuid.UUID(kwargs['domain_id']).hex
response['domain_id'] = kwargs.pop('domain_id')
request['domain_id'] = response['domain_id']
response['email'] = kwargs.pop('email', None)
request['email'] = response['email']

View File

@@ -338,7 +338,7 @@ class TestMemoryCache(base.RequestsMockTestCase):
user_data = self._get_user_data(email='test@example.com')
new_resp = {'user': user_data.json_response['user'].copy()}
new_resp['user']['email'] = 'Nope@Nope.Nope'
new_resp['user']['email'] = 'updated@example.com'
new_req = {'user': {'email': new_resp['user']['email']}}
mock_users_url = self.get_mock_url(
@@ -364,8 +364,6 @@ class TestMemoryCache(base.RequestsMockTestCase):
dict(method='POST', uri=mock_users_url, status_code=200,
json=user_data.json_response,
validate=user_data.json_request),
dict(method='GET', uri=mock_user_resource_url, status_code=200,
json=user_data.json_response),
# List Users Call
dict(method='GET', uri=mock_users_url, status_code=200,
json=users_list_resp),

View File

@@ -29,10 +29,10 @@ class TestDomainParams(base.TestCase):
mock_api_version.return_value = '3'
ret = self.cloud._get_identity_params(domain_id='5678', project='bar')
self.assertIn('default_project', ret)
self.assertEqual(ret['default_project'], 1234)
self.assertIn('domain', ret)
self.assertEqual(ret['domain'], '5678')
self.assertIn('default_project_id', ret)
self.assertEqual(ret['default_project_id'], 1234)
self.assertIn('domain_id', ret)
self.assertEqual(ret['domain_id'], '5678')
@mock.patch.object(occ.cloud_config.CloudConfig, 'get_api_version')
@mock.patch.object(shade.OpenStackCloud, 'get_project')

View File

@@ -51,11 +51,7 @@ class TestUsers(base.RequestsMockTestCase):
uri=self._get_keystone_mock_url(resource='users', v3=False),
status_code=200,
json=user_data.json_response,
validate=user_data.json_request),
dict(method='GET',
uri=self._get_keystone_mock_url(resource='users', v3=False,
append=[user_data.user_id]),
status_code=200, json=user_data.json_response)])
validate=dict(json=user_data.json_request))])
user = self.op_cloud.create_user(
name=user_data.name, email=user_data.email,
@@ -75,11 +71,7 @@ class TestUsers(base.RequestsMockTestCase):
dict(method='POST',
uri=self._get_keystone_mock_url(resource='users'),
status_code=200, json=user_data.json_response,
validate=user_data.json_request),
dict(method='GET',
uri=self._get_keystone_mock_url(
resource='users', append=[user_data.user_id]),
status_code=200, json=user_data.json_response)])
validate=dict(json=user_data.json_request))])
user = self.op_cloud.create_user(
name=user_data.name, email=user_data.email,