mirror of
https://github.com/containers/ansible-podman-collections.git
synced 2026-02-04 07:11:49 +00:00
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>
This commit is contained in:
parent
a808c18fbc
commit
09bb5454a9
9 changed files with 2091 additions and 0 deletions
119
tests/integration/targets/podman_quadlet_info/tasks/main.yml
Normal file
119
tests/integration/targets/podman_quadlet_info/tasks/main.yml
Normal file
|
|
@ -0,0 +1,119 @@
|
|||
- 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 }}"
|
||||
Loading…
Add table
Add a link
Reference in a new issue