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):