--- - name: Install podman ansible.builtin.package: name: podman state: present - name: Create container group ansible.builtin.group: name: "{{ container_group }}" gid: "{{ container_gid }}" - name: Create container user ansible.builtin.user: name: "{{ container_user }}" uid: "{{ container_uid }}" group: "{{ container_group }}" - name: Generate list of persistent container directories ansible.builtin.set_fact: persistent_container_dirs: "{{ containers | map(attribute='volumes') | flatten | map('regex_replace', ':.*' ) | list }}" - name: Create persistent container directories ansible.builtin.file: path: "{{ item }}" state: directory owner: "{{ container_user | default('root') }}" group: "{{ container_group | default('root') }}" mode: '0770' with_items: - "{{ persistent_container_dirs }}" loop_control: label: "{{ item }}" - name: Create quadlet file for podman networks containers.podman.podman_network: name: "{{ item.name }}" state: quadlet quadlet_options: - | [Install] WantedBy=default.target notify: - Daemon Reload with_items: - "{{ container_networks }}" when: - container_networks is defined loop_control: label: "{{ item.name }}" - name: Flush Handlers meta: flush_handlers - name: Start Podman Networks ansible.builtin.systemd_service: name: "{{ item.name }}-network" state: started with_items: - "{{ container_networks }}" when: - container_networks is defined loop_control: label: "{{ item.name }}" - name: Create quadlet .pod files containers.podman.podman_pod: name: "{{ item.name }}" state: quadlet ports: "{{ item.ports | default(omit) }}" with_items: - "{{ containers }}" when: - containers is defined loop_control: label: "{{ item.name }}" notify: - Daemon Reload - name: Create quadlet .container files containers.podman.podman_container: name: "{{ item.name }}" state: quadlet image: "{{ item.image }}" privileged: "{{ item.privileged | default(omit) }}" network: "{{ item.networks | default(omit) }}" env: "{{ item.environment | default(omit) }}" cap_add: "{{ item.cap_add | default(omit) }}" volumes: "{{ item.volumes | default(omit) }}" device: "{{ item.devices | default(omit) }}" ports: "{{ item.ports | default(omit) }}" quadlet_options: - "AutoUpdate=registry" - "Pull=newer" - | [Install] WantedBy=default.target with_items: - "{{ containers }}" when: - containers is defined loop_control: label: "{{ item.name }}" notify: - Daemon Reload - name: Flush handlers meta: flush_handlers # Containers are automatically enabled via WantedBy=default.target entries - name: Start Container Services ansible.builtin.systemd_service: name: "{{ item.name }}" state: started with_items: - "{{ containers }}" when: - containers is defined loop_control: label: "{{ item.name }}"