Merge "De-client-ify User Create"
This commit is contained in:
@@ -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]
|
||||
|
||||
|
||||
@@ -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']
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -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')
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user