Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 12 additions & 12 deletions components/images-openstack.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -48,19 +48,19 @@ images:
neutron_netns_cleanup_cron: "ghcr.io/rackerlabs/understack/neutron:2026.1"

# nova
nova_api: "ghcr.io/rackerlabs/understack/nova:2026.1"
nova_cell_setup: "ghcr.io/rackerlabs/understack/nova:2026.1"
nova_api: "ghcr.io/rackerlabs/understack/nova:pr-2173"
nova_cell_setup: "ghcr.io/rackerlabs/understack/nova:pr-2173"
nova_cell_setup_init: "ghcr.io/rackerlabs/understack/openstack-client:2025.2"
nova_compute: "ghcr.io/rackerlabs/understack/nova:2026.1"
nova_compute_ironic: "ghcr.io/rackerlabs/understack/nova:2026.1"
nova_compute_ssh: "ghcr.io/rackerlabs/understack/nova:2026.1"
nova_conductor: "ghcr.io/rackerlabs/understack/nova:2026.1"
nova_db_sync: "ghcr.io/rackerlabs/understack/nova:2026.1"
nova_novncproxy: "ghcr.io/rackerlabs/understack/nova:2026.1"
nova_novncproxy_assets: "ghcr.io/rackerlabs/understack/nova:2026.1"
nova_scheduler: "ghcr.io/rackerlabs/understack/nova:2026.1"
nova_spiceproxy: "ghcr.io/rackerlabs/understack/nova:2026.1"
nova_spiceproxy_assets: "ghcr.io/rackerlabs/understack/nova:2026.1"
nova_compute: "ghcr.io/rackerlabs/understack/nova:pr-2173"
nova_compute_ironic: "ghcr.io/rackerlabs/understack/nova:pr-2173"
nova_compute_ssh: "ghcr.io/rackerlabs/understack/nova:pr-2173"
nova_conductor: "ghcr.io/rackerlabs/understack/nova:pr-2173"
nova_db_sync: "ghcr.io/rackerlabs/understack/nova:pr-2173"
nova_novncproxy: "ghcr.io/rackerlabs/understack/nova:pr-2173"
nova_novncproxy_assets: "ghcr.io/rackerlabs/understack/nova:pr-2173"
nova_scheduler: "ghcr.io/rackerlabs/understack/nova:pr-2173"
nova_spiceproxy: "ghcr.io/rackerlabs/understack/nova:pr-2173"
nova_spiceproxy_assets: "ghcr.io/rackerlabs/understack/nova:pr-2173"
nova_service_cleaner: "docker.io/openstackhelm/ceph-config-helper:latest-ubuntu_jammy"

# placement
Expand Down
40 changes: 28 additions & 12 deletions containers/nova/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,15 +1,31 @@
# syntax=docker/dockerfile:1

ARG OPENSTACK_VERSION="required_argument"
FROM quay.io/airshipit/nova:${OPENSTACK_VERSION}-ubuntu_noble

RUN apt-get update && \
apt-get install -y --no-install-recommends \
patch \
quilt \
&& apt-get clean && rm -rf /var/lib/apt/lists/*

COPY containers/nova/patches /tmp/patches/
RUN cd /var/lib/openstack/lib/python3.12/site-packages && \
QUILT_PATCHES=/tmp/patches quilt push -a
COPY python/nova-understack/ironic_understack /var/lib/openstack/lib/python3.12/site-packages/nova/virt/ironic_understack
FROM quay.io/airshipit/nova:${OPENSTACK_VERSION}-ubuntu_noble AS build

COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/

# renovate: name=openstack/nova repo=https://github.com/rackerlabs/nova.git branch=understack/2026.1
ARG NOVA_GIT_REF=1602d7db7a3fe4930668f8a6534782adf4fbe572
ADD --keep-git-dir=true https://github.com/rackerlabs/nova.git#${NOVA_GIT_REF} /src/nova
RUN git -C /src/nova fetch --unshallow --tags

ARG OPENSTACK_VERSION="required_argument"
ADD https://releases.openstack.org/constraints/upper/${OPENSTACK_VERSION} /upper-constraints.txt

RUN --mount=type=cache,target=/root/.cache/uv \
uv pip install \
--upgrade \
--constraint /upper-constraints.txt \
/src/nova

ARG OPENSTACK_VERSION="required_argument"
FROM quay.io/airshipit/nova:${OPENSTACK_VERSION}-ubuntu_noble AS final

RUN rm -rf /var/lib/openstack
COPY --from=build --link /var/lib/openstack /var/lib/openstack

# Copy ironic_understack into Nova virt drivers
# This copies the directory as-is; no explicit dependencies are installed.
# Dependencies (requests, oslo_config) are already provided by Nova's installation.
COPY python/nova-understack/ironic_understack /var/lib/openstack/lib/python3.12/site-packages/nova/virt/ironic_understack
106 changes: 106 additions & 0 deletions containers/nova/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
# Nova Patches

Patches are derived from cherry-picking patches to the stable series we follow.

[https://github.com/rackerlabs/nova](https://github.com/rackerlabs/nova)

The branch for these are `understack/$OPENSTACK_VERSION`

## Initial Setup - Creating understack/2026.1 Branch

If the `understack/2026.1` branch doesn't exist yet, create it:

```bash
git clone https://github.com/openstack/nova
cd nova
git checkout --track origin/stable/2026.1
git remote add rackerlabs https://github.com/rackerlabs/nova
git checkout -b understack/2026.1
git push -u rackerlabs understack/2026.1
```

## To clone everything down (after branch is created)

```bash
git clone https://github.com/openstack/nova
git checkout --track origin/stable/2026.1
git remote add rackerlabs https://github.com/rackerlabs/nova
git fetch rackerlabs
git checkout --track rackerlabs/understack/2026.1
```

## Adding patches is done via `git cherry-pick`

```bash
git checkout understack/2026.1
git cherry-pick GITISH_TO_PORT
git push rackerlabs understack/2026.1
```

## Creating the next stable series

```bash
git checkout --track origin/stable/2026.2
git checkout -b understack/2026.2
```

## Rebasing to keep things clean

```bash
git checkout stable/2026.1
git pull -p
git checkout understack/2026.1
git rebase stable/2026.1
git push rackerlabs understack/2026.1
```

## Updating the container

```bash
git checkout understack/2026.1
git show
# ensure the git-ish in the Dockerfile matches
```

## Backporting patches from upstream master

To backport a patch from upstream master (or another branch) to understack/2026.1:

```bash
# Fetch all branches from upstream (openstack/nova)
# This fetches master, stable branches, and all other refs
git fetch origin

# Fetch all branches from rackerlabs fork
git fetch rackerlabs

# Checkout the understack branch
git checkout understack/2026.1

# Cherry-pick the commit from master
# You can get the commit hash from the PR or upstream repository
git cherry-pick <UPSTREAM_COMMIT_HASH>

# If there are conflicts, resolve them:
git add <conflicted-files>
git cherry-pick --continue

# Push to rackerlabs fork
git push rackerlabs understack/2026.1
```

### Example workflow for a specific PR

Following the backporting workflow above results in a PR like https://github.com/rackerlabs/nova/pull/XXX:

1. Find the commit hash from upstream master
2. Cherry-pick it to the branch: `git cherry-pick <COMMIT_HASH>`
3. Resolve any conflicts if needed
4. Test the changes locally
5. Push to the rackerlabs understack branch

### Note on patch sources

Patches can come from:
- OpenStack upstream master branch (`openstack/nova` - origin/master)
- Other branches or forks that have fixes needed
Loading
Loading