summaryrefslogtreecommitdiff
path: root/ironic
diff options
context:
space:
mode:
authorZuul <zuul@review.opendev.org>2022-03-02 23:04:26 +0000
committerGerrit Code Review <review@openstack.org>2022-03-02 23:04:26 +0000
commitc7d88d64cbe5b1affbf81868686f2c1efcbd8217 (patch)
treedd3236bff817d4f8d8f181a4a038da2eb2b5dfbd /ironic
parent172da53cf38e6b0b9d79192b49e777798140e8a4 (diff)
parentdd1cb46f2b0146524f0cb4d3579ac5c5b9a6fa45 (diff)
downloadironic-c7d88d64cbe5b1affbf81868686f2c1efcbd8217.tar.gz
Merge "Fix prepare ramdisk for 'wait' states"
Diffstat (limited to 'ironic')
-rw-r--r--ironic/drivers/modules/ilo/boot.py18
-rw-r--r--ironic/drivers/modules/irmc/boot.py8
-rw-r--r--ironic/drivers/modules/redfish/boot.py9
-rw-r--r--ironic/drivers/utils.py21
4 files changed, 25 insertions, 31 deletions
diff --git a/ironic/drivers/modules/ilo/boot.py b/ironic/drivers/modules/ilo/boot.py
index 166499d29..5087e3998 100644
--- a/ironic/drivers/modules/ilo/boot.py
+++ b/ironic/drivers/modules/ilo/boot.py
@@ -374,14 +374,7 @@ class IloVirtualMediaBoot(base.BootInterface):
"""
node = task.node
- # NOTE(TheJulia): If this method is being called by something
- # aside from deployment, clean and rescue, such as conductor takeover,
- # we should treat this as a no-op and move on otherwise we would
- # modify the state of the node due to virtual media operations.
- if node.provision_state not in (states.DEPLOYING,
- states.CLEANING,
- states.RESCUING,
- states.INSPECTING):
+ if not driver_utils.need_prepare_ramdisk(node):
return
prepare_node_for_deploy(task)
@@ -962,14 +955,7 @@ class IloUefiHttpsBoot(base.BootInterface):
:raises: IloOperationError, if some operation on iLO failed.
"""
node = task.node
- # NOTE(TheJulia): If this method is being called by something
- # aside from deployment, clean and rescue, such as conductor takeover,
- # we should treat this as a no-op and move on otherwise we would
- # modify the state of the node due to virtual media operations.
- if node.provision_state not in (states.DEPLOYING,
- states.CLEANING,
- states.RESCUING,
- states.INSPECTING):
+ if not driver_utils.need_prepare_ramdisk(node):
return
prepare_node_for_deploy(task)
diff --git a/ironic/drivers/modules/irmc/boot.py b/ironic/drivers/modules/irmc/boot.py
index 7438137f7..1195a0670 100644
--- a/ironic/drivers/modules/irmc/boot.py
+++ b/ironic/drivers/modules/irmc/boot.py
@@ -971,13 +971,7 @@ class IRMCVirtualMediaBoot(base.BootInterface, IRMCVolumeBootMixIn):
:raises: IRMCOperationError, if some operation on iRMC fails.
"""
- # NOTE(TheJulia): If this method is being called by something
- # aside from deployment, clean and rescue, such as conductor takeover,
- # we should treat this as a no-op and move on otherwise we would
- # modify the state of the node due to virtual media operations.
- if task.node.provision_state not in (states.DEPLOYING,
- states.CLEANING,
- states.RESCUING):
+ if not driver_utils.need_prepare_ramdisk(task.node):
return
# NOTE(tiendc): Before deploying, we need to backup BIOS config
diff --git a/ironic/drivers/modules/redfish/boot.py b/ironic/drivers/modules/redfish/boot.py
index 47b85cc25..55c826fc6 100644
--- a/ironic/drivers/modules/redfish/boot.py
+++ b/ironic/drivers/modules/redfish/boot.py
@@ -468,14 +468,7 @@ class RedfishVirtualMediaBoot(base.BootInterface):
operation failed on the node.
"""
node = task.node
- # NOTE(TheJulia): If this method is being called by something
- # aside from deployment, clean and rescue, such as conductor takeover,
- # we should treat this as a no-op and move on otherwise we would
- # modify the state of the node due to virtual media operations.
- if node.provision_state not in (states.DEPLOYING,
- states.CLEANING,
- states.RESCUING,
- states.INSPECTING):
+ if not driver_utils.need_prepare_ramdisk(node):
return
d_info = _parse_driver_info(node)
diff --git a/ironic/drivers/utils.py b/ironic/drivers/utils.py
index b90660b59..5e1596eb4 100644
--- a/ironic/drivers/utils.py
+++ b/ironic/drivers/utils.py
@@ -23,6 +23,7 @@ from oslo_utils import timeutils
from ironic.common import exception
from ironic.common.i18n import _
+from ironic.common import states
from ironic.common import swift
from ironic.conductor import utils
from ironic.drivers import base
@@ -449,3 +450,23 @@ def get_agent_kernel_ramdisk(node, mode='deploy', deprecated_prefix=None):
def get_agent_iso(node, mode='deploy', deprecated_prefix=None):
"""Get the agent ISO image."""
return get_field(node, f'{mode}_iso', deprecated_prefix)
+
+
+def need_prepare_ramdisk(node):
+ """Check if node needs preparing ramdisk
+
+ :param node: Node to check for
+ :returns: True if need to prepare ramdisk, otherwise False
+ """
+ # NOTE(TheJulia): If current node provisioning is something aside from
+ # deployment, clean, rescue or inspect such as conductor takeover,
+ # we should treat this as a no-op and move on otherwise we would
+ # modify the state of the node due to virtual media operations.
+ return node.provision_state in (states.DEPLOYING,
+ states.DEPLOYWAIT,
+ states.CLEANING,
+ states.CLEANWAIT,
+ states.RESCUING,
+ states.RESCUEWAIT,
+ states.INSPECTING,
+ states.INSPECTWAIT)