Switch bifrost to use the dnsmasq DHCP driver

Enable the dnsmasq DHCP provider by default, so it is tested in all
jobs except bifrost-integration-dhcp-ubuntu-focal and
bifrost-integration-dhcp-centos-9, which use the "none" provider and
the old static dnsmasq.conf.

Depends-On: https://review.opendev.org/c/openstack/ironic/+/851681
Change-Id: I3a41541ededb647a45f91cb17aff1c6c9b84ab41
Story: 2010203
Task: 45923
This commit is contained in:
Steve Baker 2022-08-02 14:46:39 +12:00
parent 0329463d77
commit 8d273d1314
6 changed files with 54 additions and 6 deletions

View File

@ -67,6 +67,29 @@ The IP address and network interface information which will be used by bare
metal machines to connect to the conductor and the internal HTTP server, metal machines to connect to the conductor and the internal HTTP server,
and for cross-service interactions. and for cross-service interactions.
dhcp_provider: "dnsmasq"
Which ironc DHCP provider to enable. When set to "none" a static dnsmasq
configuration is used, and host specific DHCP configuration can be set by
writing files to dhcp-hostsdir ``dnsmasq_dhcp_hostsdir`` and dhcp-optsdir
``dnsmasq_dhcp_optsdir``.
When set to "dnsmasq" Ironic will manage dhcp-option and dhcp-boot entries on a
per-node basis by writing files to ``dnsmasq_dhcp_hostsdir`` and
``dnsmasq_dhcp_optsdir``.
dnsmasq_dhcp_hostsdir: "/etc/dnsmasq.d/bifrost.dhcp-hosts.d"
Directory with static and ironic managed DHCP hosts configuration.
dnsmasq_dhcp_optsdir: "/etc/dnsmasq.d/bifrost.dhcp-opts.d"
Directory with ironic managed DHCP options configuration.
dnsmasq_leases_file: "/var/lib/dnsmasq/dnsmasq.leases"
File which represents dnsmasq leases, used when dhcp_provider == "dnsmasq"
enable_dhcp: false enable_dhcp: false
If you chose to utilize the dhcp server, You may wish to set default ranges: If you chose to utilize the dhcp server, You may wish to set default ranges:

View File

@ -168,6 +168,7 @@ enable_credential_less_deploy: false
# default: empty list # default: empty list
ironic_extra_packages: [] ironic_extra_packages: []
dhcp_provider: "dnsmasq"
# DHCP pool for requests -- ignored if inventory_dhcp is set to True # DHCP pool for requests -- ignored if inventory_dhcp is set to True
# since IP allocation will be static. # since IP allocation will be static.
dhcp_pool_start: 192.168.1.200 dhcp_pool_start: 192.168.1.200
@ -178,8 +179,12 @@ dhcp_static_mask: 255.255.255.0
# Whether to enable DNS in dnsmasq. Will conflict with any other DNS server, # Whether to enable DNS in dnsmasq. Will conflict with any other DNS server,
# hence disabled by default. # hence disabled by default.
dnsmasq_enable_dns: "{{ not (dnsmasq_disable_dns | default(True) | bool) }}" dnsmasq_enable_dns: "{{ not (dnsmasq_disable_dns | default(True) | bool) }}"
# Directory with static DHCP hosts configuration. # Directory with static and ironic managed DHCP hosts configuration.
dnsmasq_dhcp_hostsdir: "/etc/dnsmasq.d/bifrost.dhcp-hosts.d" dnsmasq_dhcp_hostsdir: "/etc/dnsmasq.d/bifrost.dhcp-hosts.d"
# Directory with ironic managed DHCP options configuration.
dnsmasq_dhcp_optsdir: "/etc/dnsmasq.d/bifrost.dhcp-opts.d"
# File which represents dnsmasq leases, used when dhcp_provider == "dnsmasq"
dnsmasq_leases_file: "/var/lib/dnsmasq/dnsmasq.leases"
# Uncomment to set up directory with additional hosts for DNS. Useless without # Uncomment to set up directory with additional hosts for DNS. Useless without
# dnsmasq_enable_dns set to True. # dnsmasq_enable_dns set to True.
#dnsmasq_additional_hostsdir: "/etc/dnsmasq.d/bifrost.hosts.d" #dnsmasq_additional_hostsdir: "/etc/dnsmasq.d/bifrost.hosts.d"

View File

@ -297,13 +297,21 @@
mode: 0755 mode: 0755
when: dnsmasq_additional_hostsdir is defined when: dnsmasq_additional_hostsdir is defined
- name: "Setup inventory DHCP hosts directory" - name: "Setup inventory DHCP and ironic managed hosts directory"
file: file:
path: "{{ dnsmasq_dhcp_hostsdir }}" path: "{{ dnsmasq_dhcp_hostsdir }}"
state: directory state: directory
owner: "dnsmasq" owner: "dnsmasq"
group: "ironic" group: "ironic"
mode: 0755 mode: 0775
- name: "Setup ironic managed DHCP options directory"
file:
path: "{{ dnsmasq_dhcp_optsdir }}"
state: directory
owner: "dnsmasq"
group: "ironic"
mode: 0775
- name: "Retrieve interface IP informations" - name: "Retrieve interface IP informations"
set_fact: set_fact:

View File

@ -87,13 +87,16 @@ dhcp-option=6,{{dnsmasq_dns_servers}}
dhcp-option=42,{{dnsmasq_ntp_servers}} dhcp-option=42,{{dnsmasq_ntp_servers}}
{% endif %} {% endif %}
dhcp-match=set:ipxe,175 # iPXE sends a 175 option.
dhcp-optsdir={{ dnsmasq_dhcp_optsdir }}
{% if dhcp_provider == 'none' %}
# Boot for Etherboot gPXE. The idea is to send two different # Boot for Etherboot gPXE. The idea is to send two different
# filenames, the first loads gPXE, and the second tells gPXE what to # filenames, the first loads gPXE, and the second tells gPXE what to
# load. The dhcp-match sets the gpxe tag for requests from gPXE. # load. The dhcp-match sets the gpxe tag for requests from gPXE.
dhcp-userclass=set:gpxe,"gPXE" dhcp-userclass=set:gpxe,"gPXE"
dhcp-boot=tag:gpxe,/ipxe.pxe dhcp-boot=tag:gpxe,/ipxe.pxe
dhcp-match=set:ipxe,175 # iPXE sends a 175 option.
{% if enable_uefi_ipxe | bool == true %} {% if enable_uefi_ipxe | bool == true %}
dhcp-match=set:efi,option:client-arch,7 dhcp-match=set:efi,option:client-arch,7
dhcp-match=set:efi,option:client-arch,9 dhcp-match=set:efi,option:client-arch,9
@ -110,6 +113,7 @@ dhcp-boot=tag:ipxe,http://{{ internal_ip }}:{{ file_url_port }}/boot.ipxe
# Catch-all boot options used when no other boot options are matched. # Catch-all boot options used when no other boot options are matched.
dhcp-boot=/undionly.kpxe dhcp-boot=/undionly.kpxe
{% endif %}
{% if testing | bool == true %} {% if testing | bool == true %}
log-queries log-queries

View File

@ -3,7 +3,7 @@
[DEFAULT] [DEFAULT]
debug = {{ ironic_debug | bool }} debug = {{ ironic_debug | bool }}
# NOTE(TheJulia): Until Bifrost supports neutron or some other network # NOTE(TheJulia): Until Bifrost supports neutron or some other network
# configuration besides a flat network where bifrost orchustrates the # configuration besides a flat network where bifrost orchestrates the
# control instead of ironic, noop is the only available network driver. # control instead of ironic, noop is the only available network driver.
enabled_network_interfaces = noop enabled_network_interfaces = noop
default_deploy_interface = {{ default_deploy_interface }} default_deploy_interface = {{ default_deploy_interface }}
@ -121,7 +121,14 @@ send_sensor_data_interval = {{ sensor_data_interval }}
connection = mysql+pymysql://{{ ironic.database.username }}:{{ ironic.database.password }}@{{ ironic.database.host }}/{{ ironic.database.name }}?charset=utf8 connection = mysql+pymysql://{{ ironic.database.username }}:{{ ironic.database.password }}@{{ ironic.database.host }}/{{ ironic.database.name }}?charset=utf8
[dhcp] [dhcp]
dhcp_provider = none dhcp_provider = {{ dhcp_provider }}
{% if dhcp_provider == 'dnsmasq' %}
[dnsmasq]
dhcp_hostsdir = {{ dnsmasq_dhcp_hostsdir }}
dhcp_optsdir = {{ dnsmasq_dhcp_optsdir }}
leases_file = {{ dnsmasq_leases_file }}
{% endif %}
{% if enable_cors | bool == true %} {% if enable_cors | bool == true %}
[cors] [cors]

View File

@ -94,6 +94,7 @@ if [ ${USE_DHCP} = "true" ]; then
INVENTORY_DHCP=true INVENTORY_DHCP=true
INVENTORY_DHCP_STATIC_IP=true INVENTORY_DHCP_STATIC_IP=true
WRITE_INTERFACES_FILE=false WRITE_INTERFACES_FILE=false
CLOUD_CONFIG+=" -e dhcp_provider=none"
elif [ ${BUILD_IMAGE} = "true" ]; then elif [ ${BUILD_IMAGE} = "true" ]; then
USE_CIRROS=false USE_CIRROS=false
TESTING_USER=root TESTING_USER=root