--- - 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