Merge "Fix 'createImage' server actions for V2.1 API"

This commit is contained in:
Jenkins
2014-09-24 20:01:15 +00:00
committed by Gerrit Code Review
5 changed files with 35 additions and 28 deletions

View File

@@ -1,5 +1,5 @@
{
"create_image" : {
"createImage" : {
"name" : "foo-image",
"metadata": {
"meta_var": "meta_val"

View File

@@ -934,17 +934,17 @@ class ServersController(wsgi.Controller):
@extensions.expected_errors((400, 403, 404, 409))
@wsgi.response(202)
@wsgi.action('create_image')
@wsgi.action('createImage')
@common.check_snapshots_enabled
def _action_create_image(self, req, id, body):
"""Snapshot a server instance."""
context = req.environ['nova.context']
entity = body.get("create_image", {})
entity = body.get("createImage", {})
image_name = entity.get("name")
if not image_name:
msg = _("create_image entity requires name attribute")
msg = _("createImage entity requires name attribute")
raise exc.HTTPBadRequest(explanation=msg)
props = {}
@@ -986,7 +986,7 @@ class ServersController(wsgi.Controller):
extra_properties=props)
except exception.InstanceInvalidState as state_error:
common.raise_http_conflict_for_instance_invalid_state(state_error,
'create_image')
'createImage')
except exception.Invalid as err:
raise exc.HTTPBadRequest(explanation=err.format_message())

View File

@@ -818,7 +818,7 @@ class ServerActionsControllerTest(test.TestCase):
def test_create_image(self):
body = {
'create_image': {
'createImage': {
'name': 'Snapshot 1',
},
}
@@ -832,7 +832,7 @@ class ServerActionsControllerTest(test.TestCase):
def test_create_image_name_too_long(self):
long_name = 'a' * 260
body = {
'create_image': {
'createImage': {
'name': long_name,
},
}
@@ -847,10 +847,10 @@ class ServerActionsControllerTest(test.TestCase):
def _fake_id(x):
return '%s-%s-%s-%s' % (x * 8, x * 4, x * 4, x * 12)
body = dict(create_image=dict(name='snapshot_of_volume_backed'))
body = dict(createImage=dict(name='snapshot_of_volume_backed'))
if extra_properties:
body['create_image']['metadata'] = extra_properties
body['createImage']['metadata'] = extra_properties
image_service = glance.get_default_image_service()
@@ -941,9 +941,9 @@ class ServerActionsControllerTest(test.TestCase):
def _fake_id(x):
return '%s-%s-%s-%s' % (x * 8, x * 4, x * 4, x * 12)
body = dict(create_image=dict(name='snapshot_of_volume_backed'))
body = dict(createImage=dict(name='snapshot_of_volume_backed'))
if extra_metadata:
body['create_image']['metadata'] = extra_metadata
body['createImage']['metadata'] = extra_metadata
image_service = glance.get_default_image_service()
@@ -1011,7 +1011,7 @@ class ServerActionsControllerTest(test.TestCase):
"""
self.flags(allow_instance_snapshots=False)
body = {
'create_image': {
'createImage': {
'name': 'Snapshot 1',
},
}
@@ -1022,7 +1022,7 @@ class ServerActionsControllerTest(test.TestCase):
def test_create_image_with_metadata(self):
body = {
'create_image': {
'createImage': {
'name': 'Snapshot 1',
'metadata': {'key': 'asdf'},
},
@@ -1036,13 +1036,13 @@ class ServerActionsControllerTest(test.TestCase):
def test_create_image_with_too_much_metadata(self):
body = {
'create_image': {
'createImage': {
'name': 'Snapshot 1',
'metadata': {},
},
}
for num in range(CONF.quota_metadata_items + 1):
body['create_image']['metadata']['foo%i' % num] = "bar"
body['createImage']['metadata']['foo%i' % num] = "bar"
req = fakes.HTTPRequestV3.blank(self.url)
self.assertRaises(webob.exc.HTTPForbidden,
@@ -1051,7 +1051,7 @@ class ServerActionsControllerTest(test.TestCase):
def test_create_image_no_name(self):
body = {
'create_image': {},
'createImage': {},
}
req = fakes.HTTPRequestV3.blank(self.url)
self.assertRaises(webob.exc.HTTPBadRequest,
@@ -1060,7 +1060,7 @@ class ServerActionsControllerTest(test.TestCase):
def test_create_image_blank_name(self):
body = {
'create_image': {
'createImage': {
'name': '',
}
}
@@ -1071,7 +1071,7 @@ class ServerActionsControllerTest(test.TestCase):
def test_create_image_bad_metadata(self):
body = {
'create_image': {
'createImage': {
'name': 'geoff',
'metadata': 'henry',
},
@@ -1089,7 +1089,7 @@ class ServerActionsControllerTest(test.TestCase):
self.stubs.Set(compute_api.API, 'snapshot', snapshot)
body = {
"create_image": {
"createImage": {
"name": "test_snapshot",
},
}

View File

@@ -1,5 +1,5 @@
{
"create_image" : {
"createImage" : {
"name" : "%(name)s",
"metadata": {
"meta_var": "meta_val"

View File

@@ -71,14 +71,13 @@ class ServersSampleAllExtensionJsonTest(ServersSampleJsonTest):
class ServersActionsJsonTest(ServersSampleBase):
sample_dir = 'servers'
def _test_server_action(self, uuid, action,
def _test_server_action(self, uuid, action, req_tpl,
subs=None, resp_tpl=None, code=202):
subs = subs or {}
subs.update({'action': action,
'glance_host': self._get_glance_host()})
response = self._do_post('servers/%s/action' % uuid,
'server-action-%s' % action.replace('_',
'-'),
req_tpl,
subs)
if resp_tpl:
subs.update(self._get_regexes())
@@ -90,11 +89,13 @@ class ServersActionsJsonTest(ServersSampleBase):
def test_server_reboot_hard(self):
uuid = self._post_server()
self._test_server_action(uuid, "reboot",
'server-action-reboot',
{"type": "HARD"})
def test_server_reboot_soft(self):
uuid = self._post_server()
self._test_server_action(uuid, "reboot",
'server-action-reboot',
{"type": "SOFT"})
def test_server_rebuild(self):
@@ -106,7 +107,9 @@ class ServersActionsJsonTest(ServersSampleBase):
'pass': 'seekr3t',
'hostid': '[a-f0-9]+',
}
self._test_server_action(uuid, 'rebuild', subs,
self._test_server_action(uuid, 'rebuild',
'server-action-rebuild',
subs,
'server-action-rebuild-resp')
def _test_server_rebuild_preserve_ephemeral(self, value):
@@ -142,21 +145,25 @@ class ServersActionsJsonTest(ServersSampleBase):
self.flags(allow_resize_to_same_host=True)
uuid = self._post_server()
self._test_server_action(uuid, "resize",
'server-action-resize',
{"id": 2,
"host": self._get_host()})
return uuid
def test_server_revert_resize(self):
uuid = self.test_server_resize()
self._test_server_action(uuid, "revert_resize")
self._test_server_action(uuid, "revert_resize",
'server-action-revert-resize')
def test_server_confirm_resize(self):
uuid = self.test_server_resize()
self._test_server_action(uuid, "confirm_resize")
self._test_server_action(uuid, "confirm_resize",
'server-action-confirm-resize')
def test_server_create_image(self):
uuid = self._post_server()
self._test_server_action(uuid, 'create_image',
self._test_server_action(uuid, 'createImage',
'server-action-create-image',
{'name': 'foo-image'})
@@ -177,4 +184,4 @@ class ServerStartStopJsonTest(ServersSampleBase):
def test_server_stop(self):
uuid = self._post_server()
self._test_server_action(uuid, 'os-stop', 'server-action-stop')
self._test_server_action(uuid, 'os-stop', 'server-action-stop')