--- # tasks file for roles/podman - name: Ensure NFS client utilities are installed ansible.builtin.apt: name: nfs-common state: present update_cache: yes - name: Create local mount point for Podman NFS data ansible.builtin.file: path: "{{ podman_data_mount_point }}" state: directory mode: '0755' owner: root group: root - name: Ensure Podman NFS share is mounted and configured in /etc/fstab ansible.posix.mount: src: "{{ podman_nfs_server }}:{{ podman_nfs_share_path }}" path: "{{ podman_data_mount_point }}" fstype: nfs opts: defaults,hard,intr,noatime,nofail # 'nofail' verhindert, dass der Bootvorgang stoppt, wenn der NFS-Server nicht erreichbar ist. state: mounted - name: Install Podman and related tools ansible.builtin.apt: name: - podman - podman-docker # Bietet ein Docker-kompatibles CLI-Interface - buildah # Tool zum Erstellen von OCI-Images - skopeo # Tool zum Verschieben und Kopieren von Container-Images state: present update_cache: yes - name: Ensure Podman systemd socket is enabled and running ansible.builtin.systemd: name: podman.socket state: started enabled: yes # Dies stellt sicher, dass der Podman-Socket für die Kommunikation verfügbar ist, # insbesondere für Tools wie Portainer, die sich mit dem Socket verbinden. - name: Install podman-compose from repository ansible.builtin.apt: name: podman-compose state: present update_cache: yes - name: Create directory for Portainer compose file ansible.builtin.file: path: "{{ podman_data_mount_point }}/compose/portainer" state: directory mode: '0755' - name: Create Portainer compose file from template ansible.builtin.template: src: portainer-compose.yaml.j2 dest: "{{ podman_data_mount_point }}/compose/portainer/compose.yaml" mode: '0644' - name: Generate systemd service file for the Portainer pod ansible.builtin.command: # Führt 'podman-compose up' aus, um die Container zu erstellen (falls nicht vorhanden). # Generiert dann eine systemd-Unit für den Pod, der von podman-compose erstellt wurde. # Der Pod-Name entspricht dem Verzeichnisnamen ('portainer'). # '--new' erlaubt es systemd, die Container bei Bedarf neu zu erstellen. cmd: podman-compose up -d && podman generate systemd --new --files --name portainer chdir: "{{ podman_data_mount_point }}/compose/portainer" creates: "{{ podman_data_mount_point }}/compose/portainer/pod-portainer.service" register: generate_systemd changed_when: generate_systemd.rc == 0 and "pod-portainer.service" in generate_systemd.stdout - name: Copy systemd service file to system location ansible.builtin.copy: src: "{{ podman_data_mount_point }}/compose/portainer/pod-portainer.service" dest: "/etc/systemd/system/pod-portainer.service" remote_src: yes mode: '0644' when: generate_systemd.changed notify: Reload systemd and restart Portainer pod - name: Ensure Portainer pod service is enabled and started ansible.builtin.systemd: name: pod-portainer.service state: started enabled: yes daemon_reload: yes