From 47e0b51f87e5e4c8841ff7734e2f29bbaebeabac Mon Sep 17 00:00:00 2001
From: Maarten de Waard <maarten@greenhost.nl>
Date: Tue, 14 Sep 2021 10:44:41 +0200
Subject: [PATCH] Try Simon's workaround

---
 ansible/roles/pre-configure/tasks/main.yml | 21 ++++++++++++++++++++-
 1 file changed, 20 insertions(+), 1 deletion(-)

diff --git a/ansible/roles/pre-configure/tasks/main.yml b/ansible/roles/pre-configure/tasks/main.yml
index 5a48f98f8..b5d11e38b 100644
--- a/ansible/roles/pre-configure/tasks/main.yml
+++ b/ansible/roles/pre-configure/tasks/main.yml
@@ -47,11 +47,30 @@
   with_items:
     - python3-pip
 
+# We work around a Debian Bullseye issue with installing snaps on Xen nodes:
+# https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=983357 (Debian link)
+# https://code.greenhost.net/greenhost/sysops/-/issues/915#note_108038 (GH # internal link)
+- name: Get kbd device name
+  tags:
+    - helm
+  shell: journalctl -k | awk '/Xen.Virtual.Keyboard/ {print $11}'
+  args:
+    # Only run this if kubectl snap has not been installed yet
+    creates: /snap/bin/kubectl
+  register: kbd_device
+  failed_when: false
+  changed_when: false
+
 - name: Install kubectl snap
   # kubectl needs to get installed as "classic" snap
-  command: snap install --classic kubectl
+  command: "{{ item }}"
   args:
     creates: /snap/bin/kubectl
+  with_items:
+    # mount and umount commands are part of the workaround mentioned above
+    - sudo mount --bind /dev/zero /sys/{{ kdb_device.stdout }}/uevent
+    - snap install --classic kubectl
+    - sudo umount /sys/{{ kbd_device.stdout }}/uevent
 
 - name: Create kubectl symlink to /usr/local/bin
   file:
-- 
GitLab