summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Pointner <equinox@spreadspace.org>2024-03-16 19:20:34 +0100
committerChristian Pointner <equinox@spreadspace.org>2024-03-16 19:20:34 +0100
commit336398e61990c3695ab0463408d95665f32db445 (patch)
tree2eef0adfcfac59615b61b61ed27634fd94a7f08e
parentraspios: rsync is needed for rpi-firmware (diff)
add companion role
-rw-r--r--roles/streaming/companion/defaults/main.yml5
-rw-r--r--roles/streaming/companion/handlers/main.yml3
-rw-r--r--roles/streaming/companion/tasks/main.yml23
-rw-r--r--roles/streaming/companion/templates/pod-spec.yml.j222
-rw-r--r--roles/streaming/companion/templates/udev.rules.j231
5 files changed, 84 insertions, 0 deletions
diff --git a/roles/streaming/companion/defaults/main.yml b/roles/streaming/companion/defaults/main.yml
new file mode 100644
index 00000000..e09159f4
--- /dev/null
+++ b/roles/streaming/companion/defaults/main.yml
@@ -0,0 +1,5 @@
+---
+# companion_storage:
+# type: ...
+
+# companion_version: 3.2.2
diff --git a/roles/streaming/companion/handlers/main.yml b/roles/streaming/companion/handlers/main.yml
new file mode 100644
index 00000000..821c7fa8
--- /dev/null
+++ b/roles/streaming/companion/handlers/main.yml
@@ -0,0 +1,3 @@
+---
+- name: reload udev rules
+ command: "udevadm control --reload"
diff --git a/roles/streaming/companion/tasks/main.yml b/roles/streaming/companion/tasks/main.yml
new file mode 100644
index 00000000..b222dee2
--- /dev/null
+++ b/roles/streaming/companion/tasks/main.yml
@@ -0,0 +1,23 @@
+---
+- name: prepare storage volume
+ vars:
+ storage_volume: "{{ companion_storage | combine({'owner': 1000, 'group': 1000}) }}"
+ include_role:
+ name: "storage/{{ companion_storage.type }}/volume"
+
+- set_fact:
+ companion_basepath: "{{ storage_volume_mountpoint }}"
+
+- name: install udev rules
+ template:
+ src: udev.rules.j2
+ dest: /etc/udev/rules.d/90-companion.rules
+ notify: reload udev rules
+
+- name: install pod manifest
+ vars:
+ kubernetes_standalone_pod:
+ name: companion
+ spec: "{{ lookup('template', 'pod-spec.yml.j2') }}"
+ include_role:
+ name: kubernetes/standalone/pod
diff --git a/roles/streaming/companion/templates/pod-spec.yml.j2 b/roles/streaming/companion/templates/pod-spec.yml.j2
new file mode 100644
index 00000000..f01637fe
--- /dev/null
+++ b/roles/streaming/companion/templates/pod-spec.yml.j2
@@ -0,0 +1,22 @@
+hostNetwork: true
+containers:
+- name: companion
+ image: ghcr.io/bitfocus/companion/companion:v{{ companion_version }}
+ imagePullPolicy: Always
+ securityContext:
+ privileged: true
+ supplementalGroups:
+ - 46 # plugdev
+ volumeMounts:
+ - name: dev-usb
+ mountPath: /dev/bus/usb
+ - name: data
+ mountPath: /companion
+volumes:
+- name: dev-usb
+ hostPath:
+ path: /dev/bus/usb
+- name: data
+ hostPath:
+ type: Directory
+ path: "{{ companion_basepath }}"
diff --git a/roles/streaming/companion/templates/udev.rules.j2 b/roles/streaming/companion/templates/udev.rules.j2
new file mode 100644
index 00000000..d40e8048
--- /dev/null
+++ b/roles/streaming/companion/templates/udev.rules.j2
@@ -0,0 +1,31 @@
+SUBSYSTEM=="input", GROUP="input", MODE="0666"
+
+# infinitton
+SUBSYSTEM=="usb", ATTRS{idVendor}=="ffff", ATTRS{idProduct}=="1f40", MODE:="666", GROUP="plugdev"
+KERNEL=="hidraw*", ATTRS{idVendor}=="ffff", ATTRS{idProduct}=="1f40", MODE:="666", GROUP="plugdev"
+SUBSYSTEM=="usb", ATTRS{idVendor}=="ffff", ATTRS{idProduct}=="1f41", MODE:="666", GROUP="plugdev"
+KERNEL=="hidraw*", ATTRS{idVendor}=="ffff", ATTRS{idProduct}=="1f41", MODE:="666", GROUP="plugdev"
+
+# streamdeck
+SUBSYSTEM=="usb", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="0060", MODE:="666", GROUP="plugdev"
+SUBSYSTEM=="usb", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="0063", MODE:="666", GROUP="plugdev"
+SUBSYSTEM=="usb", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="006c", MODE:="666", GROUP="plugdev"
+SUBSYSTEM=="usb", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="006d", MODE:="666", GROUP="plugdev"
+SUBSYSTEM=="usb", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="0080", MODE:="666", GROUP="plugdev"
+SUBSYSTEM=="usb", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="0084", MODE:="666", GROUP="plugdev"
+SUBSYSTEM=="usb", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="0086", MODE:="666", GROUP="plugdev"
+SUBSYSTEM=="usb", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="008f", MODE:="666", GROUP="plugdev"
+SUBSYSTEM=="usb", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="0090", MODE:="666", GROUP="plugdev"
+KERNEL=="hidraw*", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="0060", MODE:="666", GROUP="plugdev"
+KERNEL=="hidraw*", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="0063", MODE:="666", GROUP="plugdev"
+KERNEL=="hidraw*", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="006c", MODE:="666", GROUP="plugdev"
+KERNEL=="hidraw*", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="006d", MODE:="666", GROUP="plugdev"
+KERNEL=="hidraw*", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="0080", MODE:="666", GROUP="plugdev"
+KERNEL=="hidraw*", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="0084", MODE:="666", GROUP="plugdev"
+KERNEL=="hidraw*", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="0086", MODE:="666", GROUP="plugdev"
+KERNEL=="hidraw*", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="008f", MODE:="666", GROUP="plugdev"
+KERNEL=="hidraw*", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="0090", MODE:="666", GROUP="plugdev"
+
+# xkeys
+SUBSYSTEM=="usb", ATTRS{idVendor}=="05f3", MODE:="666", GROUP="plugdev"
+KERNEL=="hidraw*", ATTRS{idVendor}=="05f3", MODE:="666", GROUP="plugdev"