aboutsummaryrefslogtreecommitdiff
path: root/roles/containers
diff options
context:
space:
mode:
Diffstat (limited to 'roles/containers')
-rw-r--r--roles/containers/defaults/main.yml11
-rw-r--r--roles/containers/tasks/main.yml17
-rw-r--r--roles/containers/tasks/quadlet_create.yml22
-rw-r--r--roles/containers/tasks/quadlet_remove.yml14
-rw-r--r--roles/containers/tasks/quadlet_start.yml27
-rw-r--r--roles/containers/tasks/quadlet_stop.yml8
6 files changed, 99 insertions, 0 deletions
diff --git a/roles/containers/defaults/main.yml b/roles/containers/defaults/main.yml
new file mode 100644
index 0000000..ade45f3
--- /dev/null
+++ b/roles/containers/defaults/main.yml
@@ -0,0 +1,11 @@
+quadlet_path: "../../docs/sample-environment/wordpress/quadlet"
+
+quadlets:
+ - name: "wordpress-pod"
+ file: "wordpress.pod"
+
+ - name: "wordpress-app"
+ file: "wordpress-app.container"
+
+ - name: "wordpress-db"
+ file: "wordpress-db.container"
diff --git a/roles/containers/tasks/main.yml b/roles/containers/tasks/main.yml
new file mode 100644
index 0000000..02ee577
--- /dev/null
+++ b/roles/containers/tasks/main.yml
@@ -0,0 +1,17 @@
+- ansible.builtin.import_tasks: quadlet_create.yml
+ tags:
+ - create
+
+- ansible.builtin.import_tasks: quadlet_start.yml
+ tags:
+ - start
+
+- ansible.builtin.import_tasks: quadlet_stop.yml
+ tags:
+ - never
+ - stop
+
+- ansible.builtin.import_tasks: quadlet_remove.yml
+ tags:
+ - never
+ - remove
diff --git a/roles/containers/tasks/quadlet_create.yml b/roles/containers/tasks/quadlet_create.yml
new file mode 100644
index 0000000..ffbae8a
--- /dev/null
+++ b/roles/containers/tasks/quadlet_create.yml
@@ -0,0 +1,22 @@
+- name: Create quadlet directory
+ ansible.builtin.file:
+ path: "{{ lookup('env', 'HOME') }}/.config/containers/systemd"
+ state: "directory"
+
+- name: Copy quadlet files into quadlet directory
+ ansible.builtin.copy:
+ src: "{{ quadlet_path}}/{{ item.file }}"
+ dest: "{{ lookup('env', 'HOME') }}/.config/containers/systemd/{{ item.file }}"
+ loop_control:
+ label: "{{ item.name }} -> {{ item.file }}"
+ loop: "{{ quadlets }}"
+ register: quadlet_files
+
+- name: Reload systemd daemon
+ ansible.builtin.systemd:
+ daemon_reload: true
+ scope: "user"
+ when: quadlet_files.changed
+
+- name: Check quadlet status
+ ansible.builtin.shell: "/usr/lib/systemd/system-generators/podman-system-generator --user --dryrun"
diff --git a/roles/containers/tasks/quadlet_remove.yml b/roles/containers/tasks/quadlet_remove.yml
new file mode 100644
index 0000000..e6bc05b
--- /dev/null
+++ b/roles/containers/tasks/quadlet_remove.yml
@@ -0,0 +1,14 @@
+- name: Remove quadlet files from quadlet directory
+ ansible.builtin.file:
+ path: "{{ lookup('env', 'HOME') }}/.config/containers/systemd/{{ item.file }}"
+ state: "absent"
+ loop_control:
+ label: "{{ item.name }} -> {{ item.file }}"
+ loop: "{{ quadlets }}"
+ register: quadlet_files
+
+- name: Reload systemd daemon
+ ansible.builtin.systemd:
+ daemon_reload: true
+ scope: "user"
+ when: quadlet_files.changed
diff --git a/roles/containers/tasks/quadlet_start.yml b/roles/containers/tasks/quadlet_start.yml
new file mode 100644
index 0000000..5dcd39a
--- /dev/null
+++ b/roles/containers/tasks/quadlet_start.yml
@@ -0,0 +1,27 @@
+- name: Start quadlet
+ ansible.builtin.systemd_service:
+ name: "{{ item.name }}"
+ state: "started"
+ scope: "user"
+ loop_control:
+ label: "{{ item.name}}.service"
+ loop: "{{ quadlets }}"
+
+- name: Check for quadlet not in active or activating state
+ ansible.builtin.shell: "systemctl --user is-active {{ item.name }}.service"
+ loop_control:
+ label: "{{ item.name}}.service: {{ quadlet_status.stdout }}"
+ loop: "{{ quadlets }}"
+ register: quadlet_status
+ failed_when: quadlet_status.stdout not in ['active', 'activating']
+
+
+- name: Wait for quadlet state to go active
+ ansible.builtin.shell: "systemctl --user is-active {{ item.name }}.service"
+ loop_control:
+ label: "{{ item.name}}.service: {{ quadlet_status.stdout }}"
+ loop: "{{ quadlets }}"
+ register: quadlet_status
+ until: quadlet_status.stdout == 'active'
+ delay: 2
+ retries: 25
diff --git a/roles/containers/tasks/quadlet_stop.yml b/roles/containers/tasks/quadlet_stop.yml
new file mode 100644
index 0000000..b8a83f3
--- /dev/null
+++ b/roles/containers/tasks/quadlet_stop.yml
@@ -0,0 +1,8 @@
+- name: Stop quadlet
+ ansible.builtin.systemd_service:
+ name: "{{ item.name }}"
+ state: "stopped"
+ scope: "user"
+ loop_control:
+ label: "{{ item.name}}.service"
+ loop: "{{ quadlets }}"