summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZuul <zuul@review.opendev.org>2022-02-10 12:03:54 +0000
committerGerrit Code Review <review@openstack.org>2022-02-10 12:03:54 +0000
commitafd3fcea2396bff24c24b222e55981ae1b66151e (patch)
tree427921f8092e623b89b64d2d318d6a6f74ae0b74
parent34a582a0130c7a0eb1498638776351ee12e3eb1c (diff)
parent69e6152ac3824aed6531ca0e820d6c1ba178f1f0 (diff)
downloadironic-afd3fcea2396bff24c24b222e55981ae1b66151e.tar.gz
Merge "Add idrac-redfish clean steps to not require ramdisk"
-rw-r--r--ironic/drivers/modules/deploy_utils.py5
-rw-r--r--ironic/drivers/modules/drac/management.py15
-rw-r--r--ironic/drivers/modules/drac/raid.py12
-rw-r--r--ironic/tests/unit/drivers/modules/drac/test_raid.py4
-rw-r--r--releasenotes/notes/idrac-redfish-clean-steps-not-require-ramdisk-699e169af39b0dd6.yaml5
5 files changed, 32 insertions, 9 deletions
diff --git a/ironic/drivers/modules/deploy_utils.py b/ironic/drivers/modules/deploy_utils.py
index 812d00775..e1aabb500 100644
--- a/ironic/drivers/modules/deploy_utils.py
+++ b/ironic/drivers/modules/deploy_utils.py
@@ -1430,7 +1430,10 @@ def reboot_to_finish_step(task):
:returns: states.CLEANWAIT if cleaning operation in progress
or states.DEPLOYWAIT if deploy operation in progress.
"""
- prepare_agent_boot(task)
+ disable_ramdisk = task.node.driver_internal_info.get(
+ 'cleaning_disable_ramdisk')
+ if not disable_ramdisk:
+ prepare_agent_boot(task)
manager_utils.node_power_action(task, states.REBOOT)
return get_async_step_return_state(task.node)
diff --git a/ironic/drivers/modules/drac/management.py b/ironic/drivers/modules/drac/management.py
index a4278731f..f4c77662a 100644
--- a/ironic/drivers/modules/drac/management.py
+++ b/ironic/drivers/modules/drac/management.py
@@ -362,7 +362,8 @@ class DracRedfishManagement(redfish_management.RedfishManagement):
**IMPORT_CONFIGURATION_ARGSINFO}
@base.deploy_step(priority=0, argsinfo=EXPORT_CONFIGURATION_ARGSINFO)
- @base.clean_step(priority=0, argsinfo=EXPORT_CONFIGURATION_ARGSINFO)
+ @base.clean_step(priority=0, argsinfo=EXPORT_CONFIGURATION_ARGSINFO,
+ requires_ramdisk=False)
def export_configuration(self, task, export_configuration_location):
"""Export the configuration of the server.
@@ -411,7 +412,8 @@ class DracRedfishManagement(redfish_management.RedfishManagement):
{'node': task.node.uuid}))
@base.deploy_step(priority=0, argsinfo=IMPORT_CONFIGURATION_ARGSINFO)
- @base.clean_step(priority=0, argsinfo=IMPORT_CONFIGURATION_ARGSINFO)
+ @base.clean_step(priority=0, argsinfo=IMPORT_CONFIGURATION_ARGSINFO,
+ requires_ramdisk=False)
def import_configuration(self, task, import_configuration_location):
"""Import and apply the configuration to the server.
@@ -457,7 +459,8 @@ class DracRedfishManagement(redfish_management.RedfishManagement):
return deploy_utils.reboot_to_finish_step(task)
@base.clean_step(priority=0,
- argsinfo=IMPORT_EXPORT_CONFIGURATION_ARGSINFO)
+ argsinfo=IMPORT_EXPORT_CONFIGURATION_ARGSINFO,
+ requires_ramdisk=False)
@base.deploy_step(priority=0,
argsinfo=IMPORT_EXPORT_CONFIGURATION_ARGSINFO)
def import_export_configuration(self, task, import_configuration_location,
@@ -612,7 +615,7 @@ class DracRedfishManagement(redfish_management.RedfishManagement):
@METRICS.timer('DracRedfishManagement.clear_job_queue')
@base.verify_step(priority=0)
- @base.clean_step(priority=0)
+ @base.clean_step(priority=0, requires_ramdisk=False)
def clear_job_queue(self, task):
"""Clear iDRAC job queue.
@@ -626,7 +629,7 @@ class DracRedfishManagement(redfish_management.RedfishManagement):
@METRICS.timer('DracRedfishManagement.reset_idrac')
@base.verify_step(priority=0)
- @base.clean_step(priority=0)
+ @base.clean_step(priority=0, requires_ramdisk=False)
def reset_idrac(self, task):
"""Reset the iDRAC.
@@ -642,7 +645,7 @@ class DracRedfishManagement(redfish_management.RedfishManagement):
@METRICS.timer('DracRedfishManagement.known_good_state')
@base.verify_step(priority=0)
- @base.clean_step(priority=0)
+ @base.clean_step(priority=0, requires_ramdisk=False)
def known_good_state(self, task):
"""Reset iDRAC to known good state.
diff --git a/ironic/drivers/modules/drac/raid.py b/ironic/drivers/modules/drac/raid.py
index d4e633f9c..c2a063ec0 100644
--- a/ironic/drivers/modules/drac/raid.py
+++ b/ironic/drivers/modules/drac/raid.py
@@ -27,6 +27,7 @@ import tenacity
from ironic.common import exception
from ironic.common.i18n import _
from ironic.common import raid as raid_common
+from ironic.common import states
from ironic.conductor import periodics
from ironic.conductor import utils as manager_utils
from ironic.conf import CONF
@@ -1171,6 +1172,13 @@ def _wait_till_realtime_ready(task):
:raises RedfishError: If can't find OEM extension or it fails to
execute
"""
+ # If running without IPA, check that system is ON, if not, turn it on
+ disable_ramdisk = task.node.driver_internal_info.get(
+ 'cleaning_disable_ramdisk')
+ power_state = task.driver.power.get_power_state(task)
+ if disable_ramdisk and power_state == states.POWER_OFF:
+ task.driver.power.set_power_state(task, states.POWER_ON)
+
try:
_retry_till_realtime_ready(task)
except tenacity.RetryError:
@@ -1238,7 +1246,7 @@ class DracRedfishRAID(redfish_raid.RedfishRAID):
),
'required': False,
}
- })
+ }, requires_ramdisk=False)
def create_configuration(self, task, create_root_volume=True,
create_nonroot_volumes=True,
delete_existing=False):
@@ -1267,7 +1275,7 @@ class DracRedfishRAID(redfish_raid.RedfishRAID):
task, create_root_volume, create_nonroot_volumes,
delete_existing)
- @base.clean_step(priority=0)
+ @base.clean_step(priority=0, requires_ramdisk=False)
@base.deploy_step(priority=0)
def delete_configuration(self, task):
"""Delete RAID configuration on the node.
diff --git a/ironic/tests/unit/drivers/modules/drac/test_raid.py b/ironic/tests/unit/drivers/modules/drac/test_raid.py
index fabfbcc97..780d2893c 100644
--- a/ironic/tests/unit/drivers/modules/drac/test_raid.py
+++ b/ironic/tests/unit/drivers/modules/drac/test_raid.py
@@ -2286,8 +2286,12 @@ class DracRedfishRAIDTestCase(test_utils.BaseDracTest):
@mock.patch.object(drac_raid, '_retry_till_realtime_ready', autospec=True)
def test__wait_till_realtime_ready(self, mock_ready):
+ self.node.set_driver_internal_info('cleaning_disable_ramdisk', True)
task = mock.Mock(node=self.node, context=self.context)
+ task.driver.power.get_power_state.return_value = states.POWER_OFF
drac_raid._wait_till_realtime_ready(task)
+ task.driver.power.set_power_state.assert_called_once_with(
+ task, states.POWER_ON)
mock_ready.assert_called_once_with(task)
@mock.patch.object(drac_raid, 'LOG', autospec=True)
diff --git a/releasenotes/notes/idrac-redfish-clean-steps-not-require-ramdisk-699e169af39b0dd6.yaml b/releasenotes/notes/idrac-redfish-clean-steps-not-require-ramdisk-699e169af39b0dd6.yaml
new file mode 100644
index 000000000..cfefc8128
--- /dev/null
+++ b/releasenotes/notes/idrac-redfish-clean-steps-not-require-ramdisk-699e169af39b0dd6.yaml
@@ -0,0 +1,5 @@
+---
+features:
+ - |
+ Adds support for ``idrac-redfish`` RAID and management clean steps to be
+ run without IPA when disabling ramdisk during cleaning.