
This change switches to using qemu-nbd instead of kpartx to unify with documentation on what tool to use for mount based image modifications[1]. This change also handles whole-disk images. The script is actually an inlined version of these scripts which will be packaged with tripleo-common[2]. This inline script can be replaced with tripleo-mount-image as soon as it is packaged Blueprint: whole-disk-default [1] https://access.redhat.com/documentation/en-us/red_hat_openstack_platform/16.1/html/bare_metal_provisioning/booting-from-cinder-volumes [2] https://review.opendev.org/c/openstack/tripleo-common/+/806067 Change-Id: I088bcf7a537d761565faaaa297114f4f0f609f7e
modify-image
An Ansible role for modifying an image via the libguestfs tool, virt-customize.
The role requires an image and a script to run inside of that image via
virt-customize. It also has paramaters for how much memory and cpu to give
the virt-customize VM, and a list of artifacts to copy out of the VM after
running the script. The script will always produce a log of the same name as
the script with .log appended. This can be extracted via the
modify_image_extract_list
variable.
Requirements
Role Variables
image_to_modify
-- the image that virt-customize will operate onmodify_script
-- the script that will be run inside the imagemodify_image_upload_files
-- list of src/dest of files to upload to image (files are uploaded before running the script)modify_image_install_packages
-- list of packages to install in the image (packages are installed before running the script)modify_image_extract_list
-- list of artifacts to extract after the image is modifiedmodify_image_working_dir
-- directory containing image and script. This is also where extracted files and logs will end up.modify_image_vc_ram
-- amount of RAM to give the virt-customize VM (in MB)modify_image_vc_cpu
-- number of CPUs to give the virt-customize VMmodify_image_vc_verbose
-- whether to run virt-customize with verbose flagmodify_image_vc_trace
-- whether to run virt-customize with trace flagmodify_image_vc_root_password
-- password for the root account of the image (useful for baremetal envs)
Example Usage
---
- name: |
Run a script inside an image via virt-customize without extracting anything
hosts: virthost
vars:
image_to_modify: "{{ working_dir }}/undercloud.qcow2"
modify_script: "{{ working_dir }}/undercloud_convert.sh"
roles:
- modify-image
- name: Run a script inside an image and extract the log from the script
hosts: virthost
vars:
image_to_modify: "{{ working_dir }}/undercloud.qcow2"
modify_script: "{{ working_dir }}/undercloud_convert.sh"
modify_image_extract_list:
- /tmp/builder.log
roles:
- modify-image
- name: Run a script inside an image that needs to have lots of resources
hosts: virthost
vars:
image_to_modify: "{{ working_dir }}/undercloud.qcow2"
modify_script: "{{ working_dir }}/undercloud_convert.sh"
modify_image_vc_cpu: 8
modify_image_vc_ram: 16384
roles:
- modify-image
- name: Run a script inside an image with virt-customize in verbose mode
hosts: virthost
vars:
image_to_modify: "{{ working_dir }}/undercloud.qcow2"
modify_script: "{{ working_dir }}/undercloud_convert.sh"
modify_image_verbose: true
roles:
- modify-image
- name: Upload files to image
hosts: virthost
vars:
image_to_modify: "{{ working_dir }}/undercloud.qcow2"
modify_image_upload_files:
- src: /tmp/file_to_upload.tar.gz
dest: /home/user/renamed_file.tar.gz
- src: /home/local_user/file
dest: /home/image_user/
roles:
- modify-image
- name: Upload files to image and run script
hosts: virthost
vars:
image_to_modify: "{{ working_dir }}/undercloud.qcow2"
modify_image_upload_files:
- src: /tmp/file_to_upload.tar.gz
dest: /home/user/renamed_file.tar.gz
- src: /home/local_user/file
dest: /tmp/
modify_script: "{{ working_dir }}/undercloud_convert.sh"
roles:
- modify-image
- name: Install packages in the image
hosts: virthost
vars:
image_to_modify: "{{ working_dir }}/{{ overcloud_image }}.qcow2"
modify_image_install_packages:
- 'package_to_be_installed_1'
- 'package_to_be_installed_2'
- 'package_to_be_installed_3'
include_role:
name: modify-image
- name: Upload an RPM file and install it in the image
hosts: virthost
vars:
image_to_modify: "{{ working_dir }}/{{ overcloud_image }}.qcow2"
modify_image_upload_files:
- src: "/tmp/rpm_to_be_uploaded.rpm"
dest: /root/rpm_to_be_installed.rpm
modify_image_install_packages:
- '/root/rpm_to_be_installed.rpm'
include_role:
name: modify-image
License
Apache