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:
Darja Shakhray
2015-10-23 18:25:25 +03:00
committed by Mike Fedosin
parent c0975934c0
commit bff356ed73
4 changed files with 66 additions and 0 deletions

View File

@@ -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'

View File

@@ -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,

View File

@@ -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.

View File

@@ -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>',