summaryrefslogtreecommitdiffstats
path: root/nova/compute
diff options
context:
space:
mode:
Diffstat (limited to 'nova/compute')
-rw-r--r--nova/compute/api.py11
1 files changed, 11 insertions, 0 deletions
diff --git a/nova/compute/api.py b/nova/compute/api.py
index 83ea98c8f..dc90748a4 100644
--- a/nova/compute/api.py
+++ b/nova/compute/api.py
@@ -2142,6 +2142,14 @@ class API(base.Base):
@check_instance_state(vm_state=[vm_states.ACTIVE, vm_states.STOPPED])
def rescue(self, context, instance, rescue_password=None):
"""Rescue the given instance."""
+ # TODO(ndipanov): This check can be generalized as a decorator to
+ # check for valid combinations of src and dests - for now check
+ # if it's booted from volume only
+ if self.is_volume_backed_instance(context, instance, None):
+ reason = _("Cannot rescue a volume-backed instance")
+ raise exception.InstanceNotRescuable(instance_id=instance['uuid'],
+ reason=reason)
+
self.update(context,
instance,
vm_state=vm_states.ACTIVE,
@@ -2414,6 +2422,9 @@ class API(base.Base):
instance['uuid'])
def is_volume_backed_instance(self, context, instance, bdms):
+ if not instance['image_ref']:
+ return True
+
if bdms is None:
bdms = self.get_instance_bdms(context, instance)