Files
kubespray/test-infra/image-builder
Kay Yan a93615ebde ci: bump EOL Fedora versions to 42/43 (#13206)
Fedora 39 (EOL 2024-11-26), Fedora 40 (EOL 2025-05-13), and Fedora 41
(EOL 2025-12-15) are all out of support and no longer receive security
updates. This bumps the kubevirt CI test matrix to currently supported
releases, distributing tests across Fedora 42 (supported until
2026-05-13) and Fedora 43 (supported until 2026-12-09) to keep
multi-version coverage.

- Add fedora-43 image entry to the kubevirt image-builder
- Rename fedora39-* tests to fedora43-* (4 tests)
- Rename fedora40-* tests to fedora43-* (2 tests)
- Rename fedora41-* tests to fedora42-* (4 tests)
- Update .gitlab-ci/kubevirt.yml testcase names
- Regenerate docs/developers/ci.md

All 10 existing Fedora test configurations (kube-router, calico-selinux,
calico-swap-selinux, crio with/without SELinux enforcing, docker-calico,
flannel-crio-collection-scale) are preserved.

Signed-off-by: Kay Yan <kay.yan@daocloud.io>
2026-05-11 13:59:56 +05:30
..
2019-01-03 15:41:31 +01:00

KubeVirt Image Builder

Build and push KubeVirt VM disk images to quay.io for Kubespray CI testing.

How It Works

The Ansible playbook downloads upstream cloud images, converts them to qcow2, resizes (+8G), wraps each in a Docker image based on kubevirt/registry-disk-v1alpha, and pushes to quay.io/kubespray/vm-<os-name>:<tag>.

Prerequisites

  • Docker, qemu-img, Ansible
  • Push access to quay.io/kubespray (robot account kubespray+buildvmimages)

Image Definitions

All OS images are defined in roles/kubevirt-images/defaults/main.yml.

Each entry specifies:

Field Description
filename Downloaded file name
url Upstream cloud image URL
checksum Checksum for download verification
converted true if the source is already qcow2, false if conversion is needed
tag Docker image tag (usually latest)

Usage

Build and push all images

cd test-infra/image-builder/
make docker_password=<quay-robot-token>

Add a new OS image

  1. Add a new entry to roles/kubevirt-images/defaults/main.yml:

    new-os-name:
      filename: cloud-image-file.qcow2
      url: https://example.com/cloud-image-file.qcow2
      checksum: sha256:<hash>
      converted: true
      tag: "latest"
    
  2. Build and push the image:

    make docker_password=<quay-robot-token>
    
  3. Submit a PR with the defaults/main.yml change so CI can use the new image. See #12379 for an example.

CI Validation

Build only

cd test-infra/image-builder/
make validate

This validation path runs locally and uses BuildKit, so it does not depend on SSH access to the remote builder host or a Docker daemon.

Build only for one image

cd test-infra/image-builder/
make validate-single image_name=ubuntu-2404

Runtime Variables

  • kubevirt_images_push (default: true): when false, skip docker login/push/logout.
  • kubevirt_images_selected (default: []): list of image keys to build. Empty list builds all images.
  • kubevirt_container_builder (default: docker): use buildkit for local CI validation without Docker daemon access.