Merge "Update kernel_id and ramdisk_id while rebuilding instance" into stable/folsom

This commit is contained in:
Jenkins 2012-11-27 03:55:34 +00:00 committed by Gerrit Code Review
commit a0e18d637f
2 changed files with 78 additions and 1 deletions

View File

@ -1436,6 +1436,12 @@ class API(base.Base):
if instance_type['root_gb'] < int(image.get('min_disk') or 0):
raise exception.InstanceTypeDiskTooSmall()
(image_service, image_id) = glance.get_remote_image_service(context,
image_href)
image = image_service.show(context, image_id)
kernel_id, ramdisk_id = self._handle_kernel_and_ramdisk(
context, None, None, image, image_service)
def _reset_image_metadata():
"""
Remove old image properties that we're storing as instance
@ -1469,7 +1475,9 @@ class API(base.Base):
expected_task_state=None,
# Unfortunately we need to set image_ref early,
# so API users can see it.
image_ref=image_href, progress=0, **kwargs)
image_ref=image_href, kernel_id=kernel_id or "",
ramdisk_id=ramdisk_id or "",
progress=0, **kwargs)
# On a rebuild, since we're potentially changing images, we need to
# wipe out the old image properties that we're storing as instance

View File

@ -462,6 +462,7 @@ class ServerActionsControllerTest(test.TestCase):
context = req.environ['nova.context']
update(context, mox.IgnoreArg(),
image_ref=self._image_href,
kernel_id="", ramdisk_id="",
task_state=task_states.REBUILDING,
expected_task_state=None,
progress=0, **attributes).AndReturn(
@ -470,6 +471,74 @@ class ServerActionsControllerTest(test.TestCase):
self.controller._action_rebuild(req, FAKE_UUID, body)
def test_rebuild_when_kernel_not_exists(self):
def return_image_meta(*args, **kwargs):
image_meta_table = {
'2': {'id': 2, 'status': 'active', 'container_format': 'ari'},
'155d900f-4e14-4e4c-a73d-069cbf4541e6':
{'id': 3, 'status': 'active', 'container_format': 'raw',
'properties': {'kernel_id': 1, 'ramdisk_id': 2}},
}
image_id = args[2]
try:
image_meta = image_meta_table[str(image_id)]
except KeyError:
raise exception.ImageNotFound(image_id=image_id)
return image_meta
self.stubs.Set(nova.tests.image.fake._FakeImageService,
'show', return_image_meta)
body = {
"rebuild": {
"imageRef": "155d900f-4e14-4e4c-a73d-069cbf4541e6",
},
}
req = fakes.HTTPRequest.blank(self.url)
self.assertRaises(webob.exc.HTTPBadRequest,
self.controller._action_rebuild,
req, FAKE_UUID, body)
def test_rebuild_proper_kernel_ram(self):
instance_meta = {'kernel_id': None, 'ramdisk_id': None}
def fake_show(*args, **kwargs):
instance_meta['kernel_id'] = kwargs.get('kernel_id')
instance_meta['ramdisk_id'] = kwargs.get('ramdisk_id')
inst = fakes.stub_instance(INSTANCE_IDS[FAKE_UUID],
host='fake_host')
return inst
def return_image_meta(*args, **kwargs):
image_meta_table = {
'1': {'id': 1, 'status': 'active', 'container_format': 'aki'},
'2': {'id': 2, 'status': 'active', 'container_format': 'ari'},
'155d900f-4e14-4e4c-a73d-069cbf4541e6':
{'id': 3, 'status': 'active', 'container_format': 'raw',
'properties': {'kernel_id': 1, 'ramdisk_id': 2}},
}
image_id = args[2]
try:
image_meta = image_meta_table[str(image_id)]
except KeyError:
raise exception.ImageNotFound(image_id=image_id)
return image_meta
self.stubs.Set(nova.tests.image.fake._FakeImageService,
'show', return_image_meta)
self.stubs.Set(nova.compute.API, 'update', fake_show)
body = {
"rebuild": {
"imageRef": "155d900f-4e14-4e4c-a73d-069cbf4541e6",
},
}
req = fakes.HTTPRequest.blank(self.url)
self.controller._action_rebuild(req, FAKE_UUID, body).obj
self.assertEqual(instance_meta['kernel_id'], 1)
self.assertEqual(instance_meta['ramdisk_id'], 2)
def test_resize_server(self):
body = dict(resize=dict(flavorRef="http://localhost/3"))