From 45e8adc1df26f2b940603b2f85d54c0ffcfdfa66 Mon Sep 17 00:00:00 2001 From: Steve Baker Date: Tue, 30 Nov 2021 11:18:42 +1300 Subject: [PATCH] Move place_loaders_for_boot to boot driver __init__ Host preparation file writing is already done by the __init__ method of iPXEBoot. This change moves place_loaders_for_boot calls to iPXEBoot and PXEBoot to be consistent, and to only write the files when that driver is enabled. This will mean multiple writes of the same file when subclasses of these drivers are also enabled, but this overhead will be negligible. Change-Id: I7e17f4d1a54cd6c5d1a4bf006a0d42db8d123a46 --- ironic/conductor/base_manager.py | 11 +++-------- ironic/drivers/modules/ipxe.py | 4 ++++ ironic/drivers/modules/pxe.py | 6 ++++++ 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/ironic/conductor/base_manager.py b/ironic/conductor/base_manager.py index 935429a029..d53e6af1ee 100644 --- a/ironic/conductor/base_manager.py +++ b/ironic/conductor/base_manager.py @@ -31,7 +31,6 @@ from ironic.common import driver_factory from ironic.common import exception from ironic.common import hash_ring from ironic.common.i18n import _ -from ironic.common import pxe_utils from ironic.common import release_mappings as versions from ironic.common import rpc from ironic.common import states @@ -88,11 +87,9 @@ class BaseConductorManager(object): def prepare_host(self): """Prepares host for initialization - Prepares the conductor for basic operation by removing any - existing transitory node power states and reservations which - were previously held by this host. Once that has been completed, - bootloader assets, if configured, are staged for network (PXE) boot - operations. + Prepares the conductor for basic operation by removing any existing + transitory node power states and reservations which were previously + held by this host. Under normal operation, this is also when the initial database connectivity is established for the conductor's normal operation. @@ -112,8 +109,6 @@ class BaseConductorManager(object): self.dbapi.clear_node_target_power_state(self.host) # clear all locks held by this conductor before registering self.dbapi.clear_node_reservations_for_conductor(self.host) - pxe_utils.place_loaders_for_boot(CONF.pxe.tftp_root) - pxe_utils.place_loaders_for_boot(CONF.deploy.http_root) def init_host(self, admin_context=None): """Initialize the conductor host. diff --git a/ironic/drivers/modules/ipxe.py b/ironic/drivers/modules/ipxe.py index c807693966..5fe9116524 100644 --- a/ironic/drivers/modules/ipxe.py +++ b/ironic/drivers/modules/ipxe.py @@ -16,6 +16,7 @@ iPXE Boot Interface """ from ironic.common import pxe_utils +from ironic.conf import CONF from ironic.drivers import base from ironic.drivers.modules import pxe_base @@ -28,3 +29,6 @@ class iPXEBoot(pxe_base.PXEBaseMixin, base.BootInterface): def __init__(self): pxe_utils.create_ipxe_boot_script() + pxe_utils.place_loaders_for_boot(CONF.deploy.http_root) + # This is required to serve the iPXE binary via tftp + pxe_utils.place_loaders_for_boot(CONF.pxe.tftp_root) diff --git a/ironic/drivers/modules/pxe.py b/ironic/drivers/modules/pxe.py index f3172b1505..8cac287cae 100644 --- a/ironic/drivers/modules/pxe.py +++ b/ironic/drivers/modules/pxe.py @@ -20,9 +20,11 @@ from oslo_log import log as logging from ironic.common import boot_devices from ironic.common.i18n import _ +from ironic.common import pxe_utils from ironic.common import states from ironic.conductor import task_manager from ironic.conductor import utils as manager_utils +from ironic.conf import CONF from ironic.drivers import base from ironic.drivers.modules import agent_base from ironic.drivers.modules import deploy_utils @@ -36,6 +38,10 @@ class PXEBoot(pxe_base.PXEBaseMixin, base.BootInterface): capabilities = ['ramdisk_boot', 'pxe_boot'] + def __init__(self): + pxe_utils.place_loaders_for_boot(CONF.deploy.http_root) + pxe_utils.place_loaders_for_boot(CONF.pxe.tftp_root) + class PXEAnacondaDeploy(agent_base.AgentBaseMixin, agent_base.HeartbeatMixin, base.DeployInterface):