Skip to content

Commit 80a9779

Browse files
Jenkinsopenstack-gerrit
authored andcommitted
Merge "Add optional parameter "user_id" and "type" to list credentials"
2 parents 08ffd85 + 470a1f1 commit 80a9779

4 files changed

Lines changed: 85 additions & 6 deletions

File tree

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

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ Create new credential
1919
2020
.. option:: --type <type>
2121

22-
New credential type
22+
New credential type: cert, ec2
2323

2424
.. option:: --project <project>
2525

@@ -59,6 +59,21 @@ List credentials
5959
.. code:: bash
6060
6161
openstack credential list
62+
[--user <user> [--user-domain <user-domain>]]
63+
[--type <type>]
64+
65+
.. option:: --user <user>
66+
67+
Filter credentials by <user> (name or ID)
68+
69+
.. option:: --user-domain <user-domain>
70+
71+
Domain the user belongs to (name or ID). This can be
72+
used in case collisions between user names exist.
73+
74+
.. option:: --type <type>
75+
76+
Filter credentials by type: cert, ec2
6277
6378
credential set
6479
--------------
@@ -81,7 +96,7 @@ Set credential properties
8196
8297
.. option:: --type <type>
8398
84-
New credential type
99+
New credential type: cert, ec2
85100
86101
.. option:: --data <data>
87102

openstackclient/identity/v3/credential.py

Lines changed: 34 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import six
2424

2525
from openstackclient.i18n import _
26+
from openstackclient.identity import common
2627

2728

2829
LOG = logging.getLogger(__name__)
@@ -43,7 +44,7 @@ def get_parser(self, prog_name):
4344
default="cert",
4445
metavar='<type>',
4546
choices=['ec2', 'cert'],
46-
help=_('New credential type'),
47+
help=_('New credential type: cert, ec2'),
4748
)
4849
parser.add_argument(
4950
'data',
@@ -112,10 +113,40 @@ def take_action(self, parsed_args):
112113
class ListCredential(command.Lister):
113114
_description = _("List credentials")
114115

116+
def get_parser(self, prog_name):
117+
parser = super(ListCredential, self).get_parser(prog_name)
118+
parser.add_argument(
119+
'--user',
120+
metavar='<user>',
121+
help=_('Filter credentials by <user> (name or ID)'),
122+
)
123+
common.add_user_domain_option_to_parser(parser)
124+
parser.add_argument(
125+
'--type',
126+
metavar='<type>',
127+
choices=['ec2', 'cert'],
128+
help=_('Filter credentials by type: cert, ec2'),
129+
)
130+
return parser
131+
115132
def take_action(self, parsed_args):
133+
identity_client = self.app.client_manager.identity
134+
135+
kwargs = {}
136+
if parsed_args.user:
137+
user_id = common.find_user(
138+
identity_client,
139+
parsed_args.user,
140+
parsed_args.user_domain,
141+
).id
142+
kwargs["user_id"] = user_id
143+
144+
if parsed_args.type:
145+
kwargs["type"] = parsed_args.type
146+
116147
columns = ('ID', 'Type', 'User ID', 'Blob', 'Project ID')
117148
column_headers = ('ID', 'Type', 'User ID', 'Data', 'Project ID')
118-
data = self.app.client_manager.identity.credentials.list()
149+
data = self.app.client_manager.identity.credentials.list(**kwargs)
119150
return (column_headers,
120151
(utils.get_item_properties(
121152
s, columns,
@@ -144,7 +175,7 @@ def get_parser(self, prog_name):
144175
metavar='<type>',
145176
choices=['ec2', 'cert'],
146177
required=True,
147-
help=_('New credential type'),
178+
help=_('New credential type: cert, ec2'),
148179
)
149180
parser.add_argument(
150181
'--data',

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

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -225,12 +225,15 @@ class TestCredentialList(TestCredential):
225225
def setUp(self):
226226
super(TestCredentialList, self).setUp()
227227

228+
self.user = identity_fakes.FakeUser.create_one_user()
229+
self.users_mock.get.return_value = self.user
230+
228231
self.credentials_mock.list.return_value = [self.credential]
229232

230233
# Get the command object to test
231234
self.cmd = credential.ListCredential(self.app, None)
232235

233-
def test_domain_list_no_options(self):
236+
def test_credential_list_no_options(self):
234237
arglist = []
235238
verifylist = []
236239
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -241,6 +244,31 @@ def test_domain_list_no_options(self):
241244
self.assertEqual(self.columns, columns)
242245
self.assertEqual(self.data, tuple(data))
243246

247+
def test_credential_list_with_options(self):
248+
arglist = [
249+
'--user', self.credential.user_id,
250+
'--type', self.credential.type,
251+
]
252+
verifylist = [
253+
('user', self.credential.user_id),
254+
('type', self.credential.type),
255+
]
256+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
257+
258+
columns, data = self.cmd.take_action(parsed_args)
259+
260+
kwargs = {
261+
'user_id': self.user.id,
262+
'type': self.credential.type,
263+
}
264+
self.users_mock.get.assert_called_with(self.credential.user_id)
265+
self.credentials_mock.list.assert_called_with(
266+
**kwargs
267+
)
268+
269+
self.assertEqual(self.columns, columns)
270+
self.assertEqual(self.data, tuple(data))
271+
244272

245273
class TestCredentialSet(TestCredential):
246274

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
features:
3+
- |
4+
Add ``--user`` and ``--type`` option to ``credential list`` command
5+
to filter list result by different user or type.

0 commit comments

Comments
 (0)