From 7bfa7f4d59037bda160c4f0efa3d63ae38ac6ed8 Mon Sep 17 00:00:00 2001 From: Doug Goldstein Date: Thu, 9 Apr 2026 09:02:12 -0500 Subject: [PATCH] feat(ironic): Upgrade to OpenStack 2026.1 release Upgrade OpenStack Ironic to 2026.1. --- .github/workflows/containers-openstack.yaml | 11 ++++++++- components/images-openstack.yaml | 10 ++++----- containers/ironic/Dockerfile | 25 ++++++++++----------- python/ironic-understack/pyproject.toml | 2 +- python/ironic-understack/uv.lock | 2 +- 5 files changed, 29 insertions(+), 21 deletions(-) diff --git a/.github/workflows/containers-openstack.yaml b/.github/workflows/containers-openstack.yaml index 546b8346f..27cb433a9 100644 --- a/.github/workflows/containers-openstack.yaml +++ b/.github/workflows/containers-openstack.yaml @@ -36,7 +36,6 @@ jobs: - cinder - glance - horizon - - ironic - keystone - neutron - nova @@ -51,3 +50,13 @@ jobs: dockerfile_path: containers/${{ matrix.project }}/Dockerfile build_args: OPENSTACK_VERSION=2025.2 latest_name: "2025.2" + + ironic: + uses: ./.github/workflows/build-container-reuse.yaml + secrets: inherit + with: + container_name: ironic + dockerfile_path: containers/ironic/Dockerfile + build_args: OPENSTACK_VERSION=2026.1 + latest_name: "2026.1" + target: final diff --git a/components/images-openstack.yaml b/components/images-openstack.yaml index 95556ab89..da3613080 100644 --- a/components/images-openstack.yaml +++ b/components/images-openstack.yaml @@ -22,12 +22,12 @@ images: keystone_fernet_setup: "ghcr.io/rackerlabs/understack/keystone:2025.2" # ironic - ironic_api: "ghcr.io/rackerlabs/understack/ironic:2025.2" - ironic_conductor: "ghcr.io/rackerlabs/understack/ironic:2025.2" - ironic_pxe: "ghcr.io/rackerlabs/understack/ironic:2025.2" - ironic_pxe_init: "ghcr.io/rackerlabs/understack/ironic:2025.2" + ironic_api: "ghcr.io/rackerlabs/understack/ironic:2026.1" + ironic_conductor: "ghcr.io/rackerlabs/understack/ironic:2026.1" + ironic_pxe: "ghcr.io/rackerlabs/understack/ironic:2026.1" + ironic_pxe_init: "ghcr.io/rackerlabs/understack/ironic:2026.1" ironic_pxe_http: "docker.io/nginx:1.29.8" - ironic_db_sync: "ghcr.io/rackerlabs/understack/ironic:2025.2" + ironic_db_sync: "ghcr.io/rackerlabs/understack/ironic:2026.1" # these want curl which apparently is in the openstack-client image ironic_manage_cleaning_network: "ghcr.io/rackerlabs/understack/openstack-client:2025.2" ironic_retrive_cleaning_network: "ghcr.io/rackerlabs/understack/openstack-client:2025.2" diff --git a/containers/ironic/Dockerfile b/containers/ironic/Dockerfile index 711142eef..d663fd457 100644 --- a/containers/ironic/Dockerfile +++ b/containers/ironic/Dockerfile @@ -1,7 +1,7 @@ # syntax=docker/dockerfile:1 ARG OPENSTACK_VERSION="required_argument" -FROM quay.io/airshipit/ironic:${OPENSTACK_VERSION}-ubuntu_noble AS build +FROM quay.io/airshipit/venv_builder:2026.1-ubuntu_noble AS build COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/ @@ -12,8 +12,8 @@ RUN apt-get update && \ && apt-get clean && rm -rf /var/lib/apt/lists/* # clone source and patch it -# renovate: name=openstack/ironic repo=https://github.com/rackerlabs/ironic.git branch=understack/2025.2 -ARG IRONIC_GIT_REF=3800a4d71cad3343f6810ab53a9732e7badcb69f +# renovate: name=openstack/ironic repo=https://github.com/rackerlabs/ironic.git branch=understack/2026.1 +ARG IRONIC_GIT_REF=a21904bdcc7b028aa15f5016c8c7c00d17b1f31b ADD --keep-git-dir=true https://github.com/rackerlabs/ironic.git#${IRONIC_GIT_REF} /src/ironic RUN git -C /src/ironic fetch --unshallow --tags @@ -21,7 +21,6 @@ COPY python/ironic-understack /src/understack/ironic-understack COPY python/understack-flavor-matcher /src/understack/understack-flavor-matcher ARG OPENSTACK_VERSION="required_argument" -ARG NOVNC_VERSION=1.6.0 RUN --mount=type=cache,target=/root/.cache/uv \ uv pip install \ --upgrade \ @@ -34,10 +33,9 @@ RUN --mount=type=cache,target=/root/.cache/uv \ COPY containers/ironic/patches /tmp/patches/ RUN cd /var/lib/openstack/lib/python3.12/site-packages && \ patch -p1 < /tmp/patches/0002-Solve-IPMI-call-issue-results-in-UTF-8-format-error-.patch -RUN cd /var/lib/openstack/lib/python3.12/site-packages && \ - patch -p1 < /tmp/patches/0003-Handle-missing-storage-controller-mode-attribute.patch # download and unpack novnc +ARG NOVNC_VERSION=1.6.0 RUN \ export URL=https://github.com/novnc/noVNC/archive/refs/tags/v${NOVNC_VERSION}.tar.gz && \ export DEST_FILE=novnc-${NOVNC_VERSION}.tar.gz && \ @@ -51,14 +49,16 @@ COPY containers/ironic/ironic-console-pod.yaml.template /var/lib/openstack/lib/p # renovate: datasource=docker depName=ghcr.io/rackerlabs/understack/ironic-ipxe versioning=semver FROM ghcr.io/rackerlabs/understack/ironic-ipxe:1.0.0 AS ipxe -ARG OPENSTACK_VERSION="required_argument" FROM quay.io/airshipit/ironic:${OPENSTACK_VERSION}-ubuntu_noble AS final -SHELL ["/bin/bash", "-o", "pipefail", "-c"] -RUN wget -qO- https://pkgs.k8s.io/core:/stable:/v1.35/deb/Release.key | gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg && \ - chmod 644 /etc/apt/keyrings/kubernetes-apt-keyring.gpg && \ - echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.35/deb/ /' > /etc/apt/sources.list.d/kubernetes.list && \ - chmod 644 /etc/apt/sources.list.d/kubernetes.list +ENV PATH="/var/lib/openstack/bin:$PATH" + +RUN < /etc/apt/sources.list.d/kubernetes.list +chmod 644 /etc/apt/sources.list.d/kubernetes.list +EOF RUN apt-get update && \ apt-get install -y --no-install-recommends \ @@ -67,7 +67,6 @@ RUN apt-get update && \ kubectl \ && apt-get clean && rm -rf /var/lib/apt/lists/* - COPY --from=build --link /var/lib/openstack /var/lib/openstack COPY --from=build /usr/share/novnc /usr/share/novnc COPY --from=ipxe /snponly.efi /usr/lib/ipxe/snponly.efi diff --git a/python/ironic-understack/pyproject.toml b/python/ironic-understack/pyproject.toml index d051d6d90..bd48fb545 100644 --- a/python/ironic-understack/pyproject.toml +++ b/python/ironic-understack/pyproject.toml @@ -11,7 +11,7 @@ requires-python = "~=3.12.0" readme = "README.md" license = "MIT" dependencies = [ - "ironic>=32.0,<33", + "ironic>=32.0,<36", "pyyaml~=6.0", "understack-flavor-matcher", ] diff --git a/python/ironic-understack/uv.lock b/python/ironic-understack/uv.lock index a934deb73..3458516cf 100644 --- a/python/ironic-understack/uv.lock +++ b/python/ironic-understack/uv.lock @@ -460,7 +460,7 @@ test = [ [package.metadata] requires-dist = [ - { name = "ironic", specifier = ">=32.0,<33" }, + { name = "ironic", specifier = ">=32.0,<36" }, { name = "pyyaml", specifier = "~=6.0" }, { name = "understack-flavor-matcher", directory = "../understack-flavor-matcher" }, ]