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
7 changed files with 83 additions and 21 deletions

View File

@@ -251,8 +251,8 @@ openstack_ironic_inspector_auth: "{{ openstack_auth }}"
# Ironic # Ironic
######### #########
ironic_dnsmasq_interface: "{{ api_interface }}" ironic_dnsmasq_interface: "{{ api_interface }}"
ironic_dnsmasq_dhcp_range: ironic_dnsmasq_dhcp_ranges:
ironic_dnsmasq_default_gateway: ironic_dnsmasq_dhcp_default_lease_time: "10m"
# TODO(yoctozepto): Do not rely on deprecated enable_ironic_ipxe in Zed. # TODO(yoctozepto): Do not rely on deprecated enable_ironic_ipxe in Zed.
ironic_dnsmasq_serve_ipxe: "{{ enable_ironic_ipxe | default(\"yes\") }}" 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 %}" 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.kernel"
- "ironic-agent.initramfs" - "ironic-agent.initramfs"
- name: Ensure dnsmasq_dhcp_range configured for Ironic Dnsmasq - name: Ensure ironic_dnsmasq_dhcp_ranges is configured
fail: fail:
msg: > msg: >
ironic_dnsmasq_dhcp_range must be set when enable ironic ironic_dnsmasq_dhcp_ranges must be a list
connection: local connection: local
run_once: True run_once: True
when: when: not ironic_dnsmasq_dhcp_ranges is sequence
- ironic_dnsmasq_dhcp_range is none

View File

@@ -5,16 +5,20 @@ port=0
interface={{ ironic_dnsmasq_interface }} interface={{ ironic_dnsmasq_interface }}
bind-interfaces 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 dhcp-sequential-ip
{% if api_address_family == 'ipv6' %} {% if api_address_family == 'ipv6' %}
{# TODO(yoctozepto): IPv6-only support - DHCPv6 PXE support #} {# TODO(yoctozepto): IPv6-only support - DHCPv6 PXE support #}
{# different options must be used here #} {# different options must be used here #}
{% else %}{# ipv4 #} {% 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:tftp-server,{{ api_interface_address }}
dhcp-option=option:server-ip-address,{{ api_interface_address }} dhcp-option=option:server-ip-address,{{ api_interface_address }}
dhcp-option=210,/var/lib/ironic/tftpboot/ dhcp-option=210,/var/lib/ironic/tftpboot/

View File

@@ -18,22 +18,52 @@ Enable Ironic in ``/etc/kolla/globals.yml``:
enable_ironic: "yes" enable_ironic: "yes"
In the same file, define a network interface as the default NIC for dnsmasq and 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. define a network to be used for the Ironic cleaning network:
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:
.. code-block:: yaml .. code-block:: yaml
ironic_dnsmasq_interface: "eth1" ironic_dnsmasq_interface: "eth1"
ironic_dnsmasq_dhcp_range: "192.168.5.100,192.168.5.110,255.255.255.0"
ironic_cleaning_network: "public1" ironic_cleaning_network: "public1"
In the same file, optionally a default gateway to be used for the Ironic Finally, define at least one DHCP range for Ironic inspector:
Inspector inspection network:
.. code-block:: yaml .. 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 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 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 # dnsmasq bind interface for Ironic Inspector, by default is network_interface
#ironic_dnsmasq_interface: "{{ network_interface }}" #ironic_dnsmasq_interface: "{{ network_interface }}"
# The following value must be set when enabling ironic, the value format is # The following value must be set when enabling ironic, the value format is a
# "192.168.0.10,192.168.0.100,255.255.255.0" the last being an optional netmask. # list of ranges - at least one must be configured, for example:
#ironic_dnsmasq_dhcp_range: # - 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. # PXE bootloader file for Ironic Inspector, relative to /var/lib/ironic/tftpboot.
#ironic_dnsmasq_boot_file: "pxelinux.0" #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" %} {% if scenario == "ironic" %}
enable_ironic: "yes" 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 %} {% endif %}
{% if scenario == "masakari" %} {% if scenario == "masakari" %}