From 3f63bee5115492ddcf81949c8844b0b967f1a3c8 Mon Sep 17 00:00:00 2001
From: Marco Ferrari <ferrari.marco@gmail.com>
Date: Sun, 19 Jan 2025 16:27:05 +0100
Subject: [PATCH] chore: deploy media stack and refactor playbooks

---
 .github/workflows/test-ansible.yaml           |  2 --
 .../inventory/group_vars/all/main.yaml        |  2 +-
 .../hl01.edge.lab.ferrari.how/main.yaml       |  3 +++
 .../main.yaml                                 |  1 -
 config/ansible/playbooks/home-lab-node.yaml   |  6 ------
 config/ansible/playbooks/main.yaml            |  6 ++++++
 .../tasks/include-variables.yaml              |  5 +++++
 .../tasks/register-intel-igpu-facts.yaml      | 20 +++++++++++++++++++
 .../templates/media-stack/compose.yaml.jinja  |  8 ++++++++
 9 files changed, 43 insertions(+), 10 deletions(-)
 create mode 100644 config/ansible/roles/ferrarimarco_home_lab_node/tasks/register-intel-igpu-facts.yaml

diff --git a/.github/workflows/test-ansible.yaml b/.github/workflows/test-ansible.yaml
index 155ca0dfe..6afcb1756 100644
--- a/.github/workflows/test-ansible.yaml
+++ b/.github/workflows/test-ansible.yaml
@@ -72,14 +72,12 @@ jobs:
     strategy:
       matrix:
         test_container_image_id:
-          - "geerlingguy/docker-debian11-ansible:latest"
           - "geerlingguy/docker-debian12-ansible:latest"
         test_playbook_name:
           - boot-bare-metal
           - bootstrap
           - container-engine
           - coral
-          - home-lab-node
           - proxmox-node
           - setup-disks
           - main
diff --git a/config/ansible/inventory/group_vars/all/main.yaml b/config/ansible/inventory/group_vars/all/main.yaml
index ed32090a3..3fb9506d9 100644
--- a/config/ansible/inventory/group_vars/all/main.yaml
+++ b/config/ansible/inventory/group_vars/all/main.yaml
@@ -38,7 +38,7 @@ syncthing_user_interface_http_endpoint_fqdn: "raspberrypi2.{{ edge_environment_r
 zigbee2mqtt_http_endpoint_fqdn: "raspberrypi2.{{ edge_environment_root_fqdn }}"
 mosquitto_server_fqdn: "raspberrypi2.{{ edge_environment_root_fqdn }}"
 
-data_disk_mount_path: /media/data-0
+data_disk_mount_path: /media/data0
 workloads_backup_disk_mount_path: /media/backup-0
 
 media_directory_path: "{{ data_disk_mount_path }}/media"
diff --git a/config/ansible/inventory/host_vars/hl01.edge.lab.ferrari.how/main.yaml b/config/ansible/inventory/host_vars/hl01.edge.lab.ferrari.how/main.yaml
index 1889f360f..d0a7a68a6 100644
--- a/config/ansible/inventory/host_vars/hl01.edge.lab.ferrari.how/main.yaml
+++ b/config/ansible/inventory/host_vars/hl01.edge.lab.ferrari.how/main.yaml
@@ -4,6 +4,7 @@ configure_backup_restic: true
 configure_docker: true
 configure_frigate: true
 configure_home_assistant: true
+configure_media_stack: true
 configure_monitoring_sata: false
 has_coral_pci_accelerator: true
 has_intel_igpu: true
@@ -39,3 +40,5 @@ partitions_to_create:
     partition_number: 1
   - device: "{{ data_disk_device }}"
     partition_number: 1
+
+start_media_stack: false
diff --git a/config/ansible/inventory/host_vars/raspberrypi2.edge.lab.ferrari.how/main.yaml b/config/ansible/inventory/host_vars/raspberrypi2.edge.lab.ferrari.how/main.yaml
index 29d9b6827..5aac5cbbe 100644
--- a/config/ansible/inventory/host_vars/raspberrypi2.edge.lab.ferrari.how/main.yaml
+++ b/config/ansible/inventory/host_vars/raspberrypi2.edge.lab.ferrari.how/main.yaml
@@ -9,7 +9,6 @@ configure_monitoring_ont: true
 configure_network_shares: true
 configure_syncthing: true
 configure_zigbee2mqtt: true
-data_disk_mount_path: "/media/data0"
 disks_to_mount:
   - fstype: ext4
     opts: noatime
diff --git a/config/ansible/playbooks/home-lab-node.yaml b/config/ansible/playbooks/home-lab-node.yaml
index 4863769c6..7ce7a181f 100644
--- a/config/ansible/playbooks/home-lab-node.yaml
+++ b/config/ansible/playbooks/home-lab-node.yaml
@@ -1,10 +1,4 @@
 ---
-- name: Import the container engine playbook
-  ansible.builtin.import_playbook: container-engine.yaml
-
-- name: Import the disk setup playbook
-  ansible.builtin.import_playbook: setup-disks.yaml
-
 - name: Configure Home Lab nodes
   hosts: all
   gather_facts: true
diff --git a/config/ansible/playbooks/main.yaml b/config/ansible/playbooks/main.yaml
index 52b53975d..330715923 100644
--- a/config/ansible/playbooks/main.yaml
+++ b/config/ansible/playbooks/main.yaml
@@ -11,5 +11,11 @@
 - name: Import the proxmox node playbook
   ansible.builtin.import_playbook: proxmox-node.yaml
 
+- name: Import the disk setup playbook
+  ansible.builtin.import_playbook: setup-disks.yaml
+
+- name: Import the coral playbook
+  ansible.builtin.import_playbook: coral.yaml
+
 - name: Import the home lab node playbook
   ansible.builtin.import_playbook: home-lab-node.yaml
diff --git a/config/ansible/roles/ferrarimarco_home_lab_node/tasks/include-variables.yaml b/config/ansible/roles/ferrarimarco_home_lab_node/tasks/include-variables.yaml
index 40dfb65ca..42938d5e9 100644
--- a/config/ansible/roles/ferrarimarco_home_lab_node/tasks/include-variables.yaml
+++ b/config/ansible/roles/ferrarimarco_home_lab_node/tasks/include-variables.yaml
@@ -263,3 +263,8 @@
 - name: Register OS package setup tasks
   ansible.builtin.include_tasks:
     file: register-os-package-setup-facts.yaml
+
+- name: Register Intel iGPU tasks
+  ansible.builtin.include_tasks:
+    file: register-intel-igpu-facts.yaml
+  when: has_intel_igpu | default(false)
diff --git a/config/ansible/roles/ferrarimarco_home_lab_node/tasks/register-intel-igpu-facts.yaml b/config/ansible/roles/ferrarimarco_home_lab_node/tasks/register-intel-igpu-facts.yaml
new file mode 100644
index 000000000..c5090e04e
--- /dev/null
+++ b/config/ansible/roles/ferrarimarco_home_lab_node/tasks/register-intel-igpu-facts.yaml
@@ -0,0 +1,20 @@
+---
+- name: Get render group id
+  ansible.builtin.getent:
+    database: group
+    key: render
+
+- name: Debug getent_group
+  ansible.builtin.debug:
+    var: getent_group
+    verbosity: 1
+
+- name: Register facts for Intel iGPU
+  ansible.builtin.set_fact:
+    # Format: {"render": ['x', '104', '']}
+    intel_igpu_render_group_id: "{{ getent_group['render'][1] }}"
+
+- name: Debug intel_igpu_render_group_id
+  ansible.builtin.debug:
+    var: intel_igpu_render_group_id
+    verbosity: 1
diff --git a/config/ansible/roles/ferrarimarco_home_lab_node/templates/media-stack/compose.yaml.jinja b/config/ansible/roles/ferrarimarco_home_lab_node/templates/media-stack/compose.yaml.jinja
index ff967198c..1eff8b055 100644
--- a/config/ansible/roles/ferrarimarco_home_lab_node/templates/media-stack/compose.yaml.jinja
+++ b/config/ansible/roles/ferrarimarco_home_lab_node/templates/media-stack/compose.yaml.jinja
@@ -13,6 +13,14 @@ services:
   jellyfin:
     image: {{ container_images_ids["jellyfin"] }}
     container_name: jellyfin
+    devices:
+{% if has_intel_igpu | default(false) %}
+      - /dev/dri/renderD128:/dev/dri/renderD128
+{% endif %}
+    group_add:
+{% if has_intel_igpu | default(false) %}
+      - {{ intel_igpu_render_group_id }}
+{% endif %}
     volumes:
       - {{ jellyfin_configuration_directory_path }}:/config
       - {{ jellyfin_cache_directory_path }}:/cache