Merge "reboot stopped vms in ovirt"

This commit is contained in:
Zuul 2018-04-18 16:19:35 +00:00 committed by Gerrit Code Review
commit 0e1be8bb81
4 changed files with 35 additions and 10 deletions

View File

@ -218,7 +218,11 @@ class oVirtPower(base.PowerInterface):
elif target_state == states.POWER_ON:
vm.start()
elif target_state == states.REBOOT:
vm.reboot()
status = vm.get().status.value
if status == 'down':
vm.start()
else:
vm.reboot()
else:
msg = _("'set_power_state' called with invalid power "
"state '%s'") % target_state
@ -240,15 +244,7 @@ class oVirtPower(base.PowerInterface):
:raises: ovirtsdk4.Error, if error encountered from
oVirt operation.
"""
driver_info = _parse_driver_info(task.node)
vm_name = driver_info['ovirt_vm_name']
vm = _getvm(driver_info)
try:
vm.reboot()
except sdk.Error as e:
LOG.error("Could not restart VM vm %(name)s "
"got error: %(error)s", {'name': vm_name, 'error': e})
raise staging_exception.oVirtError(err=e)
self.set_power_state(task, states.REBOOT, timeout=timeout)
class oVirtManagement(base.ManagementInterface):

View File

@ -138,3 +138,19 @@ class oVirtDriverTestCase(db_base.DbTestCase):
task.driver.management.set_boot_device(task, boot_devices.DISK)
mock_power.assert_called_once_with(task.driver.management, task,
boot_devices.DISK)
@mock.patch.object(ovirt_power, '_getvm')
def test_set_reboot_when_down(self, mock_vm):
mock_vm.return_value.get.return_value.status.value = 'down'
with task_manager.acquire(self.context, self.node.uuid) as task:
task.driver.power.reboot(task)
mock_vm.return_value.start.assert_called_once()
@mock.patch.object(ovirt_power, '_getvm')
def test_set_reboot_when_up(self, mock_vm):
mock_vm.return_value.get.return_value.status.value = 'up'
with task_manager.acquire(self.context, self.node.uuid) as task:
task.driver.power.reboot(task)
mock_vm.return_value.reboot.assert_called_once()

View File

@ -29,3 +29,8 @@ LIBVIRT_SPEC = (
'VIR_CRED_AUTHNAME',
'VIR_CRED_PASSPHRASE',
)
# ovirt
OVIRT4_SPEC = (
'types',
)

View File

@ -62,3 +62,11 @@ if not libvirt:
if 'ironic_staging_drivers.libvirt.power' in sys.modules:
six.moves.reload_module(
sys.modules['ironic_staging_drivers.libvirt.power'])
# attempt to load the external 'ovirtsdk4' library, which is required by
# the optional drivers.modules.ovirt module
ovirtsdk4 = importutils.try_import('ovirtsdk4')
if not ovirtsdk4:
ov = mock.MagicMock(spec_set=mock_specs.OVIRT4_SPEC)
sys.modules['ovirtsdk4'] = ov
sys.modules['ovirtsdk4.types'] = ov.types