1
0
Fork 0
mirror of https://github.com/containers/ansible-podman-collections.git synced 2026-02-03 23:01:48 +00:00
ansible-podman-collections/tests/integration/targets/podman_quadlet_info/tasks/main.yml
Sagi Shnaidman 09bb5454a9 Add podman Quadlet modules
This commit introduces two new modules for managing Podman Quadlets:

- podman_quadlet: Install and remove Podman Quadlet files
  * Supports installing single files, directories, and additional config files
  * Implements idempotent state management (present/absent)
  * Validates parameters and provides meaningful error messages
  * Default force=true for removal operations
  * Removed deprecated 'ignore' parameter in favor of built-in idempotency

- podman_quadlet_info: Gather information about installed Quadlets
  * Lists all installed quadlets or prints specific quadlet content
  * Supports filtering by quadlet kinds (container, pod, network, etc.)
  * Provides detailed quadlet metadata including status and paths

Key features:
- Shared utilities in module_utils/podman/quadlet.py for code reuse
- Comprehensive integration tests for both modules
- Full idempotency support for all operations
- Proper handling of edge cases (missing files, malformed quadlets, etc.)
- Check mode support for safe dry-run operations
- Extensive documentation and examples

The modules use relative imports for module_utils to support local
development and testing with the containers.podman collection.

Signed-off-by: Sagi Shnaidman <sshnaidm@redhat.com>
2026-02-02 18:10:59 +02:00

119 lines
3.7 KiB
YAML

- name: Test podman_quadlet_info
block:
- name: Discover podman version
shell: podman version | grep "^Version:" | awk {'print $2'}
register: podman_v
- name: Set podman version fact
set_fact:
podman_version: "{{ podman_v.stdout | string }}"
- name: Print podman version
debug: var=podman_v.stdout
- name: Define quadlet user dir
set_fact:
quadlet_user_dir: "{{ ansible_env.HOME }}/.config/containers/systemd"
- name: Create a temporary file quadlet to inspect
ansible.builtin.tempfile:
state: file
suffix: .container
register: info_quadlet_tmp
- name: Write a quadlet content to temp file
copy:
dest: "{{ info_quadlet_tmp.path }}"
mode: "0644"
content: |
[Container]
Image=docker.io/library/alpine:latest
Exec=/bin/sh -c 'sleep 600'
- name: Install temp quadlet
containers.podman.podman_quadlet:
state: present
src: "{{ info_quadlet_tmp.path }}"
- name: List quadlets
containers.podman.podman_quadlet_info: {}
register: list_info
- name: Assert quadlets list includes our file
assert:
that:
- list_info.quadlets is defined
- name: Print specific quadlet
containers.podman.podman_quadlet_info:
name: "{{ info_quadlet_tmp.path | basename }}"
register: print_info
- name: Assert print contains our section
assert:
that:
- print_info.content is search('\\[Container\\]')
# Test filtering and edge cases
- name: Test kinds filtering (container only)
containers.podman.podman_quadlet_info:
kinds: [container]
register: filtered_info
- name: Assert filtered results are only containers
assert:
that:
- filtered_info.quadlets is defined
# If there are results, all should end with .container
- filtered_info.quadlets | length == 0 or (filtered_info.quadlets | map(attribute='Name') | select('search', '\\.container$') | list | length == filtered_info.quadlets | length)
- name: Test quadlet_dir filtering
containers.podman.podman_quadlet_info:
quadlet_dir: "{{ quadlet_user_dir }}"
register: dir_filtered_info
- name: Assert quadlet_dir filtered results have correct paths
assert:
that:
- dir_filtered_info.quadlets is defined
# If there are results, all paths should be under the specified directory
- dir_filtered_info.quadlets | length == 0 or (dir_filtered_info.quadlets | map(attribute='Path') | select('search', quadlet_user_dir) | list | length == dir_filtered_info.quadlets | length)
- name: Test non-existent quadlet print
containers.podman.podman_quadlet_info:
name: non-existent-quadlet.container
register: nonexistent_print
ignore_errors: true
- name: Assert non-existent print fails appropriately
assert:
that:
- nonexistent_print is failed
- name: Test check mode for info module
containers.podman.podman_quadlet_info: {}
check_mode: true
register: check_mode_info
- name: Assert check mode works for info
assert:
that:
- not check_mode_info.changed
- check_mode_info.quadlets is defined
- name: Test debug mode
containers.podman.podman_quadlet_info:
debug: true
register: debug_info
- name: Assert debug output present
assert:
that:
- debug_info.stdout is defined or debug_info.stderr is defined
always:
# clean the test quadlets
- name: Cleanup installed quadlet
containers.podman.podman_quadlet:
state: absent
name: "{{ info_quadlet_tmp.path | basename }}"