summaryrefslogtreecommitdiffstats
path: root/nova/virt
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2013-07-01 17:44:50 +0000
committerGerrit Code Review <review@openstack.org>2013-07-01 17:44:50 +0000
commit95e1a091bb7a83a4d76dabba41a33ccb609d8dbe (patch)
tree4a9847b72833117d2f7ee8abf8f59d02b536ca04 /nova/virt
parentf2d4aefca0c2ce360717743476c74ecb7cfff235 (diff)
parent115a5957560bfc8a0bebe5ca4d723b71f2450821 (diff)
Merge "Add resume state on host boot function to vmware Hyper."
Diffstat (limited to 'nova/virt')
-rwxr-xr-xnova/virt/vmwareapi/driver.py22
-rw-r--r--nova/virt/vmwareapi/vm_util.py7
2 files changed, 29 insertions, 0 deletions
diff --git a/nova/virt/vmwareapi/driver.py b/nova/virt/vmwareapi/driver.py
index 8389b2c3d..ef06d447a 100755
--- a/nova/virt/vmwareapi/driver.py
+++ b/nova/virt/vmwareapi/driver.py
@@ -229,6 +229,28 @@ class VMwareESXDriver(driver.ComputeDriver):
"""Power on the specified instance."""
self._vmops._power_on(instance)
+ def resume_state_on_host_boot(self, context, instance, network_info,
+ block_device_info=None):
+ """resume guest state when a host is booted."""
+ # Check if the instance is running already and avoid doing
+ # anything if it is.
+ instances = self.list_instances()
+ if instance['uuid'] not in instances:
+ LOG.warn(_('Instance cannot be found in host, or in an unknown'
+ 'state.'), instance=instance)
+ else:
+ state = vm_util.get_vm_state_from_name(self._session,
+ instance['uuid'])
+ ignored_states = ['poweredon', 'suspended']
+
+ if state.lower() in ignored_states:
+ return
+ # Instance is not up and could be in an unknown state.
+ # Be as absolute as possible about getting it back into
+ # a known and running state.
+ self.reboot(context, instance, network_info, 'hard',
+ block_device_info)
+
def poll_rebooting_instances(self, timeout, instances):
"""Poll for rebooting instances."""
self._vmops.poll_rebooting_instances(timeout, instances)
diff --git a/nova/virt/vmwareapi/vm_util.py b/nova/virt/vmwareapi/vm_util.py
index d8e063cad..94da5c677 100644
--- a/nova/virt/vmwareapi/vm_util.py
+++ b/nova/virt/vmwareapi/vm_util.py
@@ -632,6 +632,13 @@ def get_host_name_from_host_ref(host_ref):
return p.val
+def get_vm_state_from_name(session, vm_name):
+ vm_ref = get_vm_ref_from_name(session, vm_name)
+ vm_state = session._call_method(vim_util, "get_dynamic_property",
+ vm_ref, "VirtualMachine", "runtime.powerState")
+ return vm_state
+
+
def get_cluster_ref_from_name(session, cluster_name):
"""Get reference to the cluster with the name specified."""
cls = session._call_method(vim_util, "get_objects",