mirror of
https://opendev.org/openstack/ansible-collections-openstack.git
synced 2026-07-25 01:04:28 +00:00
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>
104 lines
3.3 KiB
YAML
104 lines
3.3 KiB
YAML
---
|
|
- 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 }}"
|