Merge "Add an optional parameter --detail"

This commit is contained in:
Zuul 2022-02-16 19:32:15 +00:00 committed by Gerrit Code Review
commit 683b694fff
3 changed files with 63 additions and 4 deletions

View File

@ -150,8 +150,44 @@ class ShellV2Test(testtools.TestCase):
]
}
stores_info_detail_response = {
"stores": [
{
"default": "true",
"id": "ceph1",
"type": "rbd",
"description": "RBD backend for glance.",
"properties": {
"pool": "pool1",
"chunk_size": "4"
}
},
{
"id": "file2",
"type": "file",
"description": "Filesystem backend for glance.",
"properties": {}
},
{
"id": "file1",
"type": "file",
"description": "Filesystem backend for gkance.",
"properties": {}
},
{
"id": "ceph2",
"type": "rbd",
"description": "RBD backend for glance.",
"properties": {
"pool": "pool2",
"chunk_size": "4"
}
}
]
}
def test_do_stores_info(self):
args = []
args = self._make_args({'detail': False})
with mock.patch.object(self.gc.images,
'get_stores_info') as mocked_list:
mocked_list.return_value = self.stores_info_response
@ -166,7 +202,7 @@ class ShellV2Test(testtools.TestCase):
def test_neg_stores_info(
self, mock_stdin, mock_utils_exit):
expected_msg = ('Multi Backend support is not enabled')
args = []
args = self._make_args({'detail': False})
mock_utils_exit.side_effect = self._mock_utils_exit
with mock.patch.object(self.gc.images,
'get_stores_info') as mocked_info:
@ -178,6 +214,18 @@ class ShellV2Test(testtools.TestCase):
pass
mock_utils_exit.assert_called_once_with(expected_msg)
def test_do_stores_info_with_detail(self):
args = self._make_args({'detail': True})
with mock.patch.object(self.gc.images,
'get_stores_info_detail') as mocked_list:
mocked_list.return_value = self.stores_info_detail_response
test_shell.do_stores_info(self.gc, args)
mocked_list.assert_called_once_with()
utils.print_dict.assert_called_once_with(
self.stores_info_detail_response)
@mock.patch('sys.stderr')
def test_image_create_missing_disk_format(self, __):
e = self.assertRaises(exc.CommandError, self._run_command,

View File

@ -322,6 +322,13 @@ class Controller(object):
resp, body = self.http_client.get(url)
return body, resp
@utils.add_req_id_to_object()
def get_stores_info_detail(self):
"""Get available stores info from discovery endpoint."""
url = '/v2/info/stores/detail'
resp, body = self.http_client.get(url)
return body, resp
@utils.add_req_id_to_object()
def delete_from_store(self, store_id, image_id):
"""Delete image data from specific store."""

View File

@ -583,11 +583,15 @@ def do_import_info(gc, args):
else:
utils.print_dict(import_info)
@utils.arg('--detail', default=False, action='store_true',
help='Shows details of stores. Admin only.')
def do_stores_info(gc, args):
"""Print available backends from Glance."""
try:
stores_info = gc.images.get_stores_info()
if args.detail:
stores_info = gc.images.get_stores_info_detail()
else:
stores_info = gc.images.get_stores_info()
except exc.HTTPNotFound:
utils.exit('Multi Backend support is not enabled')
else: