Skip to content

Commit fc12033

Browse files
Zuulopenstack-gerrit
authored andcommitted
Merge "Now we can add description for role creation in OSC"
2 parents 9277fd4 + eb00173 commit fc12033

7 files changed

Lines changed: 132 additions & 3 deletions

File tree

doc/source/cli/command-objects/role.rst

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,10 @@ Create new role
115115

116116
New role name
117117

118+
.. option:: --description <description>
119+
120+
Add description about the role
121+
118122
role delete
119123
-----------
120124

openstackclient/identity/v3/role.py

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,11 @@ def get_parser(self, prog_name):
176176
metavar='<role-name>',
177177
help=_('New role name'),
178178
)
179+
parser.add_argument(
180+
'--description',
181+
metavar='<description>',
182+
help=_('Add description about the role'),
183+
)
179184
parser.add_argument(
180185
'--domain',
181186
metavar='<domain>',
@@ -198,7 +203,8 @@ def take_action(self, parsed_args):
198203

199204
try:
200205
role = identity_client.roles.create(
201-
name=parsed_args.name, domain=domain_id)
206+
name=parsed_args.name, domain=domain_id,
207+
description=parsed_args.description)
202208

203209
except ks_exc.Conflict:
204210
if parsed_args.or_show:
@@ -345,6 +351,11 @@ def get_parser(self, prog_name):
345351
metavar='<role>',
346352
help=_('Role to modify (name or ID)'),
347353
)
354+
parser.add_argument(
355+
'--description',
356+
metavar='<description>',
357+
help=_('Add description about the role'),
358+
)
348359
parser.add_argument(
349360
'--domain',
350361
metavar='<domain>',
@@ -369,7 +380,8 @@ def take_action(self, parsed_args):
369380
parsed_args.role,
370381
domain_id=domain_id)
371382

372-
identity_client.roles.update(role.id, name=parsed_args.name)
383+
identity_client.roles.update(role.id, name=parsed_args.name,
384+
description=parsed_args.description)
373385

374386

375387
class ShowRole(command.ShowOne):

openstackclient/tests/functional/identity/v3/common.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ class IdentityTests(base.TestCase):
3333
'password_expires_at']
3434
PROJECT_FIELDS = ['description', 'id', 'domain_id', 'is_domain',
3535
'enabled', 'name', 'parent_id']
36-
ROLE_FIELDS = ['id', 'name', 'domain_id']
36+
ROLE_FIELDS = ['id', 'name', 'domain_id', 'description']
3737
SERVICE_FIELDS = ['id', 'enabled', 'name', 'type', 'description']
3838
REGION_FIELDS = ['description', 'enabled', 'parent_region', 'region']
3939
ENDPOINT_FIELDS = ['id', 'region', 'region_id', 'service_id',

openstackclient/tests/functional/identity/v3/test_role.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,21 @@ class RoleTests(common.IdentityTests):
2020
def test_role_create(self):
2121
self._create_dummy_role()
2222

23+
def test_role_create_with_description(self):
24+
role_name = data_utils.rand_name('TestRole')
25+
description = data_utils.rand_name('description')
26+
raw_output = self.openstack(
27+
'role create '
28+
'--description %(description)s '
29+
'%(name)s' % {'description': description,
30+
'name': role_name})
31+
role = self.parse_show_as_object(raw_output)
32+
self.addCleanup(self.openstack, 'role delete %s' % role['id'])
33+
items = self.parse_show(raw_output)
34+
self.assert_show_fields(items, self.ROLE_FIELDS)
35+
self.assertEqual(description, role['description'])
36+
return role_name
37+
2338
def test_role_delete(self):
2439
role_name = self._create_dummy_role(add_clean_up=False)
2540
raw_output = self.openstack('role delete %s' % role_name)
@@ -47,6 +62,16 @@ def test_role_set(self):
4762
role = self.parse_show_as_object(raw_output)
4863
self.assertEqual(new_role_name, role['name'])
4964

65+
def test_role_set_description(self):
66+
role_name = self._create_dummy_role()
67+
description = data_utils.rand_name("NewDescription")
68+
raw_output = self.openstack('role set --description %s %s'
69+
% (description, role_name))
70+
self.assertEqual(0, len(raw_output))
71+
raw_output = self.openstack('role show %s' % role_name)
72+
role = self.parse_show_as_object(raw_output)
73+
self.assertEqual(description, role['description'])
74+
5075
def test_role_add(self):
5176
role_name = self._create_dummy_role()
5277
username = self._create_dummy_user()

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,7 @@
176176

177177
role_id = 'r1'
178178
role_name = 'roller'
179+
role_description = 'role description'
179180

180181
ROLE = {
181182
'id': role_id,

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

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -332,6 +332,7 @@ def test_role_create_no_options(self):
332332
kwargs = {
333333
'domain': None,
334334
'name': identity_fakes.role_name,
335+
'description': None,
335336
}
336337

337338
# RoleManager.create(name=, domain=)
@@ -375,6 +376,7 @@ def test_role_create_with_domain(self):
375376
kwargs = {
376377
'domain': identity_fakes.domain_id,
377378
'name': identity_fakes.ROLE_2['name'],
379+
'description': None,
378380
}
379381

380382
# RoleManager.create(name=, domain=)
@@ -391,6 +393,49 @@ def test_role_create_with_domain(self):
391393
)
392394
self.assertEqual(datalist, data)
393395

396+
def test_role_create_with_description(self):
397+
398+
self.roles_mock.create.return_value = fakes.FakeResource(
399+
None,
400+
copy.deepcopy(identity_fakes.ROLE_2),
401+
loaded=True,
402+
)
403+
arglist = [
404+
'--description', identity_fakes.role_description,
405+
identity_fakes.ROLE_2['name'],
406+
]
407+
verifylist = [
408+
('description', identity_fakes.role_description),
409+
('name', identity_fakes.ROLE_2['name']),
410+
]
411+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
412+
413+
# In base command class ShowOne in cliff, abstract method take_action()
414+
# returns a two-part tuple with a tuple of column names and a tuple of
415+
# data to be shown.
416+
columns, data = self.cmd.take_action(parsed_args)
417+
418+
# Set expected values
419+
kwargs = {
420+
'description': identity_fakes.role_description,
421+
'name': identity_fakes.ROLE_2['name'],
422+
'domain': None,
423+
}
424+
425+
# RoleManager.create(name=, domain=)
426+
self.roles_mock.create.assert_called_with(
427+
**kwargs
428+
)
429+
430+
collist = ('domain', 'id', 'name')
431+
self.assertEqual(collist, columns)
432+
datalist = (
433+
'd1',
434+
identity_fakes.ROLE_2['id'],
435+
identity_fakes.ROLE_2['name'],
436+
)
437+
self.assertEqual(datalist, data)
438+
394439

395440
class TestRoleDelete(TestRole):
396441

@@ -825,6 +870,7 @@ def test_role_set_no_options(self):
825870
# Set expected values
826871
kwargs = {
827872
'name': 'over',
873+
'description': None,
828874
}
829875
# RoleManager.update(role, name=)
830876
self.roles_mock.update.assert_called_with(
@@ -856,6 +902,39 @@ def test_role_set_domain_role(self):
856902
# Set expected values
857903
kwargs = {
858904
'name': 'over',
905+
'description': None,
906+
}
907+
# RoleManager.update(role, name=)
908+
self.roles_mock.update.assert_called_with(
909+
identity_fakes.ROLE_2['id'],
910+
**kwargs
911+
)
912+
self.assertIsNone(result)
913+
914+
def test_role_set_description(self):
915+
self.roles_mock.get.return_value = fakes.FakeResource(
916+
None,
917+
copy.deepcopy(identity_fakes.ROLE_2),
918+
loaded=True,
919+
)
920+
arglist = [
921+
'--name', 'over',
922+
'--description', identity_fakes.role_description,
923+
identity_fakes.ROLE_2['name'],
924+
]
925+
verifylist = [
926+
('name', 'over'),
927+
('description', identity_fakes.role_description),
928+
('role', identity_fakes.ROLE_2['name']),
929+
]
930+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
931+
932+
result = self.cmd.take_action(parsed_args)
933+
934+
# Set expected values
935+
kwargs = {
936+
'name': 'over',
937+
'description': identity_fakes.role_description,
859938
}
860939
# RoleManager.update(role, name=)
861940
self.roles_mock.update.assert_called_with(
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
---
2+
features:
3+
- |
4+
Now user can add the description when user create's
5+
the role using OSC ``openstack role create`` command.
6+
User can add the description by adding
7+
`--description <Description>` to OSC
8+
``openstack role create`` command.

0 commit comments

Comments
 (0)