mirror of
https://opendev.org/openstack/ansible-collections-openstack.git
synced 2026-07-25 01:04:28 +00:00
Add volume_image_metadata
This module introduces the ability to set image metadata which is distinct from regualt volume metadata, and is required for correct boot-from-volume behaviour. This allows workflows such as replication and disaster recovery to correctly preserve image provenance and Nova boot semantics. Change-Id: I55732fbe8fc6bd579b8542f834033650a076db76 Signed-off-by: Simon Dodsley <simon@purestorage.com>
This commit is contained in:
7
ci/roles/volume_image_metadata/defaults/main.yml
Normal file
7
ci/roles/volume_image_metadata/defaults/main.yml
Normal file
@@ -0,0 +1,7 @@
|
||||
---
|
||||
volume_image_metadata_cloud: "{{ cloud | default(omit) }}"
|
||||
volume_image_metadata_volume_name: test-image-metadata-volume
|
||||
volume_image_metadata_size: 1
|
||||
volume_image_metadata:
|
||||
disk_format: qcow2
|
||||
container_format: bare
|
||||
103
ci/roles/volume_image_metadata/tasks/main.yml
Normal file
103
ci/roles/volume_image_metadata/tasks/main.yml
Normal file
@@ -0,0 +1,103 @@
|
||||
---
|
||||
- name: Get available images
|
||||
openstack.cloud.image_info:
|
||||
cloud: "{{ volume_image_metadata_cloud }}"
|
||||
register: image_info
|
||||
|
||||
- name: Select test image
|
||||
set_fact:
|
||||
volume_image_metadata_image_id: >-
|
||||
{{
|
||||
image_info.images
|
||||
| selectattr('status', 'equalto', 'active')
|
||||
| list
|
||||
| first
|
||||
| default({})
|
||||
}}
|
||||
|
||||
- name: Assert an image is available for testing
|
||||
assert:
|
||||
that:
|
||||
- volume_image_metadata_image_id.id is defined
|
||||
fail_msg: "No active images available in the cloud for volume_image_metadata CI test"
|
||||
|
||||
- name: Create a test volume from image
|
||||
openstack.cloud.volume:
|
||||
cloud: "{{ volume_image_metadata_cloud }}"
|
||||
state: present
|
||||
name: "{{ volume_image_metadata_volume_name }}"
|
||||
image: "{{ volume_image_metadata_image_id.id }}"
|
||||
size: "{{ volume_image_metadata_size }}"
|
||||
register: created_volume
|
||||
|
||||
- name: Assert volume was created
|
||||
assert:
|
||||
that:
|
||||
- created_volume.volume is defined
|
||||
- created_volume.volume.id is defined
|
||||
|
||||
- name: Get volume details
|
||||
openstack.cloud.volume_info:
|
||||
cloud: "{{ volume_image_metadata_cloud }}"
|
||||
name: "{{ volume_image_metadata_volume_name }}"
|
||||
register: volume_info
|
||||
|
||||
- name: Assert volume has image metadata
|
||||
assert:
|
||||
that:
|
||||
- volume_info.volumes[0].volume_image_metadata is defined
|
||||
- volume_info.volumes[0].volume_image_metadata | length > 0
|
||||
|
||||
# --------------------------------------------------------------------
|
||||
# Exercise new module
|
||||
# --------------------------------------------------------------------
|
||||
- name: Set volume image metadata
|
||||
openstack.cloud.volume_image_metadata:
|
||||
cloud: "{{ volume_image_metadata_cloud }}"
|
||||
volume: "{{ created_volume.volume.id }}"
|
||||
image_metadata: "{{ volume_image_metadata }}"
|
||||
register: image_meta_result
|
||||
|
||||
- name: Assert image metadata changed
|
||||
assert:
|
||||
that:
|
||||
- image_meta_result.changed | bool
|
||||
|
||||
# --------------------------------------------------------------------
|
||||
# Idempotency check
|
||||
# --------------------------------------------------------------------
|
||||
- name: Set volume image metadata again (idempotent)
|
||||
openstack.cloud.volume_image_metadata:
|
||||
cloud: "{{ volume_image_metadata_cloud }}"
|
||||
volume: "{{ created_volume.volume.id }}"
|
||||
image_metadata: "{{ volume_image_metadata }}"
|
||||
register: image_meta_idempotent
|
||||
|
||||
- name: Assert idempotent behavior
|
||||
assert:
|
||||
that:
|
||||
- not image_meta_idempotent.changed | bool
|
||||
|
||||
# --------------------------------------------------------------------
|
||||
# Verify metadata persisted
|
||||
# --------------------------------------------------------------------
|
||||
- name: Re-fetch volume details
|
||||
openstack.cloud.volume_info:
|
||||
cloud: "{{ volume_image_metadata_cloud }}"
|
||||
name: "{{ volume_image_metadata_volume_name }}"
|
||||
register: final_volume_info
|
||||
|
||||
- name: Verify image metadata values
|
||||
assert:
|
||||
that:
|
||||
- final_volume_info.volumes[0].volume_image_metadata.disk_format == "qcow2"
|
||||
- final_volume_info.volumes[0].volume_image_metadata.container_format == "bare"
|
||||
|
||||
# --------------------------------------------------------------------
|
||||
# Cleanup
|
||||
# --------------------------------------------------------------------
|
||||
- name: Delete test volume
|
||||
openstack.cloud.volume:
|
||||
cloud: "{{ volume_image_metadata_cloud }}"
|
||||
state: absent
|
||||
name: "{{ volume_image_metadata_volume_name }}"
|
||||
Reference in New Issue
Block a user