diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-26 04:06:02 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-26 04:06:02 +0000 |
commit | e3eb94c23206603103f3c4faec6c227f59a1544c (patch) | |
tree | f2639459807ba88f55fc9c54d745bd7075d7f15c /ansible_collections/containers/podman/tests/integration | |
parent | Releasing progress-linux version 9.4.0+dfsg-1~progress7.99u1. (diff) | |
download | ansible-e3eb94c23206603103f3c4faec6c227f59a1544c.tar.xz ansible-e3eb94c23206603103f3c4faec6c227f59a1544c.zip |
Merging upstream version 9.5.1+dfsg.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'ansible_collections/containers/podman/tests/integration')
16 files changed, 1362 insertions, 95 deletions
diff --git a/ansible_collections/containers/podman/tests/integration/targets/podman_container/tasks/main.yml b/ansible_collections/containers/podman/tests/integration/targets/podman_container/tasks/main.yml index a6fd44083..02d664afa 100644 --- a/ansible_collections/containers/podman/tests/integration/targets/podman_container/tasks/main.yml +++ b/ansible_collections/containers/podman/tests/integration/targets/podman_container/tasks/main.yml @@ -15,6 +15,11 @@ podman_version: 4 when: podman_v.stdout is version('4.0.0', '>=') + - name: Set podman version to 5 + set_fact: + podman_version: 5 + when: podman_v.stdout is version('5.0.0', '>=') + - name: Delete all container leftovers from tests containers.podman.podman_container: executable: "{{ test_executable | default('podman') }}" @@ -702,7 +707,7 @@ path: /tmp/containzzzzcontainer1.service register: service_file - - name: Check that container has correct systemd output v4 + - name: Check that container has correct systemd output v4 and quadlet assert: that: - system14.podman_systemd.keys() | list | first == 'containzzzzcontainer1' @@ -712,6 +717,11 @@ - "'autogenerated by Podman' not in system14.podman_systemd.values() | list | first" - "'RestartSec=10' in system14.podman_systemd.values() | list | first" - "'TimeoutStartSec=20' in system14.podman_systemd.values() | list | first" + - system14.podman_quadlet | length > 0 + - system14.podman_quadlet | length > 0 + - "'ContainerName=container1' in system14.podman_quadlet" + - "'Image=alpine' in system14.podman_quadlet" + when: podman_version == 4 - name: Check that container has correct systemd output v3 @@ -855,9 +865,14 @@ dest: "{{ container_tempdir.path }}/latest-releases.yaml" register: alpine_releases_file + - name: Get content of alpine releases file + ansible.builtin.slurp: + src: "{{ container_tempdir.path }}/latest-releases.yaml" + register: latest_releases_file + - name: Download alpine latest rootfs vars: - latest_releases: "{{ lookup('file', alpine_releases_file.dest) }}" + latest_releases: "{{ latest_releases_file.content | b64decode }}" latest_version: "{{ (latest_releases | from_yaml)[0].version }}" latest_branch: "{{ (latest_releases | from_yaml)[0].branch }}" ansible.builtin.unarchive: @@ -1075,6 +1090,264 @@ - attach3 is failed - "'No such file or directory' in attach3.stderr" + - name: Create a Quadlet for container with filename + containers.podman.podman_container: + executable: "{{ test_executable | default('podman') }}" + name: container-quadlet + image: alpine + state: quadlet + quadlet_dir: /tmp + quadlet_filename: customfile + + - name: Check if files exists + stat: + path: /tmp/customfile.container + register: quadlet_file_custom + + - name: Fail if no file is present + assert: + that: + - quadlet_file_custom.stat.exists + + - name: Create a Quadlet for container with filename w/o dir + containers.podman.podman_container: + executable: "{{ test_executable | default('podman') }}" + name: container-quadlet + image: alpine + state: quadlet + quadlet_filename: container11.container + + - name: Check if files exists + stat: + path: ~/.config/containers/systemd/container11.container + register: quadlet_file_custom2 + + - name: Fail if no file is present + assert: + that: + - quadlet_file_custom2.stat.exists + + - name: Create a Quadlet for container with filename w/o dir + containers.podman.podman_container: + executable: "{{ test_executable | default('podman') }}" + name: container-quadlet + image: alpine + state: quadlet + + - name: Check if files exists + stat: + path: ~/.config/containers/systemd/container-quadlet.container + register: quadlet_file_custom3 + + - name: Fail if no file is present + assert: + that: + - quadlet_file_custom3.stat.exists + + - name: Create a Quadlet for container + containers.podman.podman_container: + executable: "{{ test_executable | default('podman') }}" + name: container-quadlet + image: alpine:3.12 + state: quadlet + quadlet_dir: /tmp + command: sleep 1d + recreate: true + etc_hosts: + host1: 127.0.0.1 + host2: 127.0.0.1 + annotation: + this: "annotation_value" + dns: + - 1.1.1.1 + - 8.8.4.4 + dns_search: example.com + cap_add: + - SYS_TIME + - NET_ADMIN + publish: + - "9000:80" + - "9001:8000" + workdir: "/bin" + env: + FOO: bar=1 + BAR: foo + TEST: 1 + BOOL: false + label: + somelabel: labelvalue + otheralbe: othervalue + volumes: + - /tmp:/data + mounts: + - type=devpts,destination=/dev/pts + quadlet_options: + - AutoUpdate=registry + - Unmask=ALL + - SecurityLabelFileType=usr_t + - Annotation=key1=annotation_value1 + - Annotation=key2=annotation_value2 + - | + [Install] + WantedBy=default.target + + - name: Check if files exists + stat: + path: /tmp/container-quadlet.container + register: quadlet_file + + - name: Check output is correct for Quadlet container in /tmp/container-quadlet.container file + assert: + that: + - quadlet_file.stat.exists + + - name: Check for the existence of lines in /tmp/container-quadlet.container + lineinfile: + path: /tmp/container-quadlet.container + line: "{{ item }}" + state: present + check_mode: yes + register: line_check + loop: + - "[Container]" + - "Annotation=this=annotation_value" + - "Annotation=key1=annotation_value1" + - "Annotation=key2=annotation_value2" + - "ContainerName=container-quadlet" + - "Image=alpine:3.12" + - "Exec=sleep 1d" + - "Volume=/tmp:/data" + - "Mount=type=devpts,destination=/dev/pts" + - "WorkingDir=/bin" + - "Unmask=ALL" + - "SecurityLabelFileType=usr_t" + - "Environment=BOOL=False" + - "PublishPort=9001:8000" + - "PodmanArgs=--add-host host2:127.0.0.1" + - "Label=somelabel=labelvalue" + - "WantedBy=default.target" + loop_control: + label: "{{ item }}" + + - name: Fail the task if any line is not present + fail: + msg: "The following line is not present in /tmp/container-quadlet.container: {{ item.item }}" + when: item.changed + loop: "{{ line_check.results }}" + loop_control: + label: "{{ item.item }}" + + - name: Create a Quadlet for container - same + containers.podman.podman_container: + executable: "{{ test_executable | default('podman') }}" + name: container-quadlet + image: alpine:3.12 + state: quadlet + quadlet_dir: /tmp + command: sleep 1d + recreate: true + etc_hosts: + host1: 127.0.0.1 + host2: 127.0.0.1 + annotation: + this: "annotation_value" + dns: + - 1.1.1.1 + - 8.8.4.4 + dns_search: example.com + cap_add: + - SYS_TIME + - NET_ADMIN + publish: + - "9000:80" + - "9001:8000" + workdir: "/bin" + env: + FOO: bar=1 + BAR: foo + TEST: 1 + BOOL: false + label: + somelabel: labelvalue + otheralbe: othervalue + volumes: + - /tmp:/data + mounts: + - type=devpts,destination=/dev/pts + quadlet_options: + - AutoUpdate=registry + - Unmask=ALL + - SecurityLabelFileType=usr_t + - Annotation=key1=annotation_value1 + - Annotation=key2=annotation_value2 + - | + [Install] + WantedBy=default.target + register: quad2 + + - name: Check if quadlet changed + assert: + that: + - quad2 is not changed + + - name: Create a Quadlet for container - different + containers.podman.podman_container: + executable: "{{ test_executable | default('podman') }}" + name: container-quadlet + image: alpine:3.12 + state: quadlet + quadlet_dir: /tmp + command: sleep 1d + recreate: true + etc_hosts: + host1: 127.0.0.45 + host2: 127.0.0.1 + annotation: + this: "annotation_value" + dns: + - 1.1.1.1 + - 8.8.4.4 + dns_search: example.com + cap_add: + - SYS_TIME + - NET_ADMIN + publish: + - "9000:80" + - "9001:8000" + workdir: "/bin" + env: + FOO: bar=1 + BAR: foo + TEST: 1 + BOOL: false + label: + somelabel: labelvalue + otheralbe: othervalue + volumes: + - /tmp:/data + mounts: + - type=devpts,destination=/dev/pts + quadlet_options: + - AutoUpdate=registry + - Unmask=ALL + - SecurityLabelFileType=usr_t + - Annotation=key1=annotation_value1 + - Annotation=key2=annotation_value2 + - | + [Install] + WantedBy=default.target + register: quad3 + + - name: Print diff + debug: + var: quad3.diff + + - name: Check if changed and diff + assert: + that: + - quad3 is changed + - "'127.0.0.45' in quad3.diff.after" + always: - name: Remove container diff --git a/ansible_collections/containers/podman/tests/integration/targets/podman_container_exec/tasks/main.yml b/ansible_collections/containers/podman/tests/integration/targets/podman_container_exec/tasks/main.yml index 2d2874325..623965c10 100644 --- a/ansible_collections/containers/podman/tests/integration/targets/podman_container_exec/tasks/main.yml +++ b/ansible_collections/containers/podman/tests/integration/targets/podman_container_exec/tasks/main.yml @@ -12,6 +12,7 @@ - name: Test exec when the container doesn't exist containers.podman.podman_container_exec: + executable: "{{ test_executable | default('podman') }}" name: "{{ container_name }}" command: "cat /etc/redhat-release" ignore_errors: true @@ -19,6 +20,7 @@ - name: Create and start a container for testing containers.podman.podman_container: + executable: "{{ test_executable | default('podman') }}" name: "{{ container_name }}" image: registry.access.redhat.com/ubi8 command: sleep 1d @@ -26,6 +28,7 @@ - name: Test exec with command and workdir options containers.podman.podman_container_exec: + executable: "{{ test_executable | default('podman') }}" name: "{{ container_name }}" command: "cat redhat-release" workdir: /etc @@ -33,6 +36,7 @@ - name: Test exec with argv and env options containers.podman.podman_container_exec: + executable: "{{ test_executable | default('podman') }}" name: "{{ container_name }}" argv: - /bin/sh @@ -45,6 +49,7 @@ - name: Test exec with detach option containers.podman.podman_container_exec: + executable: "{{ test_executable | default('podman') }}" name: "{{ container_name }}" command: "cat redhat-release" detach: true @@ -59,6 +64,21 @@ - "'goodbye world' in exec2.stdout" - exec3.exec_id is defined + - name: Test exec with failing command + containers.podman.podman_container_exec: + executable: "{{ test_executable | default('podman') }}" + name: "{{ container_name }}" + command: "ls /nonexistent" + register: exec4 + ignore_errors: true + + - name: Check if the result is as expected in case of a failing command + assert: + that: + - exec4 is failed + - "'No such file or directory' in exec4.stderr" + - exec4.rc != 0 + always: - name: Cleanup containers.podman.podman_container: diff --git a/ansible_collections/containers/podman/tests/integration/targets/podman_container_idempotency/tasks/main.yml b/ansible_collections/containers/podman/tests/integration/targets/podman_container_idempotency/tasks/main.yml index 3d3654aea..02b66d250 100644 --- a/ansible_collections/containers/podman/tests/integration/targets/podman_container_idempotency/tasks/main.yml +++ b/ansible_collections/containers/podman/tests/integration/targets/podman_container_idempotency/tasks/main.yml @@ -1,4 +1,24 @@ --- + +- name: Discover podman version + shell: podman version | grep "^Version:" | awk {'print $2'} + register: podman_v + +- name: Set podman version to 3 + set_fact: + podman_version: 3 + when: podman_v.stdout is version('4.0.0', 'lt') + +- name: Set podman version to 4 + set_fact: + podman_version: 4 + when: podman_v.stdout is version('4.0.0', '>=') + +- name: Set podman version to 5 + set_fact: + podman_version: 5 + when: podman_v.stdout is version('5.0.0', '>=') + - name: Prepare a container include_tasks: build_test_container.yml diff --git a/ansible_collections/containers/podman/tests/integration/targets/podman_container_idempotency/tasks/rootless-podman-network.yml b/ansible_collections/containers/podman/tests/integration/targets/podman_container_idempotency/tasks/rootless-podman-network.yml index 62dd3a5a0..3c16efac2 100644 --- a/ansible_collections/containers/podman/tests/integration/targets/podman_container_idempotency/tasks/rootless-podman-network.yml +++ b/ansible_collections/containers/podman/tests/integration/targets/podman_container_idempotency/tasks/rootless-podman-network.yml @@ -109,53 +109,108 @@ that: - info5 is changed - - name: Run container with slirp4netns options - containers.podman.podman_container: - executable: "{{ test_executable | default('podman') }}" - name: rootlessnet - image: "{{ idem_image }}" - command: 1h - state: present - network: - - slirp4netns:allow_host_loopback=true,cidr=10.0.3.0/24 - register: info6 + - when: podman_version < 5 + name: Run container tasks with slirp4netns options before v5 + block: + - name: Run container with slirp4netns options + containers.podman.podman_container: + executable: "{{ test_executable | default('podman') }}" + name: rootlessnet + image: "{{ idem_image }}" + command: 1h + state: present + network: + - slirp4netns:allow_host_loopback=true,cidr=10.0.3.0/24 + register: info6 - - name: Check info with slirp4netns options - assert: - that: - - info6 is changed + - name: Check info with slirp4netns options + assert: + that: + - info6 is changed - - name: Run container with slirp4netns options - again - containers.podman.podman_container: - executable: "{{ test_executable | default('podman') }}" - name: rootlessnet - image: "{{ idem_image }}" - command: 1h - state: present - network: - - slirp4netns:allow_host_loopback=true,cidr=10.0.3.0/24 - register: info7 + - name: Run container with slirp4netns options - again + containers.podman.podman_container: + executable: "{{ test_executable | default('podman') }}" + name: rootlessnet + image: "{{ idem_image }}" + command: 1h + state: present + network: + - slirp4netns:allow_host_loopback=true,cidr=10.0.3.0/24 + register: info7 - - name: Check info with slirp4netns options - again - assert: - that: - - info7 is not changed + - name: Check info with slirp4netns options - again + assert: + that: + - info7 is not changed - - name: Run container with different slirp4netns options - containers.podman.podman_container: - executable: "{{ test_executable | default('podman') }}" - name: rootlessnet - image: "{{ idem_image }}" - command: 1h - state: present - network: - - slirp4netns:allow_host_loopback=true,cidr=10.0.4.0/24 - register: info8 + - name: Run container with different slirp4netns options + containers.podman.podman_container: + executable: "{{ test_executable | default('podman') }}" + name: rootlessnet + image: "{{ idem_image }}" + command: 1h + state: present + network: + - slirp4netns:allow_host_loopback=true,cidr=10.0.4.0/24 + register: info8 - - name: Check info with different slirp4netns options - assert: - that: - - info8 is changed + - name: Check info with different slirp4netns options + assert: + that: + - info8 is changed + + + - when: podman_version >= 5 + name: Run container tasks with pasta options for v5 and later + block: + - name: Run container with pasta options + containers.podman.podman_container: + executable: "{{ test_executable | default('podman') }}" + name: rootlessnet + image: "{{ idem_image }}" + command: 1h + state: present + network: + - "pasta:-4,-t,8007,-u,4443,-T,3000" + register: info6 + + - name: Check info with pasta options + assert: + that: + - info6 is changed + + - name: Run container with pasta options - again + containers.podman.podman_container: + executable: "{{ test_executable | default('podman') }}" + name: rootlessnet + image: "{{ idem_image }}" + command: 1h + state: present + network: + - "pasta:-4,-t,8007,-u,4443,-T,3000" + register: info7 + + - name: Check info with pasta options - again + assert: + that: + - info7 is not changed + + - name: Run container with different pasta options + containers.podman.podman_container: + executable: "{{ test_executable | default('podman') }}" + name: rootlessnet + image: "{{ idem_image }}" + command: 1h + state: present + network: + - "pasta:-4,-t,8008,-u,4443,-T,3000" + register: info8 + + - name: Check info with different pasta options + assert: + that: + - info8 is changed - name: Run container without options containers.podman.podman_container: diff --git a/ansible_collections/containers/podman/tests/integration/targets/podman_generate_systemd/tasks/main.yml b/ansible_collections/containers/podman/tests/integration/targets/podman_generate_systemd/tasks/main.yml index 1e48a11dc..6b0c335cd 100644 --- a/ansible_collections/containers/podman/tests/integration/targets/podman_generate_systemd/tasks/main.yml +++ b/ansible_collections/containers/podman/tests/integration/targets/podman_generate_systemd/tasks/main.yml @@ -1,11 +1,14 @@ - name: A postgres container must exist, stopped containers.podman.podman_container: + executable: "{{ test_executable | default('podman') }}" name: postgres_local image: docker.io/library/postgres:latest + # image: quay.io/enterprisedb/postgresql - use if docker is rate limited state: stopped - name: Generate the systemd units as Ansible variables containers.podman.podman_generate_systemd: + executable: "{{ test_executable | default('podman') }}" name: postgres_local register: postgres_local_systemd_unit ignore_errors: true @@ -29,6 +32,7 @@ - name: Regenerate the systemd units and write them containers.podman.podman_generate_systemd: + executable: "{{ test_executable | default('podman') }}" name: postgres_local dest: /tmp/podman_generate_systemd register: postgres_local_systemd_unit @@ -41,6 +45,7 @@ - name: Try to create a systemd unit file on the same path containers.podman.podman_generate_systemd: + executable: "{{ test_executable | default('podman') }}" name: postgres_local dest: /tmp/podman_generate_systemd register: generate1 @@ -58,6 +63,7 @@ - name: Force to create a systemd unit file on the same path containers.podman.podman_generate_systemd: + executable: "{{ test_executable | default('podman') }}" name: postgres_local dest: /tmp/podman_generate_systemd force: true @@ -83,6 +89,7 @@ - name: Regenerate the systemd units with all the options containers.podman.podman_generate_systemd: + executable: "{{ test_executable | default('podman') }}" name: postgres_local new: true restart_policy: on-abnormal @@ -100,7 +107,6 @@ after: drink.service wants: water.service requires: ice.service - executable: /usr/bin/podman register: postgres_local_systemd_unit ignore_errors: true @@ -123,13 +129,14 @@ - postgres_local_systemd_unit.podman_command is search("--after=drink.service") - postgres_local_systemd_unit.podman_command is search("--wants=water.service") - postgres_local_systemd_unit.podman_command is search("--requires=ice.service") - - postgres_local_systemd_unit.podman_command is search("/usr/bin/podman") + - postgres_local_systemd_unit.podman_command is search("podman") - name: Remove container containers.podman.podman_container: executable: "{{ test_executable | default('podman') }}" name: postgres_local state: absent + - name: Remove the systemd unit files directory ansible.builtin.file: path: /tmp/podman_generate_systemd diff --git a/ansible_collections/containers/podman/tests/integration/targets/podman_image/tasks/main.yml b/ansible_collections/containers/podman/tests/integration/targets/podman_image/tasks/main.yml index 0db4c050c..96133b9da 100644 --- a/ansible_collections/containers/podman/tests/integration/targets/podman_image/tasks/main.yml +++ b/ansible_collections/containers/podman/tests/integration/targets/podman_image/tasks/main.yml @@ -329,6 +329,134 @@ - item.Architecture == "arm" loop: "{{ imageinfo_arch.images }}" + - name: Create a Quadlet for image with filename + containers.podman.podman_image: + executable: "{{ test_executable | default('podman') }}" + name: quay.io/coreos/coreos-installer:latest + state: quadlet + arch: x86_64 + quadlet_dir: /tmp + quadlet_filename: customfile + + - name: Check if files exists + stat: + path: /tmp/customfile.image + register: quadlet_file_custom + + - name: Fail if no file is present + assert: + that: + - quadlet_file_custom.stat.exists + + - name: Create quadlet image file + containers.podman.podman_image: + executable: "{{ test_executable | default('podman') }}" + name: quay.io/coreos/coreos-installer:latest + state: quadlet + arch: x86_64 + ca_cert_dir: /etc/docker/certs.d + username: user + password: pass + validate_certs: false + quadlet_dir: /tmp/ + quadlet_options: + - "ImageTag=quay.io/coreos/coreos-installer:12345" + - "AllTags=true" + - |- + [Install] + WantedBy=default.target + + - name: Check if files exists + stat: + path: /tmp/coreos-installer.image + register: quadlet_file + + - name: Check output is correct for Quadlet image in /tmp/coreos-installer.image file + assert: + that: + - quadlet_file.stat.exists + + - name: Check for the existence of lines in /tmp/coreos-installer.image + lineinfile: + path: /tmp/coreos-installer.image + line: "{{ item }}" + state: present + check_mode: yes + register: line_check + loop: + - "[Image]" + - "Image=quay.io/coreos/coreos-installer:latest" + - "ImageTag=quay.io/coreos/coreos-installer:12345" + - "AllTags=true" + - "WantedBy=default.target" + - "Arch=x86_64" + - "CertDir=/etc/docker/certs.d" + - "Creds=user:pass" + - "TLSVerify=false" + loop_control: + label: "{{ item }}" + + - name: Fail the task if any line is not present + fail: + msg: "The following line is not present in /tmp/coreos-installer.image: {{ item.item }}" + when: item.changed + loop: "{{ line_check.results }}" + loop_control: + label: "{{ item.item }}" + + - name: Create quadlet image file - same + containers.podman.podman_image: + executable: "{{ test_executable | default('podman') }}" + name: quay.io/coreos/coreos-installer:latest + state: quadlet + arch: x86_64 + ca_cert_dir: /etc/docker/certs.d + username: user + password: pass + validate_certs: false + quadlet_dir: /tmp + quadlet_options: + - "ImageTag=quay.io/coreos/coreos-installer:12345" + - "AllTags=true" + - |- + [Install] + WantedBy=default.target + register: quad2 + + - name: Check if quadlet changed + assert: + that: + - quad2 is not changed + + - name: Create quadlet image file - different + containers.podman.podman_image: + executable: "{{ test_executable | default('podman') }}" + name: quay.io/coreos/coreos-installer:latest + state: quadlet + arch: arm64 + ca_cert_dir: /etc/docker/certs.d + username: user + password: pass + validate_certs: false + quadlet_dir: /tmp/ + quadlet_options: + - "ImageTag=quay.io/coreos/coreos-installer:12345" + - "AllTags=true" + - |- + [Install] + WantedBy=default.target + register: quad3 + + - name: Print diff + debug: + var: quad3.diff + + - name: Check if changed and diff + assert: + that: + - quad3 is changed + - "'arm64' in quad3.diff.after" + always: - name: Cleanup images containers.podman.podman_image: diff --git a/ansible_collections/containers/podman/tests/integration/targets/podman_network/tasks/main.yml b/ansible_collections/containers/podman/tests/integration/targets/podman_network/tasks/main.yml index d207e4cef..272ac6b43 100644 --- a/ansible_collections/containers/podman/tests/integration/targets/podman_network/tasks/main.yml +++ b/ansible_collections/containers/podman/tests/integration/targets/podman_network/tasks/main.yml @@ -350,6 +350,131 @@ that: - info17 is not changed + - name: Create a Quadlet for network with filename + containers.podman.podman_network: + executable: "{{ test_executable | default('podman') }}" + name: testnet + state: quadlet + quadlet_dir: /tmp + quadlet_filename: customfile + + - name: Check if files exists + stat: + path: /tmp/customfile.network + register: quadlet_file_custom + + - name: Fail if no file is present + assert: + that: + - quadlet_file_custom.stat.exists + + - name: Create quadlet network file + containers.podman.podman_network: + executable: "{{ test_executable | default('podman') }}" + name: testnet + state: quadlet + disable_dns: true + subnet: "10.123.12.0" + internal: false + opt: + isolate: true + mtu: 1511 + vlan: 111 + quadlet_dir: /tmp + quadlet_options: + - "Label=Test=network" + - "Label=foo=bar" + + - name: Check if files exists + stat: + path: /tmp/testnet.network + register: quadlet_file + + - name: Check output is correct for Quadlet network in /tmp/testnet.network file + assert: + that: + - quadlet_file.stat.exists + + - name: Check for the existence of lines in /tmp/testnet.network + lineinfile: + path: /tmp/testnet.network + line: "{{ item }}" + state: present + check_mode: yes + register: line_check + loop: + - "[Network]" + - "NetworkName=testnet" + - "Subnet=10.123.12.0" + - "DisableDNS=true" + - "Internal=false" + - "Options=isolate=True" + - "Options=mtu=1511" + - "Options=vlan=111" + - "Label=Test=network" + - "Label=foo=bar" + loop_control: + label: "{{ item }}" + + - name: Fail the task if any line is not present + fail: + msg: "The following line is not present in /tmp/testnet.network: {{ item.item }}" + when: item.changed + loop: "{{ line_check.results }}" + loop_control: + label: "{{ item.item }}" + + - name: Create quadlet network file - same + containers.podman.podman_network: + executable: "{{ test_executable | default('podman') }}" + name: testnet + state: quadlet + disable_dns: true + subnet: "10.123.12.0" + internal: false + opt: + isolate: true + mtu: 1511 + vlan: 111 + quadlet_dir: /tmp + quadlet_options: + - "Label=Test=network" + - "Label=foo=bar" + register: quad2 + + - name: Check if quadlet changed + assert: + that: + - quad2 is not changed + + - name: Create quadlet network file - different + containers.podman.podman_network: + executable: "{{ test_executable | default('podman') }}" + name: testnet + state: quadlet + disable_dns: true + subnet: "10.123.15.0" + internal: false + opt: + isolate: true + mtu: 1511 + vlan: 111 + quadlet_dir: /tmp + quadlet_options: + - "Label=Test=network" + - "Label=foo=bar" + register: quad3 + + - name: Print diff + debug: + var: quad3.diff + + - name: Check if changed and diff + assert: + that: + - quad3 is changed + - "'10.123.15.0' in quad3.diff.after" + always: - name: Cleanup diff --git a/ansible_collections/containers/podman/tests/integration/targets/podman_play/tasks/files/multi-yaml.yml b/ansible_collections/containers/podman/tests/integration/targets/podman_play/tasks/files/multi-yaml.yml new file mode 100644 index 000000000..2a969556b --- /dev/null +++ b/ansible_collections/containers/podman/tests/integration/targets/podman_play/tasks/files/multi-yaml.yml @@ -0,0 +1,27 @@ +kind: ConfigMap +metadata: + name: foo +data: + FOO: bar +--- +apiVersion: v1 +kind: Pod +metadata: + name: foobar +spec: + containers: + - command: + - top + name: container-1 + image: alpine + envFrom: + - configMapRef: + name: foo + optional: false +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: foo2 +data: + FOO2: bar2
\ No newline at end of file diff --git a/ansible_collections/containers/podman/tests/integration/targets/podman_play/tasks/main.yml b/ansible_collections/containers/podman/tests/integration/targets/podman_play/tasks/main.yml index ae9d8572b..d22615e45 100644 --- a/ansible_collections/containers/podman/tests/integration/targets/podman_play/tasks/main.yml +++ b/ansible_collections/containers/podman/tests/integration/targets/podman_play/tasks/main.yml @@ -107,6 +107,180 @@ that: - info1['pods'][0]['State'] == 'Running' + - name: Remove pods created by kube play + containers.podman.podman_play: + executable: "{{ test_executable | default('podman') }}" + kube_file: /tmp/play3.yaml + state: absent + register: remove_pod + + - name: Check if the pod was removed as expected + assert: + that: + - remove_pod is changed + + - name: Get deleted pod info + containers.podman.podman_pod_info: + executable: "{{ test_executable | default('podman') }}" + name: web-deploy-pod + register: nonexist + + - name: Check if the result is as expected + assert: + that: + - nonexist.pods == [] + + + - name: Create a Quadlet for kube with filename + containers.podman.podman_play: + executable: "{{ test_executable | default('podman') }}" + kube_file: /home/kubeuser/tmp/multipod.yaml + state: quadlet + quadlet_dir: /tmp + quadlet_filename: customfile + + - name: Check if files exists + stat: + path: /tmp/customfile.kube + register: quadlet_file_custom + + - name: Fail if no file is present + assert: + that: + - quadlet_file_custom.stat.exists + + - name: Create a kube quadlet without filename + containers.podman.podman_play: + executable: "{{ test_executable | default('podman') }}" + kube_file: /home/kubeuser/tmp/multipod.yaml + state: quadlet + quadlet_dir: /tmp + register: quadlet_file_no_name + ignore_errors: true + + - name: Check that task failed + assert: + that: + - quadlet_file_no_name is failed + + - name: Create a kube quadlet + containers.podman.podman_play: + executable: "{{ test_executable | default('podman') }}" + kube_file: /home/kubeuser/tmp/multipod.yaml + state: quadlet + userns: keep-id:uid=200,gid=210 + log_driver: journald + network: host + configmap: + - /tmp/configmap1 + - /tmp/configmap2 + debug: true + quadlet_dir: /tmp + quadlet_filename: quadlet + quadlet_options: + - "PodmanArgs=--annotation=key1=value1" + - "PodmanArgs=--context-dir /my/path" + - | + [Install] + WantedBy=default.target + + - name: Check if files exists + stat: + path: /tmp/quadlet.kube + register: quadlet_file + + - name: Check output is correct for Quadlet container in /tmp/quadlet.kube file + assert: + that: + - quadlet_file.stat.exists + + - name: Check for the existence of lines in /tmp/quadlet.kube + lineinfile: + path: /tmp/quadlet.kube + line: "{{ item }}" + state: present + check_mode: yes + register: line_check + loop: + - "[Kube]" + - "ConfigMap=/tmp/configmap1" + - "ConfigMap=/tmp/configmap2" + - "LogDriver=journald" + - "Network=host" + - "Yaml=/home/kubeuser/tmp/multipod.yaml" + - "UserNS=keep-id:uid=200,gid=210" + - "GlobalArgs=--log-level debug" + - "WantedBy=default.target" + loop_control: + label: "{{ item }}" + + - name: Fail the task if any line is not present + fail: + msg: "The following line is not present in /tmp/quadlet.kube: {{ item.item }}" + when: item.changed + loop: "{{ line_check.results }}" + loop_control: + label: "{{ item.item }}" + + - name: Create a kube quadlet - same + containers.podman.podman_play: + executable: "{{ test_executable | default('podman') }}" + kube_file: /home/kubeuser/tmp/multipod.yaml + state: quadlet + userns: keep-id:uid=200,gid=210 + log_driver: journald + network: host + configmap: + - /tmp/configmap1 + - /tmp/configmap2 + debug: true + quadlet_dir: /tmp + quadlet_filename: quadlet.kube + quadlet_options: + - "PodmanArgs=--annotation=key1=value1" + - "PodmanArgs=--context-dir /my/path" + - | + [Install] + WantedBy=default.target + register: quad2 + + - name: Check if quadlet changed + assert: + that: + - quad2 is not changed + + - name: Create a kube quadlet - different + containers.podman.podman_play: + executable: "{{ test_executable | default('podman') }}" + kube_file: /home/kubeuser/tmp/multipod.yaml + state: quadlet + userns: keep-id:uid=200,gid=210 + log_driver: journald + network: host + configmap: + - /tmp/configmap55 + - /tmp/configmap2 + debug: true + quadlet_dir: /tmp + quadlet_filename: quadlet.kube + quadlet_options: + - "PodmanArgs=--annotation=key1=value1" + - "PodmanArgs=--context-dir /my/path" + - | + [Install] + WantedBy=default.target + register: quad3 + + - name: Print diff + debug: + var: quad3.diff + + - name: Check if changed and diff + assert: + that: + - quad3 is changed + - "'configmap55' in quad3.diff.after" + always: - name: Delete all pods leftovers from tests @@ -145,4 +319,12 @@ size: 10mb userns: host kube_dir: /tmp - kube_file: play-pod.yaml
\ No newline at end of file + kube_file: play-pod.yaml + +- name: Test play kube with multi doc yaml + include_tasks: play-multi-yaml.yml + vars: + ansible_python_interpreter: "/usr/bin/python" + kube_dir: /tmp + kube_file: multi-yaml.yml + target_container: foobar-container-1 diff --git a/ansible_collections/containers/podman/tests/integration/targets/podman_play/tasks/play-multi-yaml.yml b/ansible_collections/containers/podman/tests/integration/targets/podman_play/tasks/play-multi-yaml.yml new file mode 100644 index 000000000..5eae4f5e5 --- /dev/null +++ b/ansible_collections/containers/podman/tests/integration/targets/podman_play/tasks/play-multi-yaml.yml @@ -0,0 +1,40 @@ +--- +- name: Test kube play wih multi doc yaml + block: + - name: Copy kube file + copy: + src: "{{ kube_file }}" + dest: "{{ kube_dir }}/{{ kube_file }}" + remote_src: false + + - name: Create Pod with multi doc yaml + containers.podman.podman_play: + executable: "{{ test_executable | default('podman') }}" + kube_file: "{{ kube_dir }}/{{ kube_file }}" + state: started + recreate: true + register: play_pod + + - name: Get pod info + containers.podman.podman_container_info: + executable: "{{ test_executable | default('podman') }}" + name: "{{ target_container }}" + register: info + + - name: Check if an expected container is running + assert: + that: + - info.containers.0.State.Running == true + - '"FOO=bar" in info.containers.0.Config.Env' + + - name: Cleanup pod + containers.podman.podman_play: + executable: "{{ test_executable | default('podman') }}" + kube_file: "{{ kube_dir }}/{{ kube_file }}" + state: absent + register: remove_pod + + - name: Check if the pod was removed as expected + assert: + that: + - remove_pod is changed diff --git a/ansible_collections/containers/podman/tests/integration/targets/podman_play/tasks/play-with-build.yml b/ansible_collections/containers/podman/tests/integration/targets/podman_play/tasks/play-with-build.yml index e7601f531..32fde5d6a 100644 --- a/ansible_collections/containers/podman/tests/integration/targets/podman_play/tasks/play-with-build.yml +++ b/ansible_collections/containers/podman/tests/integration/targets/podman_play/tasks/play-with-build.yml @@ -9,6 +9,7 @@ - name: Make sure that {{ image_name }} image is absent containers.podman.podman_image: + executable: "{{ test_executable | default('podman') }}" name: "{{ image_name }}" state: absent @@ -31,6 +32,7 @@ - name: Play kube file with image build containers.podman.podman_play: + executable: "{{ test_executable | default('podman') }}" kube_file: "{{ kube_dir }}/kube-buil-test.yaml" build: true context_dir: "{{ build_context_dir }}" @@ -47,5 +49,6 @@ - name: Cleanup pods containers.podman.podman_play: + executable: "{{ test_executable | default('podman') }}" kube_file: "{{ kube_dir }}/kube-buil-test.yaml" state: absent diff --git a/ansible_collections/containers/podman/tests/integration/targets/podman_play/tasks/play-with-options.yml b/ansible_collections/containers/podman/tests/integration/targets/podman_play/tasks/play-with-options.yml index aeb79a5bc..40167368b 100644 --- a/ansible_collections/containers/podman/tests/integration/targets/podman_play/tasks/play-with-options.yml +++ b/ansible_collections/containers/podman/tests/integration/targets/podman_play/tasks/play-with-options.yml @@ -9,6 +9,7 @@ - name: Create Pod with many options containers.podman.podman_play: + executable: "{{ test_executable | default('podman') }}" kube_file: "{{ kube_dir }}/{{ kube_file }}" state: started recreate: true @@ -23,6 +24,7 @@ - name: Get pod info containers.podman.podman_pod_info: + executable: "{{ test_executable | default('podman') }}" name: "{{ target_pod }}" register: play_pod_info @@ -33,6 +35,7 @@ - name: Get container info containers.podman.podman_container_info: + executable: "{{ test_executable | default('podman') }}" name: "{{ target_container }}" register: play_container_info @@ -48,5 +51,6 @@ - name: Cleanup pods containers.podman.podman_play: + executable: "{{ test_executable | default('podman') }}" kube_file: "{{ kube_dir }}/{{ kube_file }}" state: absent diff --git a/ansible_collections/containers/podman/tests/integration/targets/podman_pod/tasks/main.yml b/ansible_collections/containers/podman/tests/integration/targets/podman_pod/tasks/main.yml index abee17596..cb455aa23 100644 --- a/ansible_collections/containers/podman/tests/integration/targets/podman_pod/tasks/main.yml +++ b/ansible_collections/containers/podman/tests/integration/targets/podman_pod/tasks/main.yml @@ -15,6 +15,21 @@ podman_version: 2 when: podman_v.stdout is version('2.0.0', '>=') + - name: Set podman version to 3 + set_fact: + podman_version: 3 + when: podman_v.stdout is version('3.0.0', '>=') + + - name: Set podman version to 4 + set_fact: + podman_version: 4 + when: podman_v.stdout is version('4.0.0', '>=') + + - name: Set podman version to 5 + set_fact: + podman_version: 5 + when: podman_v.stdout is version('5.0.0', '>=') + - name: Discover cgroups version shell: podman info | grep cgroupVersion | awk {'print $2'} register: cgroups @@ -153,6 +168,7 @@ pod6_info.pod['State']['status'] == 'Exited') or (pod6_info.pod['State']['status'] is not defined and pod6_info.pod['State'] == 'Exited') + when: podman_version < 5 - name: Start pod containers.podman.podman_pod: @@ -826,69 +842,289 @@ that: - not podsys2_stat.stat.exists|bool - - name: Run pod2 with network slirp4netns + - name: Run slirp4netns tests for podman < 5 + when: podman_version < 5 + block: + + - name: Run pod2 with network slirp4netns + containers.podman.podman_pod: + executable: "{{ test_executable | default('podman') }}" + name: pod2 + state: started + network: slirp4netns:outbound_addr=10.10.10.46 + + - name: Run container1 in pod + containers.podman.podman_container: + executable: "{{ test_executable | default('podman') }}" + name: container1 + image: alpine + command: top + pod: pod2 + state: started + + - name: Run pod2 with network slirp4netns - again + containers.podman.podman_pod: + executable: "{{ test_executable | default('podman') }}" + name: pod2 + state: started + network: slirp4netns:outbound_addr=10.10.10.46 + register: slip4net_pod + + - name: Run container1 in pod slirp4netns + containers.podman.podman_container: + executable: "{{ test_executable | default('podman') }}" + name: container1 + image: alpine + command: top + pod: pod2 + state: started + register: slip4net_cont + + - name: Check that slirp4netns is idempotent + assert: + that: + - slip4net_pod is not changed + - slip4net_cont is not changed + + - name: Run pod2 with different network slirp4netns + containers.podman.podman_pod: + executable: "{{ test_executable | default('podman') }}" + name: pod2 + state: started + network: slirp4netns:outbound_addr=10.10.10.47 + register: slip4net_pod2 + + - name: Run container1 in different pod slirp4netns + containers.podman.podman_container: + executable: "{{ test_executable | default('podman') }}" + name: container1 + image: alpine + command: top + pod: pod2 + state: started + register: slip4net_cont2 + + - name: Check that slirp4netns is idempotent and changed + assert: + that: + - slip4net_pod2 is changed + - slip4net_cont2 is changed + + - name: Run pasta tests for podman >= 5 + when: podman_version >= 5 + block: + + - name: Run pod2 with network pasta + containers.podman.podman_pod: + executable: "{{ test_executable | default('podman') }}" + name: pod2 + state: started + network: + - "pasta:-4,-t,8007,-u,4443,-T,3000" + + - name: Run container1 in pod + containers.podman.podman_container: + executable: "{{ test_executable | default('podman') }}" + name: container1 + image: alpine + command: top + pod: pod2 + state: started + + - name: Run pod2 with network pasta - again + containers.podman.podman_pod: + executable: "{{ test_executable | default('podman') }}" + name: pod2 + state: started + network: + - "pasta:-4,-t,8007,-u,4443,-T,3000" + register: pasta_pod + + - name: Run container1 in pod pasta + containers.podman.podman_container: + executable: "{{ test_executable | default('podman') }}" + name: container1 + image: alpine + command: top + pod: pod2 + state: started + register: pasta_cont + + - name: Check that pasta is idempotent + assert: + that: + - pasta_pod is not changed + - pasta_cont is not changed + + - name: Run pod2 with different network pasta + containers.podman.podman_pod: + executable: "{{ test_executable | default('podman') }}" + name: pod2 + state: started + network: + - "pasta:-4,-t,8008,-u,4443,-T,3000" + register: pasta_pod2 + + - name: Run container1 in different pod slirp4netns + containers.podman.podman_container: + executable: "{{ test_executable | default('podman') }}" + name: container1 + image: alpine + command: top + pod: pod2 + state: started + register: pasta_cont2 + + - name: Check that slirp4netns is idempotent and changed + assert: + that: + - pasta_pod2 is changed + - pasta_cont2 is changed + + - name: Create a Quadlet for pod with filename containers.podman.podman_pod: executable: "{{ test_executable | default('podman') }}" - name: pod2 - state: started - network: slirp4netns:outbound_addr=10.10.10.46 + name: podq + state: quadlet + network: examplenet + quadlet_dir: /tmp + quadlet_filename: customfile - - name: Run container1 in pod - containers.podman.podman_container: - executable: "{{ test_executable | default('podman') }}" - name: container1 - image: alpine - command: top - pod: pod2 - state: started + - name: Check if files exists + stat: + path: /tmp/customfile.pod + register: quadlet_file_custom - - name: Run pod2 with network slirp4netns - again - containers.podman.podman_pod: - executable: "{{ test_executable | default('podman') }}" - name: pod2 - state: started - network: slirp4netns:outbound_addr=10.10.10.46 - register: slip4net_pod + - name: Fail if no file is present + assert: + that: + - quadlet_file_custom.stat.exists - - name: Run container1 in pod slirp4netns - containers.podman.podman_container: + - name: Create a Quadlet pod file + containers.podman.podman_pod: executable: "{{ test_executable | default('podman') }}" - name: container1 - image: alpine - command: top - pod: pod2 - state: started - register: slip4net_cont + name: podq + state: quadlet + network: examplenet + share: net + subuidname: username1 + userns: auto + publish: 8000:8001 + add_host: + - host1 + volume: + - /tmp:/data + - /whocares:/data2:ro + quadlet_dir: /tmp + quadlet_options: + - "Label=somelabel=labelvalue" + - | + [Install] + WantedBy=default.target + register: quadlet_pod + + - name: Check if files exists + stat: + path: /tmp/podq.pod + register: quadlet_file - - name: Check that slirp4netns is idempotent + - name: Check output is correct for Quadlet container in /tmp/podq.pod file assert: that: - - slip4net_pod is not changed - - slip4net_cont is not changed - - - name: Run pod2 with different network slirp4netns + - quadlet_file.stat.exists + + - name: Check for the existence of lines in /tmp/podq.pod + lineinfile: + path: /tmp/podq.pod + line: "{{ item }}" + state: present + check_mode: yes + register: line_check + loop: + - "[Pod]" + - "Network=examplenet" + - "PodName=podq" + - "PublishPort=8000:8001" + - "Volume=/tmp:/data" + - "Volume=/whocares:/data2:ro" + - "PodmanArgs=--add-host host1" + - "PodmanArgs=--share net" + - "PodmanArgs=--subuidname username1" + - "PodmanArgs=--userns auto" + - "PodmanArgs=--add-host host1" + - "Label=somelabel=labelvalue" + - "WantedBy=default.target" + loop_control: + label: "{{ item }}" + + - name: Fail the task if any line is not present + fail: + msg: "The following line is not present in /tmp/podq.pod: {{ item.item }}" + when: item.changed + loop: "{{ line_check.results }}" + loop_control: + label: "{{ item.item }}" + + - name: Create a Quadlet pod file - same containers.podman.podman_pod: executable: "{{ test_executable | default('podman') }}" - name: pod2 - state: started - network: slirp4netns:outbound_addr=10.10.10.47 - register: slip4net_pod2 + name: podq + state: quadlet + network: examplenet + share: net + subuidname: username1 + userns: auto + publish: 8000:8001 + add_host: + - host1 + volume: + - /tmp:/data + - /whocares:/data2:ro + quadlet_dir: /tmp + quadlet_options: + - "Label=somelabel=labelvalue" + - | + [Install] + WantedBy=default.target + register: quad2 + + - name: Check if quadlet changed + assert: + that: + - quad2 is not changed - - name: Run container1 in different pod slirp4netns - containers.podman.podman_container: + - name: Create a Quadlet pod file - different + containers.podman.podman_pod: executable: "{{ test_executable | default('podman') }}" - name: container1 - image: alpine - command: top - pod: pod2 - state: started - register: slip4net_cont2 - - - name: Check that slirp4netns is idempotent and changed + name: podq + state: quadlet + network: examplenet + share: net + subuidname: username1 + userns: auto + publish: 8000:8001 + add_host: + - host1 + volume: + - /tmp:/newdata + - /whocares:/data2:ro + quadlet_dir: /tmp + quadlet_options: + - "Label=somelabel=labelvalue" + - | + [Install] + WantedBy=default.target + register: quad3 + + - name: Print diff + debug: + var: quad3.diff + + - name: Check if changed and diff assert: that: - - slip4net_pod2 is changed - - slip4net_cont2 is changed + - quad3 is changed + - "'newdata' in quad3.diff.after" always: diff --git a/ansible_collections/containers/podman/tests/integration/targets/podman_pod/tasks/resource-limit.yml b/ansible_collections/containers/podman/tests/integration/targets/podman_pod/tasks/resource-limit.yml index 94017d9f9..8727d6e50 100644 --- a/ansible_collections/containers/podman/tests/integration/targets/podman_pod/tasks/resource-limit.yml +++ b/ansible_collections/containers/podman/tests/integration/targets/podman_pod/tasks/resource-limit.yml @@ -11,6 +11,7 @@ - name: Create pod for limiting resources containers.podman.podman_pod: + executable: "{{ test_executable | default('podman') }}" name: limited-pod state: created blkio_weight: "{{ limit.blkio_weight }}" @@ -20,6 +21,7 @@ - name: Get information on pod for limiting resources containers.podman.podman_pod_info: + executable: "{{ test_executable | default('podman') }}" name: limited-pod register: pod_info @@ -34,5 +36,6 @@ always: - name: Cleanup containers.podman.podman_pod: + executable: "{{ test_executable | default('podman') }}" name: limited-pod state: absent diff --git a/ansible_collections/containers/podman/tests/integration/targets/podman_prune/tasks/main.yml b/ansible_collections/containers/podman/tests/integration/targets/podman_prune/tasks/main.yml index 804543fe5..6e1a328af 100644 --- a/ansible_collections/containers/podman/tests/integration/targets/podman_prune/tasks/main.yml +++ b/ansible_collections/containers/podman/tests/integration/targets/podman_prune/tasks/main.yml @@ -9,6 +9,7 @@ # Create objects to be pruned - name: Create container containers.podman.podman_container: + executable: "{{ test_executable | default('podman') }}" name: "{{ cname }}" image: quay.io/podman/hello:latest state: present @@ -16,12 +17,14 @@ - name: Create network containers.podman.podman_network: + executable: "{{ test_executable | default('podman') }}" name: "{{ nname }}" state: present register: network - name: Create volume containers.podman.podman_volume: + executable: "{{ test_executable | default('podman') }}" name: "{{ vname }}" state: present register: volume @@ -29,12 +32,14 @@ # Prune objects - name: Prune objects containers.podman.podman_prune: + executable: "{{ test_executable | default('podman') }}" container: true network: true volume: true - name: Check if container exists containers.podman.podman_container_info: + executable: "{{ test_executable | default('podman') }}" register: container_exists - name: Check if podman network exists @@ -43,6 +48,7 @@ - name: Check if podman volume exists containers.podman.podman_volume_info: + executable: "{{ test_executable | default('podman') }}" register: volume_exists - name: Verify assertions for network, container and volume @@ -58,6 +64,7 @@ # Test with filters - name: Prune objects with filters containers.podman.podman_prune: + executable: "{{ test_executable | default('podman') }}" image: true image_filters: dangling_only: false @@ -65,6 +72,7 @@ - name: Check if image exists containers.podman.podman_image_info: + executable: "{{ test_executable | default('podman') }}" register: image_exists - name: Verify assertions for image (with filters) @@ -74,6 +82,7 @@ - name: Create container containers.podman.podman_container: + executable: "{{ test_executable | default('podman') }}" name: "{{ cname }}" image: quay.io/podman/hello:latest state: present @@ -81,36 +90,43 @@ - name: Create network containers.podman.podman_network: + executable: "{{ test_executable | default('podman') }}" name: "{{ nname }}" state: present register: network_system - name: Create volume containers.podman.podman_volume: + executable: "{{ test_executable | default('podman') }}" name: "{{ vname }}" state: present register: volume_system - name: System prune containers.podman.podman_prune: + executable: "{{ test_executable | default('podman') }}" system: true system_all: true system_volumes: true - name: Check if container exists containers.podman.podman_container_info: + executable: "{{ test_executable | default('podman') }}" register: container_system_exists - name: Check if podman network exists containers.podman.podman_network_info: + executable: "{{ test_executable | default('podman') }}" register: network_system_exists - name: Check if podman volume exists containers.podman.podman_volume_info: + executable: "{{ test_executable | default('podman') }}" register: volume_system_exists - name: Check if image exists containers.podman.podman_image_info: + executable: "{{ test_executable | default('podman') }}" register: image_system_exists - name: Verify assertions for system diff --git a/ansible_collections/containers/podman/tests/integration/targets/podman_volume/tasks/main.yml b/ansible_collections/containers/podman/tests/integration/targets/podman_volume/tasks/main.yml index 144a39f63..9d43f3f1c 100644 --- a/ansible_collections/containers/podman/tests/integration/targets/podman_volume/tasks/main.yml +++ b/ansible_collections/containers/podman/tests/integration/targets/podman_volume/tasks/main.yml @@ -161,6 +161,134 @@ - info10 is failed - delete.volume == {} + - name: Create a Quadlet for volume with filename + containers.podman.podman_volume: + executable: "{{ test_executable | default('podman') }}" + name: testvol + state: quadlet + quadlet_dir: /tmp + quadlet_filename: customfile + + - name: Check if files exists + stat: + path: /tmp/customfile.volume + register: quadlet_file_custom + + - name: Fail if no file is present + assert: + that: + - quadlet_file_custom.stat.exists + + - name: Create quadlet volume file + containers.podman.podman_volume: + executable: "{{ test_executable | default('podman') }}" + name: testvol + state: quadlet + driver: local + label: + namelabel: value + foo: bar + debug: true + options: + - "device=/dev/loop1" + - "type=ext4" + quadlet_dir: /tmp + quadlet_options: + - "Label=Test=volume" + - "Label=test1=value1" + + - name: Check if files exists + stat: + path: /tmp/testvol.volume + register: quadlet_file + + - name: Check output is correct for Quadlet volume in /tmp/testvol.volume file + assert: + that: + - quadlet_file.stat.exists + + - name: Check for the existence of lines in /tmp/testvol.volume + lineinfile: + path: /tmp/testvol.volume + line: "{{ item }}" + state: present + check_mode: yes + register: line_check + loop: + - "[Volume]" + - "VolumeName=testvol" + - "Driver=local" + - "Label=namelabel=value" + - "Label=foo=bar" + - "Label=Test=volume" + - "Label=test1=value1" + - "PodmanArgs=--opt device=/dev/loop1" + - "PodmanArgs=--opt type=ext4" + - "GlobalArgs=--log-level debug" + loop_control: + label: "{{ item }}" + + - name: Fail the task if any line is not present + fail: + msg: "The following line is not present in /tmp/testvol.volume: {{ item.item }}" + when: item.changed + loop: "{{ line_check.results }}" + loop_control: + label: "{{ item.item }}" + + - name: Create quadlet volume file - same + containers.podman.podman_volume: + executable: "{{ test_executable | default('podman') }}" + name: testvol + state: quadlet + driver: local + label: + namelabel: value + foo: bar + debug: true + options: + - "device=/dev/loop1" + - "type=ext4" + quadlet_dir: /tmp + quadlet_options: + - "Label=Test=volume" + - "Label=test1=value1" + register: quad2 + + - name: Check if quadlet changed + assert: + that: + - quad2 is not changed + + - name: Create quadlet volume file - different + containers.podman.podman_volume: + executable: "{{ test_executable | default('podman') }}" + name: testvol + state: quadlet + driver: local + label: + namelabel: value + foo: bar + debug: true + options: + - "device=/dev/loop5" + - "type=ext4" + quadlet_dir: /tmp + quadlet_options: + - "Label=Test=volume" + - "Label=test1=value1" + register: quad3 + + - name: Print diff + debug: + var: quad3.diff + + - name: Check if changed and diff + assert: + that: + - quad3 is changed + - "'loop5' in quad3.diff.after" + always: - name: Make sure volume doesn't exist |