Added reactivate/deactivate image using CLI
Added commands 'glance image-reactivate image_id' and 'glance image-deactivate image_id' for reactivate/deactivate image using CLI DocImpact Change-Id: I2c370c6bf6ff664d94d756cc76aaa983fbdb8869 Closes-bug: #1508356
This commit is contained in:

committed by
Mike Fedosin

parent
c0975934c0
commit
bff356ed73
@@ -207,6 +207,12 @@ data_fixtures = {
|
||||
'CCC',
|
||||
),
|
||||
},
|
||||
'/v2/images/87b634c1-f893-33c9-28a9-e5673c99239a/actions/reactivate': {
|
||||
'POST': ({}, None)
|
||||
},
|
||||
'/v2/images/87b634c1-f893-33c9-28a9-e5673c99239a/actions/deactivate': {
|
||||
'POST': ({}, None)
|
||||
},
|
||||
'/v2/images?limit=%d&visibility=public' % images.DEFAULT_PAGE_SIZE: {
|
||||
'GET': (
|
||||
{},
|
||||
@@ -789,6 +795,24 @@ class TestController(testtools.TestCase):
|
||||
None)]
|
||||
self.assertEqual(expect, self.api.calls)
|
||||
|
||||
def test_deactivate_image(self):
|
||||
id_image = '87b634c1-f893-33c9-28a9-e5673c99239a'
|
||||
self.controller.deactivate(id_image)
|
||||
expect = [('POST',
|
||||
'/v2/images/%s/actions/deactivate' % id_image,
|
||||
{},
|
||||
None)]
|
||||
self.assertEqual(expect, self.api.calls)
|
||||
|
||||
def reactivate_image(self):
|
||||
id_image = '87b634c1-f893-33c9-28a9-e5673c99239a'
|
||||
self.controller.reactivate(id_image)
|
||||
expect = [('POST',
|
||||
'/v2/images/%s/actions/reactivate' % id_image,
|
||||
{},
|
||||
None)]
|
||||
self.assertEqual(expect, self.api.calls)
|
||||
|
||||
def test_data_upload(self):
|
||||
image_data = 'CCC'
|
||||
image_id = '606b0e88-7c5a-4d54-b5bb-046105d4de6f'
|
||||
|
@@ -601,6 +601,24 @@ class ShellV2Test(testtools.TestCase):
|
||||
test_shell.do_image_delete(self.gc, args)
|
||||
self.assertEqual(2, mocked_delete.call_count)
|
||||
|
||||
def test_do_image_deactivate(self):
|
||||
args = argparse.Namespace(id='image1')
|
||||
with mock.patch.object(self.gc.images,
|
||||
'deactivate') as mocked_deactivate:
|
||||
mocked_deactivate.return_value = 0
|
||||
|
||||
test_shell.do_image_deactivate(self.gc, args)
|
||||
self.assertEqual(1, mocked_deactivate.call_count)
|
||||
|
||||
def test_do_image_reactivate(self):
|
||||
args = argparse.Namespace(id='image1')
|
||||
with mock.patch.object(self.gc.images,
|
||||
'reactivate') as mocked_reactivate:
|
||||
mocked_reactivate.return_value = 0
|
||||
|
||||
test_shell.do_image_reactivate(self.gc, args)
|
||||
self.assertEqual(1, mocked_reactivate.call_count)
|
||||
|
||||
@mock.patch.object(utils, 'exit')
|
||||
@mock.patch.object(utils, 'print_err')
|
||||
def test_do_image_delete_with_invalid_ids(self, mocked_print_err,
|
||||
|
@@ -234,6 +234,16 @@ class Controller(object):
|
||||
body.pop('self', None)
|
||||
return self.model(**body)
|
||||
|
||||
def deactivate(self, image_id):
|
||||
"""Deactivate an image."""
|
||||
url = '/v2/images/%s/actions/deactivate' % image_id
|
||||
return self.http_client.post(url)
|
||||
|
||||
def reactivate(self, image_id):
|
||||
"""Reactivate an image."""
|
||||
url = '/v2/images/%s/actions/reactivate' % image_id
|
||||
return self.http_client.post(url)
|
||||
|
||||
def update(self, image_id, remove_props=None, **kwargs):
|
||||
"""Update attributes of an image.
|
||||
|
||||
|
@@ -335,6 +335,20 @@ def do_image_delete(gc, args):
|
||||
utils.exit()
|
||||
|
||||
|
||||
@utils.arg('id', metavar='<IMAGE_ID>',
|
||||
help=_('ID of image to deactivate.'))
|
||||
def do_image_deactivate(gc, args):
|
||||
"""Deactivate specified image."""
|
||||
gc.images.deactivate(args.id)
|
||||
|
||||
|
||||
@utils.arg('id', metavar='<IMAGE_ID>',
|
||||
help=_('ID of image to reactivate.'))
|
||||
def do_image_reactivate(gc, args):
|
||||
"""Reactivate specified image."""
|
||||
gc.images.reactivate(args.id)
|
||||
|
||||
|
||||
@utils.arg('image_id', metavar='<IMAGE_ID>',
|
||||
help=_('Image to be updated with the given tag.'))
|
||||
@utils.arg('tag_value', metavar='<TAG_VALUE>',
|
||||
|
Reference in New Issue
Block a user