Skip to content

Commit 706c51b

Browse files
Jenkinsopenstack-gerrit
authored andcommitted
Merge "Add identity v3 catalog show"
2 parents 3da6e47 + fa5f02e commit 706c51b

4 files changed

Lines changed: 80 additions & 1 deletion

File tree

‎doc/source/command-objects/catalog.rst‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
catalog
33
=======
44

5-
Identity v2
5+
Identity v2, v3
66

77
catalog list
88
------------

‎openstackclient/identity/v3/catalog.py‎

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,11 @@
1616
import logging
1717

1818
from cliff import lister
19+
from cliff import show
20+
import six
1921

2022
from openstackclient.common import utils
23+
from openstackclient.i18n import _ # noqa
2124

2225

2326
def _format_endpoints(eps=None):
@@ -54,3 +57,44 @@ def take_action(self, parsed_args):
5457
'Endpoints': _format_endpoints,
5558
},
5659
) for s in data))
60+
61+
62+
class ShowCatalog(show.ShowOne):
63+
"""Display service catalog details"""
64+
65+
log = logging.getLogger(__name__ + '.ShowCatalog')
66+
67+
def get_parser(self, prog_name):
68+
parser = super(ShowCatalog, self).get_parser(prog_name)
69+
parser.add_argument(
70+
'service',
71+
metavar='<service>',
72+
help=_('Service to display (type or name)'),
73+
)
74+
return parser
75+
76+
def take_action(self, parsed_args):
77+
self.log.debug('take_action(%s)', parsed_args)
78+
79+
# This is ugly because if auth hasn't happened yet we need
80+
# to trigger it here.
81+
sc = self.app.client_manager.session.auth.get_auth_ref(
82+
self.app.client_manager.session,
83+
).service_catalog
84+
85+
data = None
86+
for service in sc.get_data():
87+
if (service.get('name') == parsed_args.service or
88+
service.get('type') == parsed_args.service):
89+
data = dict(service)
90+
data['endpoints'] = _format_endpoints(data['endpoints'])
91+
if 'links' in data:
92+
data.pop('links')
93+
break
94+
95+
if not data:
96+
self.app.log.error('service %s not found\n' %
97+
parsed_args.service)
98+
return ([], [])
99+
100+
return zip(*sorted(six.iteritems(data)))

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

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,3 +82,37 @@ def test_catalog_list(self):
8282
'<none>\n internal: https://internal.example.com\n',
8383
), )
8484
self.assertEqual(datalist, tuple(data))
85+
86+
87+
class TestCatalogShow(TestCatalog):
88+
89+
def setUp(self):
90+
super(TestCatalogShow, self).setUp()
91+
92+
# Get the command object to test
93+
self.cmd = catalog.ShowCatalog(self.app, None)
94+
95+
def test_catalog_show(self):
96+
arglist = [
97+
'compute',
98+
]
99+
verifylist = [
100+
('service', 'compute'),
101+
]
102+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
103+
104+
# DisplayCommandBase.take_action() returns two tuples
105+
columns, data = self.cmd.take_action(parsed_args)
106+
self.sc_mock.service_catalog.get_data.assert_called_with()
107+
108+
collist = ('endpoints', 'id', 'name', 'type')
109+
self.assertEqual(collist, columns)
110+
datalist = (
111+
'onlyone\n public: https://public.example.com\nonlyone\n'
112+
' admin: https://admin.example.com\n'
113+
'<none>\n internal: https://internal.example.com\n',
114+
'qwertyuiop',
115+
'supernova',
116+
'compute',
117+
)
118+
self.assertEqual(datalist, data)

‎setup.cfg‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,7 @@ openstack.identity.v3 =
186186
access_token_create = openstackclient.identity.v3.token:CreateAccessToken
187187

188188
catalog_list = openstackclient.identity.v3.catalog:ListCatalog
189+
catalog_show = openstackclient.identity.v3.catalog:ShowCatalog
189190

190191
consumer_create = openstackclient.identity.v3.consumer:CreateConsumer
191192
consumer_delete = openstackclient.identity.v3.consumer:DeleteConsumer

0 commit comments

Comments
 (0)