Merge "Multiple DHCP ranges for Ironic Inspector"

This commit is contained in:
Zuul 2022-05-02 10:50:39 +00:00 committed by Gerrit Code Review
commit 6b9321dc23
7 changed files with 83 additions and 21 deletions

View File

@ -251,8 +251,8 @@ openstack_ironic_inspector_auth: "{{ openstack_auth }}"
# Ironic
#########
ironic_dnsmasq_interface: "{{ api_interface }}"
ironic_dnsmasq_dhcp_range:
ironic_dnsmasq_default_gateway:
ironic_dnsmasq_dhcp_ranges:
ironic_dnsmasq_dhcp_default_lease_time: "10m"
# TODO(yoctozepto): Do not rely on deprecated enable_ironic_ipxe in Zed.
ironic_dnsmasq_serve_ipxe: "{{ enable_ironic_ipxe | default(\"yes\") }}"
ironic_dnsmasq_boot_file: "{% if ironic_dnsmasq_serve_ipxe | bool %}undionly.kpxe{% else %}pxelinux.0{% endif %}"

View File

@ -68,11 +68,10 @@
- "ironic-agent.kernel"
- "ironic-agent.initramfs"
- name: Ensure dnsmasq_dhcp_range configured for Ironic Dnsmasq
- name: Ensure ironic_dnsmasq_dhcp_ranges is configured
fail:
msg: >
ironic_dnsmasq_dhcp_range must be set when enable ironic
ironic_dnsmasq_dhcp_ranges must be a list
connection: local
run_once: True
when:
- ironic_dnsmasq_dhcp_range is none
when: not ironic_dnsmasq_dhcp_ranges is sequence

View File

@ -5,16 +5,20 @@ port=0
interface={{ ironic_dnsmasq_interface }}
bind-interfaces
dhcp-range={{ ironic_dnsmasq_dhcp_range }}
{% for item in ironic_dnsmasq_dhcp_ranges %}
{% set tag = item.tag | default('range_' ~ loop.index) %}
{% set lease_time = item.lease_time | default(ironic_dnsmasq_dhcp_default_lease_time) %}
dhcp-range=set:{{ tag }},{{ item.range }},{{ lease_time }}
{% if item.routers is defined %}
dhcp-option=tag:{{ tag }},option:router,{{ item.routers }}
{% endif %}
{% endfor %}
dhcp-sequential-ip
{% if api_address_family == 'ipv6' %}
{# TODO(yoctozepto): IPv6-only support - DHCPv6 PXE support #}
{# different options must be used here #}
{% else %}{# ipv4 #}
{% if ironic_dnsmasq_default_gateway is not none %}
dhcp-option=3,{{ ironic_dnsmasq_default_gateway }}
{% endif %}
dhcp-option=option:tftp-server,{{ api_interface_address }}
dhcp-option=option:server-ip-address,{{ api_interface_address }}
dhcp-option=210,/var/lib/ironic/tftpboot/

View File

@ -18,22 +18,52 @@ Enable Ironic in ``/etc/kolla/globals.yml``:
enable_ironic: "yes"
In the same file, define a network interface as the default NIC for dnsmasq and
a range of IP addresses that will be available for use by Ironic inspector.
The optional netmask of the network should be provided in case when DHCP-relay
is used. Finally, define a network to be used for the Ironic cleaning network:
define a network to be used for the Ironic cleaning network:
.. code-block:: yaml
ironic_dnsmasq_interface: "eth1"
ironic_dnsmasq_dhcp_range: "192.168.5.100,192.168.5.110,255.255.255.0"
ironic_cleaning_network: "public1"
In the same file, optionally a default gateway to be used for the Ironic
Inspector inspection network:
Finally, define at least one DHCP range for Ironic inspector:
.. code-block:: yaml
ironic_dnsmasq_default_gateway: 192.168.5.1
ironic_dnsmasq_dhcp_ranges:
- range: "192.168.5.100,192.168.5.110"
Another example of a single range with a router (multiple routers
are possible by separating addresses with commas):
.. code-block:: yaml
ironic_dnsmasq_dhcp_ranges:
- range: "192.168.5.100,192.168.5.110"
routers: "192.168.5.1"
To support DHCP relay, it is also possible to define a netmask in the range.
It is advisable to also provide a router to allow the traffic to reach the
Ironic server.
.. code-block:: yaml
ironic_dnsmasq_dhcp_ranges:
- range: "192.168.5.100,192.168.5.110,255.255.255.0"
routers: "192.168.5.1"
Multiple ranges are possible, they can be either for directly-connected
interfaces or relays (if with netmask):
.. code-block:: yaml
ironic_dnsmasq_dhcp_ranges:
- range: "192.168.5.100,192.168.5.110"
- range: "192.168.6.100,192.168.6.110,255.255.255.0"
routers: "192.168.6.1"
The default lease time for each range can be configured globally via
``ironic_dnsmasq_dhcp_default_lease_time`` variable or per range via
``lease_time`` parameter.
In the same file, specify the PXE bootloader file for Ironic Inspector. The
file is relative to the ``/var/lib/ironic/tftpboot`` directory. The default is

View File

@ -583,9 +583,11 @@
#############################
# dnsmasq bind interface for Ironic Inspector, by default is network_interface
#ironic_dnsmasq_interface: "{{ network_interface }}"
# The following value must be set when enabling ironic, the value format is
# "192.168.0.10,192.168.0.100,255.255.255.0" the last being an optional netmask.
#ironic_dnsmasq_dhcp_range:
# The following value must be set when enabling ironic, the value format is a
# list of ranges - at least one must be configured, for example:
# - range: 192.168.0.10,192.168.0.100
# See Kolla Ansible docs on Ironic for details.
#ironic_dnsmasq_dhcp_ranges:
# PXE bootloader file for Ironic Inspector, relative to /var/lib/ironic/tftpboot.
#ironic_dnsmasq_boot_file: "pxelinux.0"

View File

@ -0,0 +1,26 @@
---
features:
- |
Adds support for multiple DHCP ranges in the Ironic Inspector DHCP server.
upgrade:
- |
Modifies the default lease time of the Ironic Inspector DHCP server to 10
minutes. This is small enough to use small pools of IP addresses for
inspection but gives more room for the inspection to succeed.
This default can be changed globally via
``ironic_dnsmasq_dhcp_default_lease_time`` variable or per range via
``lease_time`` parameter.
- |
Replace usage of ``ironic_dnsmasq_dhcp_range`` together with
``ironic_dnsmasq_default_gateway`` to ``ironic_dnsmasq_dhcp_ranges``.
For example, if you have::
ironic_dnsmasq_dhcp_range: "10.42.0.2,10.42.0.254,255.255.255.0"
ironic_dnsmasq_default_gateway: "10.42.0.1"
replace it with::
ironic_dnsmasq_dhcp_ranges:
- range: "10.42.0.2,10.42.0.254,255.255.255.0"
routers: "10.42.0.1"

View File

@ -99,7 +99,8 @@ enable_aodh: "yes"
{% if scenario == "ironic" %}
enable_ironic: "yes"
ironic_dnsmasq_dhcp_range: "10.42.0.2,10.42.0.254,255.255.255.0"
ironic_dnsmasq_dhcp_ranges:
- range: "10.42.0.2,10.42.0.254,255.255.255.0"
{% endif %}
{% if scenario == "masakari" %}