Merge "VMware: fix resume_state_on_host_boot"

This commit is contained in:
Jenkins
2015-02-10 04:50:09 +00:00
committed by Gerrit Code Review
3 changed files with 31 additions and 44 deletions

View File

@@ -1398,39 +1398,33 @@ class VMwareAPIVMTestCase(test.NoDBTestCase):
self.assertRaises(exception.InstanceNotFound, self.conn.power_off,
self.instance)
def test_resume_state_on_host_boot(self):
self._create_vm()
self.mox.StubOutWithMock(vm_util, 'get_vm_state_from_name')
self.mox.StubOutWithMock(self.conn, "reboot")
vm_util.get_vm_state_from_name(mox.IgnoreArg(),
self.instance['uuid']).AndReturn("poweredOff")
self.conn.reboot(self.context, self.instance, 'network_info',
'hard', None)
self.mox.ReplayAll()
@mock.patch.object(driver.VMwareVCDriver, 'reboot')
@mock.patch.object(vm_util, 'get_vm_state',
return_value='poweredOff')
def test_resume_state_on_host_boot(self, mock_get_vm_state,
mock_reboot):
self._create_instance()
self.conn.resume_state_on_host_boot(self.context, self.instance,
'network_info')
'network_info')
mock_get_vm_state.assert_called_once_with(self.conn._session,
self.instance)
mock_reboot.assert_called_once_with(self.context, self.instance,
'network_info', 'hard', None)
def test_resume_state_on_host_boot_no_reboot_1(self):
"""Don't call reboot on instance which is poweredon."""
self._create_vm()
self.mox.StubOutWithMock(vm_util, 'get_vm_state_from_name')
self.mox.StubOutWithMock(self.conn, 'reboot')
vm_util.get_vm_state_from_name(mox.IgnoreArg(),
self.instance['uuid']).AndReturn("poweredOn")
self.mox.ReplayAll()
self.conn.resume_state_on_host_boot(self.context, self.instance,
'network_info')
def test_resume_state_on_host_boot_no_reboot_2(self):
"""Don't call reboot on instance which is suspended."""
self._create_vm()
self.mox.StubOutWithMock(vm_util, 'get_vm_state_from_name')
self.mox.StubOutWithMock(self.conn, 'reboot')
vm_util.get_vm_state_from_name(mox.IgnoreArg(),
self.instance['uuid']).AndReturn("suspended")
self.mox.ReplayAll()
self.conn.resume_state_on_host_boot(self.context, self.instance,
'network_info')
def test_resume_state_on_host_boot_no_reboot(self):
self._create_instance()
for state in ['poweredOn', 'suspended']:
with contextlib.nested(
mock.patch.object(driver.VMwareVCDriver, 'reboot'),
mock.patch.object(vm_util, 'get_vm_state',
return_value=state)
) as (mock_reboot, mock_get_vm_state):
self.conn.resume_state_on_host_boot(self.context,
self.instance,
'network_info')
mock_get_vm_state.assert_called_once_with(self.conn._session,
self.instance)
self.assertFalse(mock_reboot.called)
def destroy_rescued(self, fake_method):
self._rescue()

View File

@@ -237,17 +237,10 @@ class VMwareVCDriver(driver.ComputeDriver):
"""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.warning(_LW('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
state = vm_util.get_vm_state(self._session, instance)
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.

View File

@@ -982,8 +982,8 @@ def get_host_name_for_vm(session, instance):
host_ref, "HostSystem", "name")
def get_vm_state_from_name(session, vm_name):
vm_ref = get_vm_ref_from_name(session, vm_name)
def get_vm_state(session, instance):
vm_ref = get_vm_ref(session, instance)
vm_state = session._call_method(vim_util, "get_dynamic_property",
vm_ref, "VirtualMachine", "runtime.powerState")
return vm_state