Merge "Fix prepare ramdisk for 'wait' states" into stable/xena

This commit is contained in:
Zuul 2022-07-15 00:21:37 +00:00 committed by Gerrit Code Review
commit b789ab825a
4 changed files with 25 additions and 31 deletions

View File

@ -376,14 +376,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)
@ -976,14 +969,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)

View File

@ -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

View File

@ -483,14 +483,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)

View File

@ -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
@ -452,3 +453,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)