Skip to content

Commit 181f16d

Browse files
committed
add service/interface/region filter for endpoint v3
Change-Id: I7eac5b2ff5f5a6f3f08b22dd3a48a5ae7e2c056b Closes-Bug: #1281888
1 parent 99ad9ef commit 181f16d

2 files changed

Lines changed: 123 additions & 1 deletion

File tree

‎openstackclient/identity/v3/endpoint.py‎

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,12 +114,38 @@ class ListEndpoint(lister.Lister):
114114

115115
log = logging.getLogger(__name__ + '.ListEndpoint')
116116

117+
def get_parser(self, prog_name):
118+
parser = super(ListEndpoint, self).get_parser(prog_name)
119+
parser.add_argument(
120+
'--service',
121+
metavar='<service>',
122+
help='Filter by a specific service')
123+
parser.add_argument(
124+
'--interface',
125+
metavar='<interface>',
126+
choices=['admin', 'public', 'internal'],
127+
help='Filter by a specific interface, must be admin, public or'
128+
' internal')
129+
parser.add_argument(
130+
'--region',
131+
metavar='<region>',
132+
help='Filter by a specific region')
133+
return parser
134+
117135
def take_action(self, parsed_args):
118136
self.log.debug('take_action(%s)', parsed_args)
119137
identity_client = self.app.client_manager.identity
120138
columns = ('ID', 'Region', 'Service Name', 'Service Type',
121139
'Enabled', 'Interface', 'URL')
122-
data = identity_client.endpoints.list()
140+
kwargs = {}
141+
if parsed_args.service:
142+
service = common.find_service(identity_client, parsed_args.service)
143+
kwargs['service'] = service.id
144+
if parsed_args.interface:
145+
kwargs['interface'] = parsed_args.interface
146+
if parsed_args.region:
147+
kwargs['region'] = parsed_args.region
148+
data = identity_client.endpoints.list(**kwargs)
123149

124150
for ep in data:
125151
service = common.find_service(identity_client, ep.service_id)

‎openstackclient/tests/identity/v3/test_endpoint.py‎

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -317,6 +317,102 @@ def test_endpoint_list_no_options(self):
317317
),)
318318
self.assertEqual(datalist, tuple(data))
319319

320+
def test_endpoint_list_service(self):
321+
arglist = [
322+
'--service', identity_fakes.service_name,
323+
]
324+
verifylist = [
325+
('service', identity_fakes.service_name),
326+
]
327+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
328+
329+
# DisplayCommandBase.take_action() returns two tuples
330+
columns, data = self.cmd.take_action(parsed_args)
331+
332+
# Set expected values
333+
kwargs = {
334+
'service': identity_fakes.service_id,
335+
}
336+
self.endpoints_mock.list.assert_called_with(**kwargs)
337+
338+
collist = ('ID', 'Region', 'Service Name', 'Service Type',
339+
'Enabled', 'Interface', 'URL')
340+
self.assertEqual(collist, columns)
341+
datalist = ((
342+
identity_fakes.endpoint_id,
343+
identity_fakes.endpoint_region,
344+
identity_fakes.service_name,
345+
identity_fakes.service_type,
346+
True,
347+
identity_fakes.endpoint_interface,
348+
identity_fakes.endpoint_url,
349+
),)
350+
self.assertEqual(datalist, tuple(data))
351+
352+
def test_endpoint_list_interface(self):
353+
arglist = [
354+
'--interface', identity_fakes.endpoint_interface,
355+
]
356+
verifylist = [
357+
('interface', identity_fakes.endpoint_interface),
358+
]
359+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
360+
361+
# DisplayCommandBase.take_action() returns two tuples
362+
columns, data = self.cmd.take_action(parsed_args)
363+
364+
# Set expected values
365+
kwargs = {
366+
'interface': identity_fakes.endpoint_interface,
367+
}
368+
self.endpoints_mock.list.assert_called_with(**kwargs)
369+
370+
collist = ('ID', 'Region', 'Service Name', 'Service Type',
371+
'Enabled', 'Interface', 'URL')
372+
self.assertEqual(collist, columns)
373+
datalist = ((
374+
identity_fakes.endpoint_id,
375+
identity_fakes.endpoint_region,
376+
identity_fakes.service_name,
377+
identity_fakes.service_type,
378+
True,
379+
identity_fakes.endpoint_interface,
380+
identity_fakes.endpoint_url,
381+
),)
382+
self.assertEqual(datalist, tuple(data))
383+
384+
def test_endpoint_list_region(self):
385+
arglist = [
386+
'--region', identity_fakes.endpoint_region,
387+
]
388+
verifylist = [
389+
('region', identity_fakes.endpoint_region),
390+
]
391+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
392+
393+
# DisplayCommandBase.take_action() returns two tuples
394+
columns, data = self.cmd.take_action(parsed_args)
395+
396+
# Set expected values
397+
kwargs = {
398+
'region': identity_fakes.endpoint_region,
399+
}
400+
self.endpoints_mock.list.assert_called_with(**kwargs)
401+
402+
collist = ('ID', 'Region', 'Service Name', 'Service Type',
403+
'Enabled', 'Interface', 'URL')
404+
self.assertEqual(collist, columns)
405+
datalist = ((
406+
identity_fakes.endpoint_id,
407+
identity_fakes.endpoint_region,
408+
identity_fakes.service_name,
409+
identity_fakes.service_type,
410+
True,
411+
identity_fakes.endpoint_interface,
412+
identity_fakes.endpoint_url,
413+
),)
414+
self.assertEqual(datalist, tuple(data))
415+
320416

321417
class TestEndpointSet(TestEndpoint):
322418

0 commit comments

Comments
 (0)