pxe: Support _by_arch options

This introduces support for the following parameters which defines
files used for specific architecture such as aarch64.

 - [pxe] uefi_pxe_bootfile_name
 - [pxe] uefi_ipxe_bootfile_name
 - [pxe] pxe_config_template_by_arch

Change-Id: I85a3c71b3dd00dff9538c248d4b1ea7e7ef800cb
This commit is contained in:
Takashi Kajinami
2023-11-01 18:51:15 +09:00
parent 6c146bf625
commit be958cc538
3 changed files with 118 additions and 41 deletions

View File

@@ -119,6 +119,18 @@
# PXE/iXPE boot folders values from the host operating system. # PXE/iXPE boot folders values from the host operating system.
# Defaults to $facts['os_service_default']. # Defaults to $facts['os_service_default'].
# #
# [*pxe_bootfile_name_by_arch*]
# (optional) Bootfile DHCP parameter per node architecture.
# Defaults to $facts['os_service_default'].
#
# [*ipxe_bootfile_name_by_arch*]
# (optional) Bootfile DHCP parameter per node architecture.
# Defaults to $facts['os_service_default'].
#
# [*pxe_config_template_by_arch*]
# (optional) Template file for PXE configuration per node architecture.
# Defaults to $facts['os_service_default'].
#
# DEPRECATED PARAMETERS # DEPRECATED PARAMETERS
# #
# [*ip_version*] # [*ip_version*]
@@ -149,6 +161,9 @@ class ironic::drivers::pxe (
$dir_permission = $facts['os_service_default'], $dir_permission = $facts['os_service_default'],
$file_permission = $facts['os_service_default'], $file_permission = $facts['os_service_default'],
$loader_file_paths = $facts['os_service_default'], $loader_file_paths = $facts['os_service_default'],
$pxe_bootfile_name_by_arch = $facts['os_service_default'],
$ipxe_bootfile_name_by_arch = $facts['os_service_default'],
$pxe_config_template_by_arch = $facts['os_service_default'],
# DEPRECATED PARAMETERS # DEPRECATED PARAMETERS
$ip_version = undef, $ip_version = undef,
) inherits ironic::params { ) inherits ironic::params {
@@ -196,6 +211,19 @@ class ironic::drivers::pxe (
'pxe/ip_version': value => $ip_version_real; 'pxe/ip_version': value => $ip_version_real;
} }
$pxe_bootfile_name_by_arch_real = $pxe_bootfile_name_by_arch ? {
Hash => join(join_keys_to_values($pxe_bootfile_name_by_arch, ':'), ','),
default => join(any2array($pxe_bootfile_name_by_arch), ',')
}
$ipxe_bootfile_name_by_arch_real = $ipxe_bootfile_name_by_arch ? {
Hash => join(join_keys_to_values($ipxe_bootfile_name_by_arch, ':'), ','),
default => join(any2array($ipxe_bootfile_name_by_arch), ',')
}
$pxe_config_template_by_arch_real = $pxe_config_template_by_arch ? {
Hash => join(join_keys_to_values($pxe_config_template_by_arch, ':'), ','),
default => join(any2array($pxe_config_template_by_arch), ',')
}
if $enable_ppc64le { if $enable_ppc64le {
# FXIME(tonyb): As these are really hash values it would be better to model # FXIME(tonyb): As these are really hash values it would be better to model
# them that way. We can do that later, probably when we add another # them that way. We can do that later, probably when we add another
@@ -210,6 +238,15 @@ class ironic::drivers::pxe (
'pxe/pxe_config_template_by_arch': value => 'ppc64le:$pybasedir/drivers/modules/pxe_config.template'; 'pxe/pxe_config_template_by_arch': value => 'ppc64le:$pybasedir/drivers/modules/pxe_config.template';
'pxe/pxe_bootfile_name_by_arch': value => 'ppc64le:config'; 'pxe/pxe_bootfile_name_by_arch': value => 'ppc64le:config';
} }
} else {
ironic_config {
'pxe/pxe_config_template_by_arch': value => $pxe_config_template_by_arch_real;
'pxe/pxe_bootfile_name_by_arch': value => $pxe_bootfile_name_by_arch_real;
}
}
ironic_config {
'pxe/ipxe_bootfile_name_by_arch': value => $ipxe_bootfile_name_by_arch_real;
} }
} }

View File

@@ -0,0 +1,9 @@
---
features:
- |
The following parameters have been added to the ``ironic::drive::pxe``
class.
- ``pxe_bootfile_name_by_arch``
- ``ipxe_bootfile_name_by_arch``
- ``pxe_config_template_by_arch``

View File

@@ -45,6 +45,9 @@ describe 'ironic::drivers::pxe' do
is_expected.to contain_ironic_config('pxe/file_permission').with_value('<SERVICE DEFAULT>') is_expected.to contain_ironic_config('pxe/file_permission').with_value('<SERVICE DEFAULT>')
is_expected.to contain_ironic_config('pxe/loader_file_paths').with_value('<SERVICE DEFAULT>') is_expected.to contain_ironic_config('pxe/loader_file_paths').with_value('<SERVICE DEFAULT>')
is_expected.to contain_ironic_config('pxe/ipxe_enabled').with_ensure('absent') is_expected.to contain_ironic_config('pxe/ipxe_enabled').with_ensure('absent')
is_expected.to contain_ironic_config('pxe/pxe_bootfile_name_by_arch').with_value('<SERVICE DEFAULT>')
is_expected.to contain_ironic_config('pxe/ipxe_bootfile_name_by_arch').with_value('<SERVICE DEFAULT>')
is_expected.to contain_ironic_config('pxe/pxe_config_template_by_arch').with_value('<SERVICE DEFAULT>')
end end
context 'when overriding only enable_ppc64le' do context 'when overriding only enable_ppc64le' do
@@ -79,9 +82,20 @@ describe 'ironic::drivers::pxe' do
:boot_retry_check_interval => 120, :boot_retry_check_interval => 120,
:dir_permission => '0o755', :dir_permission => '0o755',
:file_permission => '0o644', :file_permission => '0o644',
:loader_file_paths => ['ipxe.efi:/usr/share/ipxe/ipxe-snponly-x86_64.efi', :loader_file_paths => [
'undionly.kpxe:/usr/share/ipxe/undionly.kpxe'], 'ipxe.efi:/usr/share/ipxe/ipxe-snponly-x86_64.efi',
'undionly.kpxe:/usr/share/ipxe/undionly.kpxe'
],
:ip_version => 6, :ip_version => 6,
:pxe_bootfile_name_by_arch => [
'aarch64:grubaa64.efi'
],
:ipxe_bootfile_name_by_arch => [
'aarch64:ipxe_aa64.efi'
],
:pxe_config_template_by_arch => [
'aarch64:/opt/share/grubaa64_pxe_config.template'
]
) )
end end
@@ -105,6 +119,10 @@ describe 'ironic::drivers::pxe' do
is_expected.to contain_ironic_config('pxe/loader_file_paths') is_expected.to contain_ironic_config('pxe/loader_file_paths')
.with_value('ipxe.efi:/usr/share/ipxe/ipxe-snponly-x86_64.efi,undionly.kpxe:/usr/share/ipxe/undionly.kpxe') .with_value('ipxe.efi:/usr/share/ipxe/ipxe-snponly-x86_64.efi,undionly.kpxe:/usr/share/ipxe/undionly.kpxe')
is_expected.to contain_ironic_config('pxe/ip_version').with_value(params[:ip_version]) is_expected.to contain_ironic_config('pxe/ip_version').with_value(params[:ip_version])
is_expected.to contain_ironic_config('pxe/pxe_bootfile_name_by_arch').with_value('aarch64:grubaa64.efi')
is_expected.to contain_ironic_config('pxe/ipxe_bootfile_name_by_arch').with_value('aarch64:ipxe_aa64.efi')
is_expected.to contain_ironic_config('pxe/pxe_config_template_by_arch')
.with_value('aarch64:/opt/share/grubaa64_pxe_config.template')
end end
end end
@@ -115,12 +133,25 @@ describe 'ironic::drivers::pxe' do
'ipxe.efi' => '/usr/share/ipxe/ipxe-snponly-x86_64.efi', 'ipxe.efi' => '/usr/share/ipxe/ipxe-snponly-x86_64.efi',
'undionly.kpxe' => '/usr/share/ipxe/undionly.kpxe' 'undionly.kpxe' => '/usr/share/ipxe/undionly.kpxe'
}, },
:pxe_bootfile_name_by_arch => {
'aarch64' => 'grubaa64.efi'
},
:ipxe_bootfile_name_by_arch => {
'aarch64' => 'ipxe_aa64.efi'
},
:pxe_config_template_by_arch => {
'aarch64' => '/opt/share/grubaa64_pxe_config.template'
}
) )
end end
it 'should replace default parameter with new value' do it 'should replace default parameter with new value' do
is_expected.to contain_ironic_config('pxe/loader_file_paths') is_expected.to contain_ironic_config('pxe/loader_file_paths')
.with_value('ipxe.efi:/usr/share/ipxe/ipxe-snponly-x86_64.efi,undionly.kpxe:/usr/share/ipxe/undionly.kpxe') .with_value('ipxe.efi:/usr/share/ipxe/ipxe-snponly-x86_64.efi,undionly.kpxe:/usr/share/ipxe/undionly.kpxe')
is_expected.to contain_ironic_config('pxe/pxe_bootfile_name_by_arch').with_value('aarch64:grubaa64.efi')
is_expected.to contain_ironic_config('pxe/ipxe_bootfile_name_by_arch').with_value('aarch64:ipxe_aa64.efi')
is_expected.to contain_ironic_config('pxe/pxe_config_template_by_arch')
.with_value('aarch64:/opt/share/grubaa64_pxe_config.template')
end end
end end