Blaine Story 4 өдөр өмнө
parent
commit
f4617340b1

+ 12 - 0
roles/quadlet/handlers/main.yml

@@ -0,0 +1,12 @@
+---
+- name: Apply SELinux contexts
+  ansible.builtin.shell:
+    cmd: restorecon -r "{{ item }}"
+  with_items:
+    - "{{ persistent_container_dirs }}"
+
+
+- name: Daemon Reload
+  ansible.builtin.systemd_service:
+    daemon_reload: true
+

+ 129 - 0
roles/quadlet/tasks/main.yml

@@ -0,0 +1,129 @@
+---
+- 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 }}"
+    env: "{{ item.environment | default(omit) }}"
+    ports: "{{ item.ports | default(omit) }}"
+    cap_add: "{{ item.cap_add | default(omit) }}"
+    volumes: "{{ item.volumes | default(omit) }}"
+    network: "{{ item.networks | 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 }}"
+