Skip to content

Commit 4cb5626

Browse files
Samuel Pillastevemar
authored andcommitted
Adds domain specification for SetUser
This patch adds the ability to specify the domain context for making changes to a user with `--domain` flag. Example: $ openstack user set test_user --domain test_domain --enable Change-Id: I2b3241785c22e72e19181394acff650422299b0e Closes-Bug: #1658147
1 parent b69b539 commit 4cb5626

4 files changed

Lines changed: 68 additions & 4 deletions

File tree

doc/source/command-objects/user.rst

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,13 @@ Set user properties
153153
154154
Set user name
155155
156+
.. option:: --domain <domain>
157+
158+
Domain the user belongs to (name or ID).
159+
This can be used in case collisions between user names exist.
160+
161+
.. versionadded:: 3
162+
156163
.. option:: --project <project>
157164
158165
Set default project (name or ID)

openstackclient/identity/v3/user.py

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -301,6 +301,12 @@ def get_parser(self, prog_name):
301301
metavar='<name>',
302302
help=_('Set user name'),
303303
)
304+
parser.add_argument(
305+
'--domain',
306+
metavar='<domain>',
307+
help=_('Domain the user belongs to (name or ID). This can be '
308+
'used in case collisions between user names exist.'),
309+
)
304310
parser.add_argument(
305311
'--project',
306312
metavar='<project>',
@@ -351,10 +357,19 @@ def take_action(self, parsed_args):
351357
LOG.warning(_("No password was supplied, authentication will fail "
352358
"when a user does not have a password."))
353359

354-
user = utils.find_resource(
355-
identity_client.users,
356-
parsed_args.user,
357-
)
360+
user_str = common._get_token_resource(identity_client, 'user',
361+
parsed_args.user)
362+
if parsed_args.domain:
363+
domain = common.find_domain(identity_client, parsed_args.domain)
364+
user = utils.find_resource(identity_client.users,
365+
user_str,
366+
domain_id=domain.id)
367+
else:
368+
user = utils.find_resource(
369+
identity_client.users,
370+
parsed_args.user,
371+
)
372+
358373
kwargs = {}
359374
if parsed_args.name:
360375
kwargs['name'] = parsed_args.name

openstackclient/tests/unit/identity/v3/test_user.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -684,9 +684,14 @@ def test_user_list_project(self):
684684
class TestUserSet(TestUser):
685685

686686
project = identity_fakes.FakeProject.create_one_project()
687+
domain = identity_fakes.FakeDomain.create_one_domain()
687688
user = identity_fakes.FakeUser.create_one_user(
688689
attrs={'default_project_id': project.id}
689690
)
691+
user2 = identity_fakes.FakeUser.create_one_user(
692+
attrs={'default_project_id': project.id,
693+
'domain_id': domain.id}
694+
)
690695

691696
def setUp(self):
692697
super(TestUserSet, self).setUp()
@@ -748,6 +753,37 @@ def test_user_set_name(self):
748753
)
749754
self.assertIsNone(result)
750755

756+
def test_user_set_specify_domain(self):
757+
arglist = [
758+
'--name', 'qwerty',
759+
'--domain', self.domain.id,
760+
self.user2.name
761+
]
762+
verifylist = [
763+
('name', 'qwerty'),
764+
('password', None),
765+
('domain', self.domain.id),
766+
('email', None),
767+
('project', None),
768+
('enable', False),
769+
('disable', False),
770+
('user', self.user2.name),
771+
]
772+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
773+
774+
result = self.cmd.take_action(parsed_args)
775+
776+
kwargs = {
777+
'enabled': True,
778+
'name': 'qwerty'
779+
}
780+
781+
self.users_mock.update.assert_called_with(
782+
self.user.id,
783+
**kwargs
784+
)
785+
self.assertIsNone(result)
786+
751787
def test_user_set_password(self):
752788
arglist = [
753789
'--password', 'secret',
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
features:
3+
- |
4+
Add ``--domain`` options to the ``user set`` command.
5+
Allows specification of domain context when changing users.
6+
[Bug `1658147 <https://bugs.launchpad.net/bugs/1658147>`_]

0 commit comments

Comments
 (0)