Skip to content

Commit eb00173

Browse files
M V P Niteshdeepakmourya7
authored andcommitted
Now we can add description for role creation in OSC
Now user can add the description when user create's the role using OSC ``openstack role create`` command. User can add the description by adding `--description <Description>` to OSC ``openstack role create`` command. Co-Authored-By: Deepak Mourya<deepakmoriya7@gmail.com> Change-Id: I858e004c3b29c687b6a39c8a1ed5fb029eb19c67 Depends-on: I230af9cc833af13064636b5d9a7ce6334c3f6e9a Closes-Bug: #1669080
1 parent 1b66ad9 commit eb00173

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
@@ -177,6 +177,11 @@ def get_parser(self, prog_name):
177177
metavar='<role-name>',
178178
help=_('New role name'),
179179
)
180+
parser.add_argument(
181+
'--description',
182+
metavar='<description>',
183+
help=_('Add description about the role'),
184+
)
180185
parser.add_argument(
181186
'--domain',
182187
metavar='<domain>',
@@ -199,7 +204,8 @@ def take_action(self, parsed_args):
199204

200205
try:
201206
role = identity_client.roles.create(
202-
name=parsed_args.name, domain=domain_id)
207+
name=parsed_args.name, domain=domain_id,
208+
description=parsed_args.description)
203209

204210
except ks_exc.Conflict:
205211
if parsed_args.or_show:
@@ -449,6 +455,11 @@ def get_parser(self, prog_name):
449455
metavar='<role>',
450456
help=_('Role to modify (name or ID)'),
451457
)
458+
parser.add_argument(
459+
'--description',
460+
metavar='<description>',
461+
help=_('Add description about the role'),
462+
)
452463
parser.add_argument(
453464
'--domain',
454465
metavar='<domain>',
@@ -473,7 +484,8 @@ def take_action(self, parsed_args):
473484
parsed_args.role,
474485
domain_id=domain_id)
475486

476-
identity_client.roles.update(role.id, name=parsed_args.name)
487+
identity_client.roles.update(role.id, name=parsed_args.name,
488+
description=parsed_args.description)
477489

478490

479491
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
@@ -32,7 +32,7 @@ class IdentityTests(base.TestCase):
3232
'password_expires_at']
3333
PROJECT_FIELDS = ['description', 'id', 'domain_id', 'is_domain',
3434
'enabled', 'name', 'parent_id']
35-
ROLE_FIELDS = ['id', 'name', 'domain_id']
35+
ROLE_FIELDS = ['id', 'name', 'domain_id', 'description']
3636
SERVICE_FIELDS = ['id', 'enabled', 'name', 'type', 'description']
3737
REGION_FIELDS = ['description', 'enabled', 'parent_region', 'region']
3838
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)
@@ -88,6 +103,16 @@ def test_role_set(self):
88103
role = self.parse_show_as_object(raw_output)
89104
self.assertEqual(new_role_name, role['name'])
90105

106+
def test_role_set_description(self):
107+
role_name = self._create_dummy_role()
108+
description = data_utils.rand_name("NewDescription")
109+
raw_output = self.openstack('role set --description %s %s'
110+
% (description, role_name))
111+
self.assertEqual(0, len(raw_output))
112+
raw_output = self.openstack('role show %s' % role_name)
113+
role = self.parse_show_as_object(raw_output)
114+
self.assertEqual(description, role['description'])
115+
91116
def test_role_add(self):
92117
role_name = self._create_dummy_role()
93118
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
@@ -175,6 +175,7 @@
175175

176176
role_id = 'r1'
177177
role_name = 'roller'
178+
role_description = 'role description'
178179

179180
ROLE = {
180181
'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

@@ -1057,6 +1102,7 @@ def test_role_set_no_options(self):
10571102
# Set expected values
10581103
kwargs = {
10591104
'name': 'over',
1105+
'description': None,
10601106
}
10611107
# RoleManager.update(role, name=)
10621108
self.roles_mock.update.assert_called_with(
@@ -1088,6 +1134,39 @@ def test_role_set_domain_role(self):
10881134
# Set expected values
10891135
kwargs = {
10901136
'name': 'over',
1137+
'description': None,
1138+
}
1139+
# RoleManager.update(role, name=)
1140+
self.roles_mock.update.assert_called_with(
1141+
identity_fakes.ROLE_2['id'],
1142+
**kwargs
1143+
)
1144+
self.assertIsNone(result)
1145+
1146+
def test_role_set_description(self):
1147+
self.roles_mock.get.return_value = fakes.FakeResource(
1148+
None,
1149+
copy.deepcopy(identity_fakes.ROLE_2),
1150+
loaded=True,
1151+
)
1152+
arglist = [
1153+
'--name', 'over',
1154+
'--description', identity_fakes.role_description,
1155+
identity_fakes.ROLE_2['name'],
1156+
]
1157+
verifylist = [
1158+
('name', 'over'),
1159+
('description', identity_fakes.role_description),
1160+
('role', identity_fakes.ROLE_2['name']),
1161+
]
1162+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
1163+
1164+
result = self.cmd.take_action(parsed_args)
1165+
1166+
# Set expected values
1167+
kwargs = {
1168+
'name': 'over',
1169+
'description': identity_fakes.role_description,
10911170
}
10921171
# RoleManager.update(role, name=)
10931172
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)