Ensure dhcp hostsdir exists

The dhcp hostsdir used by dnsmasq may not exist (for example in Ubuntu
or Debian). Ensure the requested path actually exists to avoid runtime
problems.

Change-Id: If01afddb7649dead6a61f1eda33cf0488d9f60bc
This commit is contained in:
Takashi Kajinami 2024-05-07 14:49:07 +09:00
parent 1b582d17b3
commit d290940d02
2 changed files with 92 additions and 60 deletions

View File

@ -315,66 +315,66 @@
# Defaults to false
#
class ironic::inspector (
$package_ensure = 'present',
Boolean $manage_service = true,
Boolean $enabled = true,
$listen_address = $facts['os_service_default'],
Enum['http', 'tftp'] $pxe_transfer_protocol = 'tftp',
Boolean $dhcp_debug = false,
$auth_strategy = 'keystone',
$timeout = $facts['os_service_default'],
$api_max_limit = $facts['os_service_default'],
$dnsmasq_interface = 'br-ctlplane',
$ramdisk_logs_dir = '/var/log/ironic-inspector/ramdisk/',
$always_store_ramdisk_logs = $facts['os_service_default'],
$add_ports = $facts['os_service_default'],
$keep_ports = $facts['os_service_default'],
$store_data = $facts['os_service_default'],
Array[Hash] $dnsmasq_ip_subnets = [],
$dnsmasq_local_ip = '192.168.0.1',
Boolean $dnsmasq_dhcp_sequential_ip = true,
$dnsmasq_dhcp_hostsdir = undef,
$dnsmasq_log_facility = undef,
Boolean $sync_db = true,
Optional[String[1]] $ramdisk_collectors = undef,
String[1] $ramdisk_filename = 'agent.ramdisk',
String[1] $kernel_filename = 'agent.kernel',
$additional_processing_hooks = undef,
String $ramdisk_kernel_args = '',
Integer[0] $ipxe_timeout = 0,
$http_port = '8088',
$detect_boot_mode = $facts['os_service_default'],
Stdlib::Absolutepath $tftp_root = '/tftpboot',
Stdlib::Absolutepath $http_root = '/httpboot',
$node_not_found_hook = $facts['os_service_default'],
$discovery_default_driver = $facts['os_service_default'],
Boolean $enable_ppc64le = false,
Hash $port_physnet_cidr_map = {},
$uefi_ipxe_bootfile_name = $::ironic::params::uefi_ipxe_bootfile_name,
$control_exchange = $facts['os_service_default'],
$executor_thread_pool_size = $facts['os_service_default'],
$rpc_response_timeout = $facts['os_service_default'],
$rpc_transport = $facts['os_service_default'],
$default_transport_url = 'fake://',
$rabbit_use_ssl = $facts['os_service_default'],
$rabbit_heartbeat_timeout_threshold = $facts['os_service_default'],
$rabbit_heartbeat_rate = $facts['os_service_default'],
$rabbit_heartbeat_in_pthread = $facts['os_service_default'],
$rabbit_ha_queues = $facts['os_service_default'],
$rabbit_quorum_queue = $facts['os_service_default'],
$rabbit_transient_quorum_queue = $facts['os_service_default'],
$rabbit_quorum_delivery_limit = $facts['os_service_default'],
$rabbit_quorum_max_memory_length = $facts['os_service_default'],
$rabbit_quorum_max_memory_bytes = $facts['os_service_default'],
$kombu_ssl_ca_certs = $facts['os_service_default'],
$kombu_ssl_certfile = $facts['os_service_default'],
$kombu_ssl_keyfile = $facts['os_service_default'],
$kombu_ssl_version = $facts['os_service_default'],
$kombu_reconnect_delay = $facts['os_service_default'],
$kombu_failover_strategy = $facts['os_service_default'],
$kombu_compression = $facts['os_service_default'],
$amqp_durable_queues = $facts['os_service_default'],
Boolean $standalone = true,
$package_ensure = 'present',
Boolean $manage_service = true,
Boolean $enabled = true,
$listen_address = $facts['os_service_default'],
Enum['http', 'tftp'] $pxe_transfer_protocol = 'tftp',
Boolean $dhcp_debug = false,
$auth_strategy = 'keystone',
$timeout = $facts['os_service_default'],
$api_max_limit = $facts['os_service_default'],
$dnsmasq_interface = 'br-ctlplane',
$ramdisk_logs_dir = '/var/log/ironic-inspector/ramdisk/',
$always_store_ramdisk_logs = $facts['os_service_default'],
$add_ports = $facts['os_service_default'],
$keep_ports = $facts['os_service_default'],
$store_data = $facts['os_service_default'],
Array[Hash] $dnsmasq_ip_subnets = [],
$dnsmasq_local_ip = '192.168.0.1',
Boolean $dnsmasq_dhcp_sequential_ip = true,
Optional[Stdlib::Absolutepath] $dnsmasq_dhcp_hostsdir = undef,
$dnsmasq_log_facility = undef,
Boolean $sync_db = true,
Optional[String[1]] $ramdisk_collectors = undef,
String[1] $ramdisk_filename = 'agent.ramdisk',
String[1] $kernel_filename = 'agent.kernel',
$additional_processing_hooks = undef,
String $ramdisk_kernel_args = '',
Integer[0] $ipxe_timeout = 0,
$http_port = '8088',
$detect_boot_mode = $facts['os_service_default'],
Stdlib::Absolutepath $tftp_root = '/tftpboot',
Stdlib::Absolutepath $http_root = '/httpboot',
$node_not_found_hook = $facts['os_service_default'],
$discovery_default_driver = $facts['os_service_default'],
Boolean $enable_ppc64le = false,
Hash $port_physnet_cidr_map = {},
$uefi_ipxe_bootfile_name = $::ironic::params::uefi_ipxe_bootfile_name,
$control_exchange = $facts['os_service_default'],
$executor_thread_pool_size = $facts['os_service_default'],
$rpc_response_timeout = $facts['os_service_default'],
$rpc_transport = $facts['os_service_default'],
$default_transport_url = 'fake://',
$rabbit_use_ssl = $facts['os_service_default'],
$rabbit_heartbeat_timeout_threshold = $facts['os_service_default'],
$rabbit_heartbeat_rate = $facts['os_service_default'],
$rabbit_heartbeat_in_pthread = $facts['os_service_default'],
$rabbit_ha_queues = $facts['os_service_default'],
$rabbit_quorum_queue = $facts['os_service_default'],
$rabbit_transient_quorum_queue = $facts['os_service_default'],
$rabbit_quorum_delivery_limit = $facts['os_service_default'],
$rabbit_quorum_max_memory_length = $facts['os_service_default'],
$rabbit_quorum_max_memory_bytes = $facts['os_service_default'],
$kombu_ssl_ca_certs = $facts['os_service_default'],
$kombu_ssl_certfile = $facts['os_service_default'],
$kombu_ssl_keyfile = $facts['os_service_default'],
$kombu_ssl_version = $facts['os_service_default'],
$kombu_reconnect_delay = $facts['os_service_default'],
$kombu_failover_strategy = $facts['os_service_default'],
$kombu_compression = $facts['os_service_default'],
$amqp_durable_queues = $facts['os_service_default'],
Boolean $standalone = true,
) inherits ironic::params {
include ironic::deps
@ -551,6 +551,18 @@ included in the manifest")
include ironic::inspector::db::sync
}
if $dnsmasq_dhcp_hostsdir {
file { 'ironic-inspector-dnsmasq-dhcp-hostsdir':
ensure => directory,
path => $dnsmasq_dhcp_hostsdir,
owner => $::ironic::params::inspector_user,
group => $::ironic::params::inspector_group,
mode => '0750',
require => Anchor['ironic-inspector::config::begin'],
before => Anchor['ironic-inspector::config::end']
}
}
if $manage_service {
if $enabled {
$ensure = 'running'

View File

@ -155,6 +155,10 @@ describe 'ironic::inspector' do
)
end
it 'should not contain dhcp hostsdir' do
is_expected.not_to contain_file('ironic-inspector-dnsmasq-dhcp-hostsdir')
end
it 'should contain file /etc/ironic-inspector/dnsmasq.conf' do
is_expected.to contain_file('/etc/ironic-inspector/dnsmasq.conf').with(
'ensure' => 'present',
@ -197,6 +201,9 @@ describe 'ironic::inspector' do
is_expected.not_to contain_file('/etc/ironic-inspector/dnsmasq.conf').with_content(
/^log-facility=.*$/
)
is_expected.not_to contain_file('/etc/ironic-inspector/dnsmasq.conf').with_content(
/^dhcp-hostsdir=.*$/
)
end
it 'should contain file /tftpboot/pxelinux.cfg/default' do
is_expected.to contain_file('/tftpboot/pxelinux.cfg/default').with(
@ -230,6 +237,7 @@ describe 'ironic::inspector' do
:discovery_default_driver => 'pxe_ipmitool',
:dnsmasq_ip_subnets => [{'ip_range' => '192.168.0.100,192.168.0.120'}],
:dnsmasq_dhcp_sequential_ip => false,
:dnsmasq_dhcp_hostsdir => '/etc/ironic-inspector/dhcp-hostsdir',
:dnsmasq_log_facility => '/var/log/ironic-inspector/dnsmasq.log',
:add_ports => 'all',
:always_store_ramdisk_logs => true,
@ -294,6 +302,15 @@ describe 'ironic::inspector' do
)
end
it 'should contain dhcp hostsdir' do
is_expected.to contain_file('ironic-inspector-dnsmasq-dhcp-hostsdir').with(
:ensure => 'directory',
:path => '/etc/ironic-inspector/dhcp-hostsdir',
:owner => 'ironic-inspector',
:group => 'ironic-inspector',
)
end
it 'should contain file /etc/ironic-inspector/dnsmasq.conf' do
is_expected.to contain_file('/etc/ironic-inspector/dnsmasq.conf').with(
'ensure' => 'present',
@ -330,6 +347,9 @@ describe 'ironic::inspector' do
is_expected.to contain_file('/etc/ironic-inspector/dnsmasq.conf').with_content(
/^dhcp-option=tag:efi6,tag:!ipxe6,option6:bootfile-url,tftp:\/\/.*\/otherpxe.efi$/
)
is_expected.to contain_file('/etc/ironic-inspector/dnsmasq.conf').with_content(
/^dhcp-hostsdir=\/etc\/ironic-inspector\/dhcp-hostsdir$/
)
end
it 'should contain file /var/www/httpboot/inspector.ipxe' do