Files
kubespray/test-infra/image-builder
Kay Yan 6ce0a1c18e docs: add README for test-infra/image-builder (#13106)
Document the KubeVirt image build process used by Kubespray CI,
including prerequisites, usage instructions, and how to add new
OS images.

Ref: https://github.com/kubernetes-sigs/kubespray/issues/12383

Made-with: Cursor

Signed-off-by: Kay Yan <kay.yan@daocloud.io>
2026-03-19 08:48:30 +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.