Merge "Clean up ipxe support"
This commit is contained in:
@@ -19,25 +19,31 @@
|
||||
#
|
||||
# === Parameters
|
||||
#
|
||||
# [*ipxe_enabled*]
|
||||
# (optional) Enable ipxe support
|
||||
# Defaults to false.
|
||||
#
|
||||
# [*pxe_append_params*]
|
||||
# (optional) Additional append parameters for baremetal PXE boot.
|
||||
# Should be valid pxe parameters
|
||||
# Defaults to $::os_service_default
|
||||
# Defaults to $::os_service_default.
|
||||
#
|
||||
# [*pxe_bootfile_name*]
|
||||
# (optional) Bootfile DHCP parameter.
|
||||
# If not set, its value is detected based on ipxe_enabled.
|
||||
# Defaults to undef.
|
||||
# If not set, its value is detected.
|
||||
# Defaults to $::os_service_default.
|
||||
#
|
||||
# [*pxe_config_template*]
|
||||
# (optional) Template file for PXE configuration.
|
||||
# If set, should be an valid template file. Otherwise, its value is detected
|
||||
# based on ipxe_enabled.
|
||||
# Defaults to undef.
|
||||
# If set, should be an valid template file. Otherwise, its value is detected.
|
||||
# Defaults to $::os_service_default.
|
||||
#
|
||||
# [*ipxe_bootfile_name*]
|
||||
# (optional) Bootfile DHCP parameter when the ipxe boot interface is set
|
||||
# for a baremetal node. If not set, its value is detected.
|
||||
# Defaults to $::os_service_default.
|
||||
#
|
||||
# [*ipxe_config_template*]
|
||||
# (optional) Template file for PXE configuration with the iPXE boot
|
||||
# interface. If set, should be an valid template file. Otherwise,
|
||||
# its value is detected.
|
||||
# Defaults to $::os_service_default.
|
||||
#
|
||||
# [*tftp_server*]
|
||||
# (optional) IP address of Ironic compute node's tftp server.
|
||||
@@ -47,7 +53,7 @@
|
||||
# [*tftp_root*]
|
||||
# (optional) Ironic compute node's tftp root path.
|
||||
# Should be an valid path
|
||||
# Defaults to '/tftpboot'.
|
||||
# Defaults to $::os_service_default.
|
||||
#
|
||||
# [*images_path*]
|
||||
# (optional) Directory where images are stored on disk.
|
||||
@@ -57,7 +63,7 @@
|
||||
# [*tftp_master_path*]
|
||||
# (optional) Directory where master tftp images are stored on disk.
|
||||
# Should be an valid directory
|
||||
# Defaults to '/tftpboot/master_images'.
|
||||
# Defaults to $::os_service_default.
|
||||
#
|
||||
# [*instance_master_path*]
|
||||
# (optional) Directory where master tftp images are stored on disk.
|
||||
@@ -72,6 +78,13 @@
|
||||
# (optional) Template file for PXE configuration for UEFI boot loader.
|
||||
# Defaults to $::os_service_default.
|
||||
#
|
||||
# [*uefi_ipxe_bootfile_name*]
|
||||
# (optional) Bootfile DHCP parameter for UEFI boot mode for the
|
||||
# ipxe boot interface. No separate configuration template is required
|
||||
# when using ipxe.
|
||||
# Defaults to snponly.efi, which supports UEFI firmware with network
|
||||
# enablement, which is a standard feature in UEFI.
|
||||
#
|
||||
# [*ipxe_timeout*]
|
||||
# (optional) ipxe timeout in second.
|
||||
# Should be an valid integer
|
||||
@@ -89,59 +102,73 @@
|
||||
# (optional) How often (in seconds) to check for PXE boot status.
|
||||
# Defaults to $::os_service_default.
|
||||
#
|
||||
# DEPRECATED PARAMETERS
|
||||
#
|
||||
# [*ipxe_enabled*]
|
||||
# DEPRECATED: This option is no longer used as support for the option was
|
||||
# deprecated during Ironic's Stein development cycle and removed during
|
||||
# Ironic's Train development cycle.
|
||||
# If this setting is populated, a warning will be indicated.
|
||||
#
|
||||
# [*ip_version*]
|
||||
# (optional) The IP version that will be used for PXE booting.
|
||||
# DEPRECATED: (optional) The IP version that will be used for PXE booting.
|
||||
# Ironic presently attempts both IPv4 and IPv6, this option is effectively
|
||||
# ignored by ironic, and should anticipate being removed in a future
|
||||
# release.
|
||||
# Defaults to $::os_service_default.
|
||||
#
|
||||
class ironic::drivers::pxe (
|
||||
$ipxe_enabled = false,
|
||||
$ipxe_enabled = undef,
|
||||
$pxe_append_params = $::os_service_default,
|
||||
$pxe_bootfile_name = undef,
|
||||
$pxe_config_template = undef,
|
||||
$pxe_bootfile_name = $::os_service_default,
|
||||
$pxe_config_template = $::os_service_default,
|
||||
$ipxe_bootfile_name = $::os_service_default,
|
||||
$ipxe_config_template = $::os_service_default,
|
||||
$tftp_server = $::os_service_default,
|
||||
$tftp_root = '/tftpboot',
|
||||
$tftp_root = $::os_service_default,
|
||||
$images_path = $::os_service_default,
|
||||
$tftp_master_path = '/tftpboot/master_images',
|
||||
$tftp_master_path = $::os_service_default,
|
||||
$instance_master_path = $::os_service_default,
|
||||
$uefi_pxe_bootfile_name = $::os_service_default,
|
||||
$uefi_pxe_config_template = $::os_service_default,
|
||||
$uefi_ipxe_bootfile_name = 'snponly.efi',
|
||||
$ipxe_timeout = $::os_service_default,
|
||||
$enable_ppc64le = false,
|
||||
$boot_retry_timeout = $::os_service_default,
|
||||
$boot_retry_check_interval = $::os_service_default,
|
||||
$ip_version = $::os_service_default,
|
||||
$ip_version = undef,
|
||||
) {
|
||||
|
||||
include ironic::deps
|
||||
include ironic::pxe::common
|
||||
$tftp_root_real = pick($::ironic::pxe::common::tftp_root, $tftp_root)
|
||||
$ipxe_timeout_real = pick($::ironic::pxe::common::ipxe_timeout, $ipxe_timeout)
|
||||
|
||||
if $ipxe_enabled {
|
||||
$pxe_bootfile_name_real = pick($pxe_bootfile_name, 'undionly.kpxe')
|
||||
$pxe_config_template_real = pick($pxe_config_template, '$pybasedir/drivers/modules/ipxe_config.template')
|
||||
} else {
|
||||
$pxe_bootfile_name_real = pick($pxe_bootfile_name, 'pxelinux.0')
|
||||
$pxe_config_template_real = pick($pxe_config_template, '$pybasedir/drivers/modules/pxe_config.template')
|
||||
if $ipxe_enabled != undef {
|
||||
warning('The ironic::drivers::pxe::ipxe_enabled parameter is deprecated and has no effect.')
|
||||
}
|
||||
|
||||
if $ip_version != undef {
|
||||
warning('The ironic::drivers::pxe:ip_version parameter is deprecated and will be removed in the future.')
|
||||
}
|
||||
|
||||
# Configure ironic.conf
|
||||
ironic_config {
|
||||
'pxe/pxe_append_params': value => $pxe_append_params;
|
||||
'pxe/pxe_bootfile_name': value => $pxe_bootfile_name_real;
|
||||
'pxe/pxe_config_template': value => $pxe_config_template_real;
|
||||
'pxe/pxe_bootfile_name': value => $pxe_bootfile_name;
|
||||
'pxe/pxe_config_template': value => $pxe_config_template;
|
||||
'pxe/ipxe_bootfile_name': value => $ipxe_bootfile_name;
|
||||
'pxe/ipxe_config_template': value => $ipxe_config_template;
|
||||
'pxe/tftp_server': value => $tftp_server;
|
||||
'pxe/tftp_root': value => $tftp_root_real;
|
||||
'pxe/tftp_root': value => $tftp_root;
|
||||
'pxe/images_path': value => $images_path;
|
||||
'pxe/tftp_master_path': value => $tftp_master_path;
|
||||
'pxe/instance_master_path': value => $instance_master_path;
|
||||
'pxe/uefi_pxe_bootfile_name': value => $uefi_pxe_bootfile_name;
|
||||
'pxe/uefi_pxe_config_template': value => $uefi_pxe_config_template;
|
||||
'pxe/ipxe_timeout': value => $ipxe_timeout_real;
|
||||
'pxe/uefi_ipxe_bootfile_name': value => $uefi_ipxe_bootfile_name;
|
||||
'pxe/ipxe_timeout': value => $ipxe_timeout;
|
||||
'pxe/boot_retry_timeout': value => $boot_retry_timeout;
|
||||
'pxe/boot_retry_check_interval': value => $boot_retry_check_interval;
|
||||
'pxe/ip_version': value => $ip_version;
|
||||
'pxe/ipxe_enabled': ensure => absent;
|
||||
}
|
||||
|
||||
if $enable_ppc64le {
|
||||
@@ -150,7 +177,12 @@ class ironic::drivers::pxe (
|
||||
# architecture
|
||||
ironic_config {
|
||||
# NOTE(tonyb): This first value shouldn't be needed but seems to be?
|
||||
'pxe/pxe_config_template_by_arch': value => "ppc64le:${pxe_config_template_real}";
|
||||
# NOTE(TheJulia): Likely not needed as this just points to the default,
|
||||
# and when the explicit pxe driver is used everything should fall to
|
||||
# it but in the interest of minimizing impact, the output result
|
||||
# is preserved as we now just allow the default for normal template
|
||||
# operation to be used.
|
||||
'pxe/pxe_config_template_by_arch': value => 'ppc64le:$pybasedir/drivers/modules/pxe_config.template';
|
||||
'pxe/pxe_bootfile_name_by_arch': value => 'ppc64le:config';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -66,7 +66,7 @@ class ironic::pxe (
|
||||
$syslinux_files = $::ironic::params::syslinux_files,
|
||||
$tftp_bind_host = undef,
|
||||
$enable_ppc64le = false,
|
||||
$ipxe_name_base = 'ipxe',
|
||||
$ipxe_name_base = 'ipxe-snponly',
|
||||
) inherits ironic::params {
|
||||
|
||||
include ironic::deps
|
||||
@@ -181,7 +181,7 @@ class ironic::pxe (
|
||||
require => Anchor['ironic-inspector::install::end'],
|
||||
}
|
||||
|
||||
file { "${tftp_root_real}/ipxe.efi":
|
||||
file { "${tftp_root_real}/snponly.efi":
|
||||
ensure => 'file',
|
||||
seltype => 'tftpdir_t',
|
||||
owner => 'ironic',
|
||||
|
||||
44
releasenotes/notes/pxe-cleanup-692c78cad322893d.yaml
Normal file
44
releasenotes/notes/pxe-cleanup-692c78cad322893d.yaml
Normal file
@@ -0,0 +1,44 @@
|
||||
---
|
||||
features:
|
||||
- Adds support for the ``ironic.conf`` parameters ``[pxe]ipxe_bootfile_name``
|
||||
and ``[pxe]ipxe_config_template`` which are utilized by the ``ipxe`` boot
|
||||
interface in Ironic. These settings use the manifest parameters
|
||||
``ironic::drivers::pxe::ipxe_bootfile_name`` and
|
||||
``ironic::drivers::pxe::ipxe_config_template`` respectively.
|
||||
- Adds support for the ``ironic.conf`` parameter
|
||||
``[pxe]uefi_ipxe_bootfile_name`` to be explicitly set using the
|
||||
``ironic::drivers::pxe::uefi_ipxe_bootfile_name`` manifest parameter,
|
||||
however this value is defaulted to ``snponly.efi`` which is anticipated
|
||||
to become the default in Ironic sometime in the Xena development cycle.
|
||||
upgrade:
|
||||
- |
|
||||
The Ironic project has in elevated support for ``ipxe`` to a top level
|
||||
node boot_interface, and removed support for it's ``[pxe]ipxe_enabled``
|
||||
option as this is settable per node. Removal of this option has allowed
|
||||
for the manifest to be cleaned up.
|
||||
- The manifest now no longer applies override defaults for a number of
|
||||
``ironic.conf`` settings, as they match the default settings the project
|
||||
utilizes. These manifest parameters are
|
||||
``ironic::drivers::pxe::pxe_bootfile_name``,
|
||||
``ironic::drivers::pxe::pxe_config_template``,
|
||||
``ironic::drivers::pxe::tftp_root``,
|
||||
``ironic::drivers::pxe::tftp_master_path``.
|
||||
deprecations:
|
||||
- |
|
||||
The ``ironic::drivers::pxe::ipxe_enabled`` parameter has been deprecated
|
||||
and has no effect moving forward. This is a result of the underlying
|
||||
Ironic project deprecating and removing. Use of this option will raise
|
||||
a warning.
|
||||
- The ``ironic::drivers::pxe::ip_version`` parameter has been deprecated
|
||||
for removal. Please anticipate this option to be removed in a future
|
||||
release. This option has been redundant since the Ussuri release of
|
||||
Ironic. Use of this option raises a warning.
|
||||
fixes:
|
||||
- |
|
||||
Fixes a potential issue where use of the
|
||||
``ironic::drivers::pxe::ipxe_enabled`` parameter would
|
||||
cause settings specific to ``ipxe`` to be set overriding the ``pxe`` boot
|
||||
interface's defaults in Ironic. This resulted in operators being unable to
|
||||
choose to boot a node from ``pxe`` and not ``ipxe``. Now the settings are
|
||||
not overriden as the ``ironic::drivers::pxe::ipxe_enabled`` parameter for
|
||||
the manifest has no effect, and raises a warning if used.
|
||||
@@ -23,10 +23,7 @@ require 'spec_helper'
|
||||
describe 'ironic::drivers::pxe' do
|
||||
|
||||
let :default_params do
|
||||
{ :pxe_bootfile_name => 'pxelinux.0',
|
||||
:pxe_config_template => '$pybasedir/drivers/modules/pxe_config.template',
|
||||
:tftp_root => '/tftpboot',
|
||||
:tftp_master_path => '/tftpboot/master_images',
|
||||
{ :uefi_ipxe_bootfile_name => 'snponly.efi',
|
||||
}
|
||||
end
|
||||
|
||||
@@ -41,37 +38,18 @@ describe 'ironic::drivers::pxe' do
|
||||
|
||||
it 'configures ironic.conf' do
|
||||
is_expected.to contain_ironic_config('pxe/pxe_append_params').with_value('<SERVICE DEFAULT>')
|
||||
is_expected.to contain_ironic_config('pxe/pxe_bootfile_name').with_value(p[:pxe_bootfile_name])
|
||||
is_expected.to contain_ironic_config('pxe/pxe_config_template').with_value(p[:pxe_config_template])
|
||||
is_expected.to contain_ironic_config('pxe/pxe_bootfile_name').with_value('<SERVICE DEFAULT>')
|
||||
is_expected.to contain_ironic_config('pxe/pxe_config_template').with_value('<SERVICE DEFAULT>')
|
||||
is_expected.to contain_ironic_config('pxe/ipxe_bootfile_name').with_value('<SERVICE DEFAULT>')
|
||||
is_expected.to contain_ironic_config('pxe/ipxe_config_template').with_value('<SERVICE DEFAULT>')
|
||||
is_expected.to contain_ironic_config('pxe/tftp_server').with_value('<SERVICE DEFAULT>')
|
||||
is_expected.to contain_ironic_config('pxe/tftp_root').with_value(p[:tftp_root])
|
||||
is_expected.to contain_ironic_config('pxe/tftp_root').with_value('<SERVICE DEFAULT>')
|
||||
is_expected.to contain_ironic_config('pxe/images_path').with_value('<SERVICE DEFAULT>')
|
||||
is_expected.to contain_ironic_config('pxe/tftp_master_path').with_value(p[:tftp_master_path])
|
||||
is_expected.to contain_ironic_config('pxe/tftp_master_path').with_value('<SERVICE DEFAULT>')
|
||||
is_expected.to contain_ironic_config('pxe/instance_master_path').with_value('<SERVICE DEFAULT>')
|
||||
is_expected.to contain_ironic_config('pxe/uefi_pxe_bootfile_name').with_value('<SERVICE DEFAULT>')
|
||||
is_expected.to contain_ironic_config('pxe/uefi_pxe_config_template').with_value('<SERVICE DEFAULT>')
|
||||
is_expected.to contain_ironic_config('pxe/ipxe_enabled').with_ensure('absent')
|
||||
end
|
||||
|
||||
context 'when overriding only ipxe_enabled' do
|
||||
before do
|
||||
params.merge!(
|
||||
:ipxe_enabled => true,
|
||||
)
|
||||
end
|
||||
|
||||
it 'detects correct boot parameters' do
|
||||
is_expected.to contain_ironic_config('pxe/pxe_append_params').with_value('<SERVICE DEFAULT>')
|
||||
is_expected.to contain_ironic_config('pxe/pxe_bootfile_name').with_value('undionly.kpxe')
|
||||
is_expected.to contain_ironic_config('pxe/pxe_config_template').with_value('$pybasedir/drivers/modules/ipxe_config.template')
|
||||
is_expected.to contain_ironic_config('pxe/tftp_server').with_value('<SERVICE DEFAULT>')
|
||||
is_expected.to contain_ironic_config('pxe/tftp_root').with_value(p[:tftp_root])
|
||||
is_expected.to contain_ironic_config('pxe/images_path').with_value('<SERVICE DEFAULT>')
|
||||
is_expected.to contain_ironic_config('pxe/tftp_master_path').with_value(p[:tftp_master_path])
|
||||
is_expected.to contain_ironic_config('pxe/instance_master_path').with_value('<SERVICE DEFAULT>')
|
||||
is_expected.to contain_ironic_config('pxe/uefi_pxe_bootfile_name').with_value('<SERVICE DEFAULT>')
|
||||
is_expected.to contain_ironic_config('pxe/uefi_pxe_config_template').with_value('<SERVICE DEFAULT>')
|
||||
end
|
||||
is_expected.to contain_ironic_config('pxe/uefi_ipxe_bootfile_name').with_value('snponly.efi')
|
||||
end
|
||||
|
||||
context 'when overriding only enable_ppc64le' do
|
||||
@@ -98,9 +76,9 @@ describe 'ironic::drivers::pxe' do
|
||||
:tftp_master_path => '/mnt/master_images',
|
||||
:instance_master_path => '/mnt/ironic/master_images',
|
||||
:uefi_pxe_bootfile_name => 'bootx64.efi',
|
||||
:uefi_ipxe_bootfile_name => 'ipxe.efi',
|
||||
:uefi_pxe_config_template => 'foo-uefi',
|
||||
:ipxe_timeout => '60',
|
||||
:ipxe_enabled => true,
|
||||
:pxe_bootfile_name => 'bootx64',
|
||||
:boot_retry_timeout => 600,
|
||||
:boot_retry_check_interval => 120,
|
||||
@@ -118,6 +96,7 @@ describe 'ironic::drivers::pxe' do
|
||||
is_expected.to contain_ironic_config('pxe/instance_master_path').with_value(p[:instance_master_path])
|
||||
is_expected.to contain_ironic_config('pxe/uefi_pxe_bootfile_name').with_value(p[:uefi_pxe_bootfile_name])
|
||||
is_expected.to contain_ironic_config('pxe/uefi_pxe_config_template').with_value(p[:uefi_pxe_config_template])
|
||||
is_expected.to contain_ironic_config('pxe/uefi_ipxe_bootfile_name').with_value(p[:uefi_ipxe_bootfile_name])
|
||||
is_expected.to contain_ironic_config('pxe/ipxe_timeout').with_value(p[:ipxe_timeout])
|
||||
is_expected.to contain_ironic_config('pxe/pxe_bootfile_name').with_value(p[:pxe_bootfile_name])
|
||||
is_expected.to contain_ironic_config('pxe/boot_retry_timeout').with_value(p[:boot_retry_timeout])
|
||||
|
||||
@@ -111,7 +111,7 @@ describe 'ironic::pxe' do
|
||||
)
|
||||
end
|
||||
it 'should contain iPXE UEFI chainload image' do
|
||||
is_expected.to contain_file('/var/lib/tftpboot/ipxe.efi').with(
|
||||
is_expected.to contain_file('/var/lib/tftpboot/snponly.efi').with(
|
||||
'owner' => 'ironic',
|
||||
'group' => 'ironic',
|
||||
'require' => 'Anchor[ironic-inspector::install::end]',
|
||||
|
||||
Reference in New Issue
Block a user