Add a role to convert diskimages between formats

This adds a role convert-diskimage which uses the qemu-img tool to
convert diskimages from one format to another. Currently supported image
formats are raw and qcow2.

Change-Id: I4770af04c37f39e0cce23d5dd59ead744bed7d74
This commit is contained in:
Simon Westphahl 2024-06-27 09:32:17 +02:00 committed by James E. Blair
parent dded8d0853
commit 5c10b708f0
6 changed files with 142 additions and 0 deletions

View File

@ -3,3 +3,4 @@ Diskimage-Builder Roles
.. zuul:autorole:: ensure-dib .. zuul:autorole:: ensure-dib
.. zuul:autorole:: build-diskimage .. zuul:autorole:: build-diskimage
.. zuul:autorole:: convert-diskimage

View File

@ -0,0 +1,19 @@
This role converts diskimages from one format to other using the qemu-img tool.
Currently, only Ubuntu and Debian distributions are supported.
**Role variables**
.. zuul:rolevar:: convert_diskimage_source_image
The path to the source image file.
.. zuul:rolevar:: convert_diskimage_target_image
The path of the desired target image file.
.. zuul:rolevar:: convert_diskimage_target_image_formats
:type: list
The desired formats of the target image.
Supported values are "raw" and "qcow2".

View File

@ -0,0 +1,32 @@
- name: Make sure the role is run on Debian or Ubuntu
fail:
msg: "This role supports Debian and Ubuntu distributions only"
when: ansible_distribution not in ["Debian", "Ubuntu"]
- name: Make sure required variables are set
assert:
that:
- convert_diskimage_source_image is defined
- convert_diskimage_target_image is defined
- convert_diskimage_target_formats is defined
- name: Make sure target formats are supported
assert:
that: zj_format in convert_diskimage_supported_formats
loop: "{{ convert_diskimage_target_formats }}"
loop_control:
loop_var: zj_format
- name: Install qemu tools
become: true
package:
state: present
name: qemu-utils
- name: Convert image to the given formats
command: >
qemu-img convert {{ convert_diskimage_source_image }}
-O {{ zj_format }} {{ convert_diskimage_target_image }}.{{ zj_format }}
loop: "{{ convert_diskimage_target_formats }}"
loop_control:
loop_var: zj_format

View File

@ -0,0 +1,3 @@
convert_diskimage_supported_formats:
- raw
- qcow2

View File

@ -0,0 +1,21 @@
- hosts: all
roles:
- ensure-dib
- role: build-diskimage
build_diskimage_image_name: foo-ubuntu-image
build_diskimage_formats: ["raw"]
build_diskimage_elements: ["vm", "ubuntu"]
environment:
DIB_RELEASE: "noble"
- role: convert-diskimage
convert_diskimage_source_image: "/home/zuul/dib-images/foo-ubuntu-image.raw"
convert_diskimage_target_image: "/home/zuul/dib-images/foo-ubuntu-image"
convert_diskimage_target_formats: ["qcow2"]
tasks:
- name: Gather image file info
stat:
path: "/home/zuul/dib-images/foo-ubuntu-image.qcow2"
register: image_file
- name: Assert image file exists
assert:
that: image_file.stat.exists

View File

@ -116,6 +116,67 @@
- name: ubuntu-noble - name: ubuntu-noble
label: ubuntu-noble label: ubuntu-noble
- job:
name: zuul-jobs-test-convert-diskimage
description: Test the convert-diskimage role
files:
- roles/convert-diskimage/.*
- test-playbooks/diskimage-builder/.*
run: test-playbooks/diskimage-builder/convert-diskimage.yaml
required-projects:
- openstack/diskimage-builder
tags: debuntu-platforms
- job:
name: zuul-jobs-test-convert-diskimage-debian-bookworm
description: Test the convert-diskimage role on debian-bookworm
parent: zuul-jobs-test-convert-diskimage
tags: auto-generated
nodeset:
nodes:
- name: debian-bookworm
label: debian-bookworm
- job:
name: zuul-jobs-test-convert-diskimage-debian-bullseye
description: Test the convert-diskimage role on debian-bullseye
parent: zuul-jobs-test-convert-diskimage
tags: auto-generated
nodeset:
nodes:
- name: debian-bullseye
label: debian-bullseye
- job:
name: zuul-jobs-test-convert-diskimage-ubuntu-focal
description: Test the convert-diskimage role on ubuntu-focal
parent: zuul-jobs-test-convert-diskimage
tags: auto-generated
nodeset:
nodes:
- name: ubuntu-focal
label: ubuntu-focal
- job:
name: zuul-jobs-test-convert-diskimage-ubuntu-jammy
description: Test the convert-diskimage role on ubuntu-jammy
parent: zuul-jobs-test-convert-diskimage
tags: auto-generated
nodeset:
nodes:
- name: ubuntu-jammy
label: ubuntu-jammy
- job:
name: zuul-jobs-test-convert-diskimage-ubuntu-noble
description: Test the convert-diskimage role on ubuntu-noble
parent: zuul-jobs-test-convert-diskimage
tags: auto-generated
nodeset:
nodes:
- name: ubuntu-noble
label: ubuntu-noble
- project: - project:
check: check:
jobs: &id001 jobs: &id001
@ -129,6 +190,11 @@
- zuul-jobs-test-build-diskimage-ubuntu-focal - zuul-jobs-test-build-diskimage-ubuntu-focal
- zuul-jobs-test-build-diskimage-ubuntu-jammy - zuul-jobs-test-build-diskimage-ubuntu-jammy
- zuul-jobs-test-build-diskimage-ubuntu-noble - zuul-jobs-test-build-diskimage-ubuntu-noble
- zuul-jobs-test-convert-diskimage-debian-bookworm
- zuul-jobs-test-convert-diskimage-debian-bullseye
- zuul-jobs-test-convert-diskimage-ubuntu-focal
- zuul-jobs-test-convert-diskimage-ubuntu-jammy
- zuul-jobs-test-convert-diskimage-ubuntu-noble
gate: gate:
jobs: *id001 jobs: *id001
periodic-weekly: periodic-weekly: