reboot stopped vms in ovirt

When using ovirt driver,
make sure reboot starts stopped vms

Closes-Bug: #1752575
Story: 1752575

Change-Id: I851935a042c3e69e7e4ce72d6338ce2f77baa566
Signed-off-by: karmab <karimboumedhel@gmail.com>
This commit is contained in:
karmab 2018-03-01 14:09:40 +01:00 committed by Ilya Etingof
parent 3265d0002b
commit cd648ffd8e
4 changed files with 35 additions and 10 deletions

View File

@ -208,7 +208,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
@ -230,15 +234,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

@ -110,3 +110,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