Merge "Glance image delete output"
This commit is contained in:
@@ -332,6 +332,9 @@ def do_image_delete(gc, args):
|
|||||||
"""Delete specified image(s)."""
|
"""Delete specified image(s)."""
|
||||||
for args_image in args.images:
|
for args_image in args.images:
|
||||||
image = utils.find_resource(gc.images, args_image)
|
image = utils.find_resource(gc.images, args_image)
|
||||||
|
if image and image.status == "deleted":
|
||||||
|
msg = "No image with an ID of '%s' exists." % image.id
|
||||||
|
raise exc.CommandError(msg)
|
||||||
try:
|
try:
|
||||||
if args.verbose:
|
if args.verbose:
|
||||||
print('Requesting image delete for %s ...' %
|
print('Requesting image delete for %s ...' %
|
||||||
|
@@ -268,6 +268,10 @@ def do_image_upload(gc, args):
|
|||||||
@utils.arg('id', metavar='<IMAGE_ID>', help='ID of image to delete.')
|
@utils.arg('id', metavar='<IMAGE_ID>', help='ID of image to delete.')
|
||||||
def do_image_delete(gc, args):
|
def do_image_delete(gc, args):
|
||||||
"""Delete specified image."""
|
"""Delete specified image."""
|
||||||
|
image = gc.images.get(args.id)
|
||||||
|
if image and image.status == "deleted":
|
||||||
|
msg = "No image with an ID of '%s' exists." % image.id
|
||||||
|
utils.exit(msg)
|
||||||
gc.images.delete(args.id)
|
gc.images.delete(args.id)
|
||||||
|
|
||||||
|
|
||||||
|
@@ -187,6 +187,28 @@ fixtures = {
|
|||||||
},
|
},
|
||||||
None
|
None
|
||||||
)
|
)
|
||||||
|
},
|
||||||
|
'/v1/images/detail?limit=20&name=70aa106f-3750-4d7c-a5ce-0a535ac08d0a': {
|
||||||
|
'GET': (
|
||||||
|
{},
|
||||||
|
{'images': [
|
||||||
|
{
|
||||||
|
'id': '70aa106f-3750-4d7c-a5ce-0a535ac08d0a',
|
||||||
|
'name': 'imagedeleted',
|
||||||
|
'deleted': True,
|
||||||
|
'status': 'deleted',
|
||||||
|
},
|
||||||
|
]},
|
||||||
|
),
|
||||||
|
},
|
||||||
|
'/v1/images/70aa106f-3750-4d7c-a5ce-0a535ac08d0a': {
|
||||||
|
'HEAD': (
|
||||||
|
{
|
||||||
|
'x-image-meta-id': '70aa106f-3750-4d7c-a5ce-0a535ac08d0a',
|
||||||
|
'x-image-meta-status': 'deleted'
|
||||||
|
},
|
||||||
|
None
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -387,6 +409,16 @@ class ShellStdinHandlingTests(testtools.TestCase):
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def test_image_delete_deleted(self):
|
||||||
|
self.assertRaises(
|
||||||
|
exc.CommandError,
|
||||||
|
v1shell.do_image_delete,
|
||||||
|
self.gc,
|
||||||
|
argparse.Namespace(
|
||||||
|
images=['70aa106f-3750-4d7c-a5ce-0a535ac08d0a']
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
def test_image_update_closed_stdin(self):
|
def test_image_update_closed_stdin(self):
|
||||||
"""Supply glanceclient with a closed stdin, and perform an image
|
"""Supply glanceclient with a closed stdin, and perform an image
|
||||||
update to an active image. Glanceclient should not attempt to read
|
update to an active image. Glanceclient should not attempt to read
|
||||||
|
@@ -365,6 +365,18 @@ class ShellV2Test(testtools.TestCase):
|
|||||||
|
|
||||||
mocked_delete.assert_called_once_with('pass')
|
mocked_delete.assert_called_once_with('pass')
|
||||||
|
|
||||||
|
def test_do_image_delete_deleted(self):
|
||||||
|
image_id = 'deleted-img'
|
||||||
|
args = self._make_args({'id': image_id})
|
||||||
|
with mock.patch.object(self.gc.images, 'get') as mocked_get:
|
||||||
|
mocked_get.return_value = self._make_args({'id': image_id,
|
||||||
|
'status': 'deleted'})
|
||||||
|
|
||||||
|
msg = "No image with an ID of '%s' exists." % image_id
|
||||||
|
self.assert_exits_with_msg(func=test_shell.do_image_delete,
|
||||||
|
func_args=args,
|
||||||
|
err_msg=msg)
|
||||||
|
|
||||||
def test_do_member_list(self):
|
def test_do_member_list(self):
|
||||||
args = self._make_args({'image_id': 'IMG-01'})
|
args = self._make_args({'image_id': 'IMG-01'})
|
||||||
with mock.patch.object(self.gc.image_members, 'list') as mocked_list:
|
with mock.patch.object(self.gc.image_members, 'list') as mocked_list:
|
||||||
|
Reference in New Issue
Block a user