mirror of
https://opendev.org/openstack/ansible-collections-openstack.git
synced 2026-05-06 05:13:01 +00:00
Glance images can be deactivated ad reactivated with corresponding API calls. It might be useful for operators to be able to control these states through ansible modules as well. Instead of introduction of the new parameter we're adding new state for the image that is `inactive`. Change-Id: I0738ff564f81a31690872450a4731340ed6bbeb1
377 lines
9.6 KiB
YAML
377 lines
9.6 KiB
YAML
---
|
|
- name: Test images
|
|
block:
|
|
- name: List all images
|
|
openstack.cloud.image_info:
|
|
cloud: "{{ cloud }}"
|
|
register: images
|
|
|
|
- name: Assert existence of CirrOS image
|
|
assert:
|
|
that:
|
|
- images.images | length > 0
|
|
|
|
- name: Ensure clean environment
|
|
ansible.builtin.set_fact:
|
|
tmp_file: !!null
|
|
|
|
- name: Create a test image file
|
|
ansible.builtin.tempfile:
|
|
register: tmp_file
|
|
|
|
- name: Fill test image file to 1MB
|
|
community.general.filesize:
|
|
path: '{{ tmp_file.path }}'
|
|
size: 1M
|
|
|
|
- name: Calculating file checksum
|
|
ansible.builtin.stat:
|
|
path: "{{ tmp_file.path }}"
|
|
checksum_algorithm: sha512
|
|
get_checksum: true
|
|
register: image_details
|
|
|
|
- name: Ensure mock kernel and ramdisk images (defaults)
|
|
openstack.cloud.image:
|
|
cloud: "{{ cloud }}"
|
|
state: present
|
|
name: "{{ item }}"
|
|
filename: "{{ tmp_file.path }}"
|
|
disk_format: raw
|
|
loop:
|
|
- cirros-vmlinuz
|
|
- cirros-initrd
|
|
|
|
- name: Create raw image (defaults)
|
|
openstack.cloud.image:
|
|
cloud: "{{ cloud }}"
|
|
state: present
|
|
name: ansible_image
|
|
filename: "{{ tmp_file.path }}"
|
|
is_protected: true
|
|
checksum: "{{ image_details.stat.checksum }}"
|
|
disk_format: raw
|
|
tags:
|
|
- test
|
|
- ansible
|
|
register: image
|
|
|
|
- name: Assert changed
|
|
assert:
|
|
that:
|
|
- image is changed
|
|
|
|
- name: Assert return values of image module
|
|
assert:
|
|
that:
|
|
- image is changed
|
|
- image.image.name == 'ansible_image'
|
|
# allow new fields to be introduced but prevent fields from being removed
|
|
- expected_fields|difference(image.image.keys())|length == 0
|
|
|
|
- name: Get details of created image
|
|
openstack.cloud.image_info:
|
|
cloud: "{{ cloud }}"
|
|
image: ansible_image
|
|
register: images
|
|
|
|
- name: Assert return values of image_info module
|
|
assert:
|
|
that:
|
|
- images.images | length > 0
|
|
- images.images.0.name == "ansible_image"
|
|
- images.images.0.tags | sort == ['test', 'ansible'] | sort
|
|
# allow new fields to be introduced but prevent fields from being removed
|
|
- expected_fields|difference(images.images.0.keys())|length == 0
|
|
|
|
- name: Create raw image again (defaults)
|
|
openstack.cloud.image:
|
|
cloud: "{{ cloud }}"
|
|
state: present
|
|
name: ansible_image
|
|
filename: "{{ tmp_file.path }}"
|
|
is_protected: true
|
|
disk_format: raw
|
|
tags:
|
|
- test
|
|
- ansible
|
|
register: image
|
|
|
|
- name: Assert not changed
|
|
assert:
|
|
that:
|
|
- image is not changed
|
|
|
|
- name: Update is_protected on raw image (defaults)
|
|
openstack.cloud.image:
|
|
cloud: "{{ cloud }}"
|
|
state: present
|
|
name: ansible_image
|
|
is_protected: false
|
|
register: image
|
|
|
|
- name: Assert changed
|
|
assert:
|
|
that:
|
|
- image is changed
|
|
- image.image.is_protected == false
|
|
|
|
- name: Assert changed
|
|
assert:
|
|
that:
|
|
- image is changed
|
|
|
|
- name: Update visibility on raw image (defaults)
|
|
openstack.cloud.image:
|
|
cloud: "{{ cloud }}"
|
|
state: present
|
|
name: ansible_image
|
|
is_public: false
|
|
register: image
|
|
|
|
- name: Assert changed
|
|
assert:
|
|
that:
|
|
- image.image.visibility == 'private'
|
|
|
|
- name: Update again visibility on raw image (defaults)
|
|
openstack.cloud.image:
|
|
cloud: "{{ cloud }}"
|
|
state: present
|
|
name: ansible_image
|
|
is_public: true
|
|
register: image
|
|
|
|
- name: Assert changed
|
|
assert:
|
|
that:
|
|
- image is changed
|
|
- image.image.visibility == 'public'
|
|
|
|
- name: Define visibility on raw image (defaults)
|
|
openstack.cloud.image:
|
|
cloud: "{{ cloud }}"
|
|
state: present
|
|
name: ansible_image
|
|
visibility: shared
|
|
register: image
|
|
|
|
- name: Assert changed
|
|
assert:
|
|
that:
|
|
- image is changed
|
|
- image.image.visibility == 'shared'
|
|
|
|
- name: Rename raw image (defaults)
|
|
openstack.cloud.image:
|
|
cloud: "{{ cloud }}"
|
|
state: present
|
|
id: "{{ image.image.id }}"
|
|
name: 'ansible_image-changed'
|
|
register: image
|
|
|
|
- name: Assert changed
|
|
assert:
|
|
that:
|
|
- image is changed
|
|
- image.image.name == 'ansible_image-changed'
|
|
|
|
- name: Deactivate raw image
|
|
openstack.cloud.image:
|
|
cloud: "{{ cloud }}"
|
|
state: inactive
|
|
id: "{{ image.image.id }}"
|
|
name: 'ansible_image-changed'
|
|
register: image
|
|
|
|
- name: Assert changed
|
|
assert:
|
|
that:
|
|
- image is changed
|
|
- image.image.status == 'deactivated'
|
|
|
|
- name: Reactivate raw image
|
|
openstack.cloud.image:
|
|
cloud: "{{ cloud }}"
|
|
state: present
|
|
id: "{{ image.image.id }}"
|
|
name: 'ansible_image-changed'
|
|
register: image
|
|
|
|
- name: Assert changed
|
|
assert:
|
|
that:
|
|
- image is changed
|
|
- image.image.status == 'active'
|
|
|
|
- name: Rename back raw image (defaults)
|
|
openstack.cloud.image:
|
|
cloud: "{{ cloud }}"
|
|
state: present
|
|
id: "{{ image.image.id }}"
|
|
name: ansible_image
|
|
register: image
|
|
|
|
- name: Delete raw image (defaults)
|
|
openstack.cloud.image:
|
|
cloud: "{{ cloud }}"
|
|
state: absent
|
|
name: ansible_image
|
|
register: image
|
|
|
|
- name: assert image changed
|
|
assert:
|
|
that:
|
|
- image is changed
|
|
|
|
- name: Delete raw image again (defaults)
|
|
openstack.cloud.image:
|
|
cloud: "{{ cloud }}"
|
|
state: absent
|
|
name: ansible_image
|
|
register: image
|
|
|
|
- name: assert image not changed
|
|
assert:
|
|
that:
|
|
- image is not changed
|
|
|
|
- name: Create raw image (complex)
|
|
openstack.cloud.image:
|
|
cloud: "{{ cloud }}"
|
|
state: present
|
|
name: ansible_image
|
|
filename: "{{ tmp_file.path }}"
|
|
disk_format: raw
|
|
is_public: True
|
|
min_disk: 10
|
|
min_ram: 1024
|
|
# TODO(rcastillo): upload cirros-vmlinuz, cirros-initrd in test setup
|
|
kernel: cirros-vmlinuz
|
|
ramdisk: cirros-initrd
|
|
properties:
|
|
cpu_arch: x86_64
|
|
distro: ubuntu
|
|
register: image
|
|
|
|
- name: Assert visibility
|
|
assert:
|
|
that:
|
|
- image.image.visibility == 'public'
|
|
|
|
- name: Delete raw image (complex)
|
|
openstack.cloud.image:
|
|
cloud: "{{ cloud }}"
|
|
state: absent
|
|
name: ansible_image
|
|
|
|
- name: Try to get details of deleted image
|
|
openstack.cloud.image_info:
|
|
cloud: "{{ cloud }}"
|
|
image: ansible_image
|
|
register: images
|
|
|
|
- name: Verify image is deleted
|
|
assert:
|
|
that:
|
|
- images.images | length == 0
|
|
|
|
- name: Create owner project
|
|
openstack.cloud.project:
|
|
cloud: "{{ cloud }}"
|
|
state: present
|
|
name: ansible_project
|
|
description: Project owning test image
|
|
domain: default
|
|
is_enabled: True
|
|
register: project
|
|
|
|
- name: Create raw image (owner by project name)
|
|
openstack.cloud.image:
|
|
cloud: "{{ cloud }}"
|
|
state: present
|
|
name: ansible_image
|
|
filename: "{{ tmp_file.path }}"
|
|
disk_format: raw
|
|
tags:
|
|
- test
|
|
- ansible
|
|
project: ansible_project
|
|
register: image
|
|
|
|
- name: Get details of created image (owner by project name)
|
|
openstack.cloud.image_info:
|
|
cloud: "{{ cloud }}"
|
|
image: ansible_image
|
|
register: images
|
|
|
|
- name: Verify image owner (owner by project name)
|
|
assert:
|
|
that:
|
|
- images.images.0.owner == project.project.id
|
|
|
|
- name: Delete raw image (owner by project name)
|
|
openstack.cloud.image:
|
|
cloud: "{{ cloud }}"
|
|
state: absent
|
|
name: ansible_image
|
|
|
|
- name: Create raw image (owner by project name and domain name)
|
|
openstack.cloud.image:
|
|
cloud: "{{ cloud }}"
|
|
state: present
|
|
name: ansible_image
|
|
filename: "{{ tmp_file.path }}"
|
|
disk_format: raw
|
|
tags:
|
|
- test
|
|
- ansible
|
|
project: ansible_project
|
|
project_domain: default
|
|
register: image
|
|
|
|
- name: Get details of created image (owner by project name and domain name)
|
|
openstack.cloud.image_info:
|
|
cloud: "{{ cloud }}"
|
|
image: ansible_image
|
|
register: images
|
|
|
|
- name: Verify image owner (owner by project name and domain name)
|
|
assert:
|
|
that:
|
|
- images.images.0.owner == project.project.id
|
|
|
|
- name: Delete raw image (owner by project name and domain name)
|
|
openstack.cloud.image:
|
|
cloud: "{{ cloud }}"
|
|
state: absent
|
|
name: ansible_image
|
|
|
|
- name: Delete owner project
|
|
openstack.cloud.project:
|
|
cloud: "{{ cloud }}"
|
|
state: absent
|
|
name: ansible_project
|
|
domain: default
|
|
|
|
- name: Delete mock kernel and ramdisk images
|
|
openstack.cloud.image:
|
|
cloud: "{{ cloud }}"
|
|
state: absent
|
|
name: "{{ item }}"
|
|
loop:
|
|
- cirros-vmlinuz
|
|
- cirros-initrd
|
|
|
|
- name: Delete test image file
|
|
file:
|
|
name: "{{ tmp_file.path }}"
|
|
state: absent
|
|
|
|
always:
|
|
- name: Remove temporary image file
|
|
ansible.builtin.file:
|
|
path: "{{ tmp_file.path }}"
|
|
state: absent
|
|
when: tmp_file is defined and 'path' in tmp_file
|