aboutsummaryrefslogtreecommitdiff
path: root/docker
diff options
context:
space:
mode:
authorZuul <zuul@review.opendev.org>2025-10-03 12:50:59 +0000
committerGerrit Code Review <review@openstack.org>2025-10-03 12:50:59 +0000
commit6c8f2b9042aeb6be020f1c74a73b8dc3ff65de8f (patch)
tree46f9d0eaa7dce4b17aa331f146056983f7ef60ce /docker
parente65d3b50b44025d3a9721e5ea656de9fe78ca0fd (diff)
parentbacaf8f49412271ebcd3ed5294e2b1435d74ed29 (diff)
downloadkolla-6c8f2b9042aeb6be020f1c74a73b8dc3ff65de8f.tar.gz
kolla-6c8f2b9042aeb6be020f1c74a73b8dc3ff65de8f.zip
Merge "Adds ironic-pxe-filter container"
Diffstat (limited to 'docker')
-rw-r--r--docker/dnsmasq/extend_start.sh19
-rw-r--r--docker/ironic/ironic-pxe-filter/Dockerfile.j224
-rw-r--r--docker/ironic/ironic-pxe-filter/extend_start.sh6
3 files changed, 49 insertions, 0 deletions
diff --git a/docker/dnsmasq/extend_start.sh b/docker/dnsmasq/extend_start.sh
index c09ce0327..0c9734fa1 100644
--- a/docker/dnsmasq/extend_start.sh
+++ b/docker/dnsmasq/extend_start.sh
@@ -1,5 +1,8 @@
#!/bin/bash
+DNSMASQ_PIDFILE=${DNSMASQ_PIDFILE:-/run/ironic/dnsmasq.pid}
+DNSMASQ_PIDFILE_DIR="$(dirname $DNSMASQ_PIDFILE)"
+
if [[ ! -d "/var/log/kolla/ironic" ]]; then
mkdir -p /var/log/kolla/ironic
fi
@@ -10,3 +13,19 @@ if [[ ! -r "/var/log/kolla/ironic/dnsmasq.log" ]]; then
touch /var/log/kolla/ironic/dnsmasq.log
chown ironic:ironic /var/log/kolla/ironic/dnsmasq.log
fi
+
+if [[ ! -d "$DNSMASQ_PIDFILE_DIR" ]]; then
+ mkdir -p "$DNSMASQ_PIDFILE_DIR"
+fi
+
+# NOTE(wszumski): This writes the PID of dnsmasq out to a file. The PIDFILE can be used in
+# another container to send a signal to dnsmasq to reload its config (providing that the two
+# containers share a PID namespace). The concrete use case is for the Ironic PXE filter to
+# clean up stale host entries on startup as documented in:
+#
+# https://docs.openstack.org/ironic/latest/admin/inspection/pxe_filter.html
+#
+# We cannot use the pid-file option in dnsmasq, since it will only write the PIDFILE if you
+# run dnsmasq in its non-forking mode i.e you do use the --no-daemon or --keep-in-foreground
+# options.
+echo $$ > "$DNSMASQ_PIDFILE"
diff --git a/docker/ironic/ironic-pxe-filter/Dockerfile.j2 b/docker/ironic/ironic-pxe-filter/Dockerfile.j2
new file mode 100644
index 000000000..b8bc2cc63
--- /dev/null
+++ b/docker/ironic/ironic-pxe-filter/Dockerfile.j2
@@ -0,0 +1,24 @@
+FROM {{ namespace }}/{{ image_prefix }}ironic-base:{{ tag }}
+{% block labels %}
+LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build_date }}"
+{% endblock %}
+
+{% block ironic_pxe_filter_header %}{% endblock %}
+
+{% import "macros.j2" as macros with context %}
+
+{% set ironic_pxe_filter_packages = [] %}
+
+{% set ironic_pxe_filter_pip_packages = [] %}
+
+RUN {{ macros.install_pip(ironic_pxe_filter_pip_packages | customizable("pip_packages")) }}
+
+{{ macros.install_packages(ironic_pxe_filter_packages | customizable("packages")) }}
+
+{{ macros.kolla_patch_sources() }}
+
+COPY extend_start.sh /usr/local/bin/kolla_ironic_extend_start
+RUN chmod 644 /usr/local/bin/kolla_ironic_extend_start
+
+{% block ironic_pxe_filter_footer %}{% endblock %}
+{% block footer %}{% endblock %}
diff --git a/docker/ironic/ironic-pxe-filter/extend_start.sh b/docker/ironic/ironic-pxe-filter/extend_start.sh
new file mode 100644
index 000000000..c7a807c8d
--- /dev/null
+++ b/docker/ironic/ironic-pxe-filter/extend_start.sh
@@ -0,0 +1,6 @@
+#!/bin/bash
+IRONIC_DHCP_HOSTS_DIR=${IRONIC_DHCP_HOSTS_DIR:-/etc/dnsmasq/dhcp-hostsdir}
+DNSMASQ_PIDFILE=${DNSMASQ_PIDFILE:-/run/ironic/dnsmasq.pid}
+
+# NOTE(wszumski): This container must be in same process namespace as dnsmasq
+rm -f $IRONIC_DHCP_HOSTS_DIR/* && kill -HUP $(cat "$DNSMASQ_PIDFILE") || true