Merge "[ironic] Fix rebooting instance"

This commit is contained in:
Zuul 2024-05-08 01:10:34 +00:00 committed by Gerrit Code Review
commit 95bfa492e9
2 changed files with 20 additions and 16 deletions

View File

@ -1823,7 +1823,7 @@ class IronicDriverTestCase(test.NoDBTestCase):
instance = fake_instance.fake_instance_obj(self.ctx, node=node.id)
self.driver.reboot(self.ctx, instance, None, 'HARD')
self.mock_conn.set_node_power_state.assert_called_once_with(
node.id, 'reboot',
node.id, _node.PowerAction.REBOOT,
)
@mock.patch.object(ironic_driver.IronicDriver,
@ -1858,7 +1858,7 @@ class IronicDriverTestCase(test.NoDBTestCase):
instance = fake_instance.fake_instance_obj(self.ctx, node=node.id)
self.driver.reboot(self.ctx, instance, None, 'SOFT')
self.mock_conn.set_node_power_state.assert_called_once_with(
node.id, 'soft reboot',
node.id, _node.PowerAction.SOFT_REBOOT,
)
@mock.patch.object(loopingcall, 'FixedIntervalLoopingCall')
@ -1878,8 +1878,8 @@ class IronicDriverTestCase(test.NoDBTestCase):
self.driver.reboot(self.ctx, instance, None, 'SOFT')
self.mock_conn.set_node_power_state.assert_has_calls(
[
mock.call(node.id, 'soft reboot'),
mock.call(node.id, 'reboot'),
mock.call(node.id, _node.PowerAction.SOFT_REBOOT),
mock.call(node.id, _node.PowerAction.REBOOT),
]
)
@ -1916,7 +1916,7 @@ class IronicDriverTestCase(test.NoDBTestCase):
)
self.mock_conn.set_node_power_state.assert_called_once_with(
node.id, 'power on',
node.id, _node.PowerAction.POWER_ON,
)
@mock.patch.object(loopingcall, 'FixedIntervalLoopingCall')
@ -1937,7 +1937,7 @@ class IronicDriverTestCase(test.NoDBTestCase):
self._test_power_off()
self.mock_conn.set_node_power_state.assert_called_once_with(
node.id, 'power off',
node.id, _node.PowerAction.POWER_OFF,
)
@mock.patch.object(ironic_driver.IronicDriver,
@ -1950,7 +1950,7 @@ class IronicDriverTestCase(test.NoDBTestCase):
self._test_power_off(timeout=30)
self.mock_conn.set_node_power_state.assert_called_once_with(
node.id, 'soft power off', timeout=30,
node.id, _node.PowerAction.SOFT_POWER_OFF, timeout=30,
)
@mock.patch.object(ironic_driver.IronicDriver,
@ -1965,8 +1965,8 @@ class IronicDriverTestCase(test.NoDBTestCase):
self._test_power_off(timeout=30)
expected_calls = [
mock.call(node.id, 'soft power off', timeout=30),
mock.call(node.id, 'power off'),
mock.call(node.id, _node.PowerAction.SOFT_POWER_OFF, timeout=30),
mock.call(node.id, _node.PowerAction.POWER_OFF),
]
self.assertEqual(
len(expected_calls),
@ -1983,8 +1983,8 @@ class IronicDriverTestCase(test.NoDBTestCase):
self._test_power_off(timeout=30)
expected_calls = [
mock.call(node.id, 'soft power off', timeout=30),
mock.call(node.id, 'power off'),
mock.call(node.id, _node.PowerAction.SOFT_POWER_OFF, timeout=30),
mock.call(node.id, _node.PowerAction.POWER_OFF),
]
self.assertEqual(
len(expected_calls),

View File

@ -26,6 +26,7 @@ import tempfile
import time
from urllib import parse as urlparse
from openstack.baremetal.v1.node import PowerAction
from openstack import exceptions as sdk_exc
from openstack import utils as sdk_utils
from oslo_log import log as logging
@ -1407,7 +1408,7 @@ class IronicDriver(virt_driver.ComputeDriver):
try:
self.ironic_connection.set_node_power_state(
node.id,
'soft reboot',
PowerAction.SOFT_REBOOT,
)
hard = False
except sdk_exc.BadRequestException as exc:
@ -1417,7 +1418,8 @@ class IronicDriver(virt_driver.ComputeDriver):
instance=instance)
if hard:
self.ironic_connection.set_node_power_state(node.id, 'reboot')
self.ironic_connection.set_node_power_state(
node.id, PowerAction.REBOOT)
timer = loopingcall.FixedIntervalLoopingCall(
self._wait_for_power_state, instance, 'reboot')
@ -1449,7 +1451,7 @@ class IronicDriver(virt_driver.ComputeDriver):
# polling interval
self.ironic_connection.set_node_power_state(
node.id,
'soft power off',
PowerAction.SOFT_POWER_OFF,
timeout=timeout,
)
@ -1481,7 +1483,8 @@ class IronicDriver(virt_driver.ComputeDriver):
'reason': e},
instance=instance)
self.ironic_connection.set_node_power_state(node.id, 'power off')
self.ironic_connection.set_node_power_state(
node.id, PowerAction.POWER_OFF)
timer = loopingcall.FixedIntervalLoopingCall(
self._wait_for_power_state, instance, 'power off')
timer.start(interval=CONF.ironic.api_retry_interval).wait()
@ -1506,7 +1509,8 @@ class IronicDriver(virt_driver.ComputeDriver):
"""
LOG.debug('Power on called for instance', instance=instance)
node = self._validate_instance_and_node(instance)
self.ironic_connection.set_node_power_state(node.id, 'power on')
self.ironic_connection.set_node_power_state(
node.id, PowerAction.POWER_ON)
timer = loopingcall.FixedIntervalLoopingCall(
self._wait_for_power_state, instance, 'power on')