From 843af52d49554f15c13e5617b9eb672c35c7fe51 Mon Sep 17 00:00:00 2001 From: Alessandro Tagliapietra Date: Tue, 11 Sep 2012 19:39:13 +0200 Subject: Check flavor id on resize. Actually it checks for memory size changes so you can't change just cpu or hdd when resizing instances. Fixes bug 1049195 Change-Id: I793d19dbf5f1d89d365e63ab61b4edb983fdb11c --- nova/api/openstack/compute/servers.py | 4 ++-- nova/compute/api.py | 7 ++----- nova/exception.py | 4 ++-- nova/tests/compute/test_compute.py | 4 ++-- 4 files changed, 8 insertions(+), 11 deletions(-) diff --git a/nova/api/openstack/compute/servers.py b/nova/api/openstack/compute/servers.py index fc4905a11..ba23cb50b 100644 --- a/nova/api/openstack/compute/servers.py +++ b/nova/api/openstack/compute/servers.py @@ -949,8 +949,8 @@ class Controller(wsgi.Controller): except exception.FlavorNotFound: msg = _("Unable to locate requested flavor.") raise exc.HTTPBadRequest(explanation=msg) - except exception.CannotResizeToSameSize: - msg = _("Resize requires a change in size.") + except exception.CannotResizeToSameFlavor: + msg = _("Resize requires a flavor change.") raise exc.HTTPBadRequest(explanation=msg) except exception.InstanceInvalidState as state_error: common.raise_http_conflict_for_instance_invalid_state(state_error, diff --git a/nova/compute/api.py b/nova/compute/api.py index 95ad4b7d0..230c55eae 100644 --- a/nova/compute/api.py +++ b/nova/compute/api.py @@ -1580,11 +1580,8 @@ class API(base.Base): # NOTE(markwash): look up the image early to avoid auth problems later image = self.image_service.show(context, instance['image_ref']) - current_memory_mb = current_instance_type['memory_mb'] - new_memory_mb = new_instance_type['memory_mb'] - - if (current_memory_mb == new_memory_mb) and flavor_id: - raise exception.CannotResizeToSameSize() + if same_instance_type and flavor_id: + raise exception.CannotResizeToSameFlavor() # ensure there is sufficient headroom for upsizes deltas = self._upsize_quota_delta(context, new_instance_type, diff --git a/nova/exception.py b/nova/exception.py index 1f51a08b5..ad90559bb 100644 --- a/nova/exception.py +++ b/nova/exception.py @@ -909,8 +909,8 @@ class PasteAppNotFound(NovaException): message = _("Could not load paste app '%(name)s' from %(path)s") -class CannotResizeToSameSize(NovaException): - message = _("When resizing, instances must change size!") +class CannotResizeToSameFlavor(NovaException): + message = _("When resizing, instances must change flavor!") class ImageTooLarge(NovaException): diff --git a/nova/tests/compute/test_compute.py b/nova/tests/compute/test_compute.py index f47a5b99d..34deaed3b 100644 --- a/nova/tests/compute/test_compute.py +++ b/nova/tests/compute/test_compute.py @@ -3422,7 +3422,7 @@ class ComputeAPITestCase(BaseTestCase): self.compute.terminate_instance(context, instance=instance) - def test_resize_same_size_fails(self): + def test_resize_same_flavor_fails(self): """Ensure invalid flavors raise""" context = self.context.elevated() instance = self._create_fake_instance() @@ -3431,7 +3431,7 @@ class ComputeAPITestCase(BaseTestCase): self.compute.run_instance(self.context, instance=instance) - self.assertRaises(exception.CannotResizeToSameSize, + self.assertRaises(exception.CannotResizeToSameFlavor, self.compute_api.resize, context, instance, 1) self.compute.terminate_instance(context, instance=instance) -- cgit