Image Manager
The OpenStack Image Manager is a tool for managing all machine images on an OpenStack environment.
Requirements
This information is only relevant for the operator of an OpenStack environment. You can skip this section if you want to use OpenStack Image Manager as a normal user and you are not an operator of an OpenStack environment.
The OpenStack Image Service (Glance) is required to upload and discover data assets that are used by other services.
Since this script stores many images in a single project, the Glance quota must be set accordingly high or to unlimited.
[DEFAULT]
user_storage_quota = 1TB
With most storage backends it makes sense to convert the imported images directly to RAW. So it is required for using Ceph and it's features too. Recited from the Ceph documentation QEMU and block devices and Block devices and OpenStack.
The raw data format is really the only sensible format option to use with RBD. Technically, you could use other QEMU-supported formats (such as qcow2 or vmdk), but doing so would add additional overhead, and would also render the volume unsafe for virtual machine live migration when caching (see below) is enabled.
Important Ceph doesn't support QCOW2 for hosting a virtual machine disk. Thus if you want to boot virtual machines in Ceph (ephemeral backend or boot from volume), the Glance image format must be RAW.
See the OpenStack Glance documentation for more details.
This requires the following parameter for the image import workflow.
[taskflow_executor]
conversion_format = raw
[image_import_opts]
image_import_plugins = ['image_decompression', 'image_conversion']
[image_conversion]
output_format = raw
Getting started
This Getting started will upload a private image to your OpenStack environment with the help of the OpenStack Image Manager.
-
Install the openstack-image-manager package with pip.
pip3 install openstack-image-managerThe installation can also be done via pipenv.
A
Pipefilefile is created with this content. The latest version of openstack-image-manager is used.[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"
[packages]
openstack-image-manager = "==0.20250413.0"
[dev-packages]
[requires]
python_version = "3.10"The dependencies are then installed and the shell is prepared for use:
pipenv install
pipenv shell -
Create a image definition in the file
getting-started.ymlin the local directoryimages.---
images:
- name: MyCirros
enable: true
format: qcow2
login: cirros
password: gocubsgo
min_disk: 1
min_ram: 32
status: active
visibility: private
multi: false
meta:
architecture: x86_64
hw_disk_bus: scsi
hw_rng_model: virtio
hw_scsi_model: virtio-scsi
hw_watchdog_action: reset
hypervisor_type: qemu
os_distro: cirros
replace_frequency: never
uuid_validity: none
provided_until: none
tags: []
versions:
- version: '0.6.2'
url: https://github.com/cirros-dev/cirros/releases/download/0.6.2/cirros-0.6.2-x86_64-disk.img
checksum: "sha256:07e44a73e54c94d988028515403c1ed762055e01b83a767edf3c2b387f78ce00"
build_date: 2023-05-30
- version: '0.6.3'
url: https://github.com/cirros-dev/cirros/releases/download/0.6.3/cirros-0.6.3-x86_64-disk.img
checksum: "sha256:7d6355852aeb6dbcd191bcda7cd74f1536cfe5cbf8a10495a7283a8396e4b75b"
build_date: 2024-09-26 -
Run the OpenStack Image Manager. It is assumed that a profile with the name
openstackexists in the clouds.yaml.openstack-image-manager --cloud openstack --filter ".*Cirr.*" --images images/
Image definitions
The configuration consists of different parameter settings, such as values for
minimum RAM or the visibility of the image. Have a look at the examples below
for all parameters. After a change to the configuration, validate it with
tox -- --dry-run.
SCS image standard
- The value of
loginis stored asimage_original_userin the metadata of an image. - If
image_descriptionis not set as meta information,image_descriptionis set to the name of the image. - The value of
build_dateof a specific version of an image is stored asimage_build_datein the metadata of an image. - The value of
urlof a specific version of an image is stored asimage_sourcein the metadata of an image.
Image with regular rebuilds
This type of image definition is used for images that are rebuilt at regular intervals. For example, this is the case for the daily builds of the Ubuntu images.
The attribute multi: true is set.
With this type of image definition, the version of the distribution (or product,
whatever is contained in the image) used is already in the name of the image
definition. The version properties from the definition's versions list
are appended only to older iterations of the image as timestamp suffixes
in parentheses upon each rotation (except for the latest entry).
images:
- name: Ubuntu 24.04
format: qcow2
login: ubuntu
min_disk: 8
min_ram: 512
status: active
visibility: public
multi: true
meta:
architecture: x86_64
hw_disk_bus: scsi
hw_scsi_model: virtio-scsi
hw_watchdog_action: reset
os_distro: ubuntu
os_version: '24.04'
tags: []
versions:
- version: '20240416'
url: https://cloud-images.ubuntu.com/noble/20240416/noble-server-cloudimg-amd64.img
- version: '20240422'
url: https://cloud-images.ubuntu.com/noble/20240422/noble-server-cloudimg-amd64.img
This configuration creates the following images:
- Ubuntu 24.04 (20240416)
- Ubuntu 24.04
If a newer build is added, the following rotation takes place:
- Ubuntu 24.04 (20240416) does not change
- Ubuntu 24.04 becomes Ubuntu 24.04 (20240422)
- the new image becomes Ubuntu 24.04
By default the last three images will be visible. When a fourth image is added, the visibility of
the last image in the list is changed to community and the image can be deleted in the future.
Image without regular rebuild
This type of image definition is used for images that are not rebuilt. For example, this is the case for the flatcar images. For each release of Flatcar there is exactly one image which will not be rebuilt in the future.
The attribute multi: false is set.
With this type of image definition, the version of the distribution (or product,
whatever is contained in the image) used is not in the name of the image definition.
Instead, the version properties from the image definition's versions list
are appended as static version suffixes to the images' names.
images:
- name: RancherOS
format: qcow2
login: rancher
min_disk: 8
min_ram: 2048
status: active
visibility: public
multi: false
meta:
architecture: x86_64
hw_disk_bus: scsi
hw_scsi_model: virtio-scsi
hw_watchdog_action: reset
tags: []
versions:
- version: '1.3.0'
url: https://github.com/rancher/os/releases/download/v1.3.0/rancheros-openstack.img
- version: '1.4.0'
url: https://github.com/rancher/os/releases/download/v1.4.0/rancheros-openstack.img
- version: '1.4.1'
url: https://github.com/rancher/os/releases/download/v1.4.1/rancheros-openstack.img
This configuration creates the following images:
- RancherOS 1.3.0
- RancherOS 1.4.0
- RancherOS 1.4.1
If a new version is added, no rotation takes place. The new version is added as RancherOS x.y.z. Here also the visibility of older images is not changed.
Other properties
Image properties
- Removal of properties is not yet possible
- URL, name and format can not be changed
- Any keys can be added to
meta, these will be added to the image - Existing keys in
metacan be changed, the same applies tomin_diskandmin_ram
Image tags
image status
- deactivation: change
statustodeactivated - reactivation: change
statustoactive
Image visibility
A full documentation about the visibility of images can be found in the Image visibility section in the OpenStack Image Service API Documentation.
- public: set
visibilitytopublic - community: set
visibilitytocommunity - shared: set
visibilitytoshared - private: set
visibilitytoprivate