Files
cluster-knaster/platform/proxmox/ansible/playbooks/rustdesk-k3s.yml
T
Robert RappandClaude Fable 5.1 8b1f2a7e95
ci / test (push) Successful in 29s
rustdesk: Schlüsselprüfung über das Secret statt exec
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-15 14:47:15 +02:00

72 lines
3.4 KiB
YAML

# RustDesk-Server (hbbs/hbbr) in k3s, Umzug vom Portainer-Stack „rustdesk“ auf appsrv08 (15.10.2026).
# Läuft auf ops: ansible-playbook playbooks/rustdesk-k3s.yml [-e rustdesk_public_host=<Adresse für Clients>]
#
# Voraussetzung: Schlüsselpaar des bisherigen Servers unter /root/.config/knaster/rustdesk/{id_ed25519,id_ed25519.pub}
# auf ops (aus dem Docker-Volume rustdesk_rustdesk-data von appsrv08, Pfad /root). Damit bleiben die in den
# Clients hinterlegten Public Keys gültig. Die Clients selbst zeigen weiter auf appsrv08, bis ihre
# Server-Adresse umgestellt wird (Installer-Name im Stack rustdesk-updater und bestehende Installationen).
- name: RustDesk nach k3s
hosts: localhost
connection: local
gather_facts: false
vars:
manifest: "{{ playbook_dir }}/../../../../deploy/k8s/rustdesk/rustdesk.yaml"
key_dir: /root/.config/knaster/rustdesk
# Adresse, die hbbs den Clients als Relay nennt (Port 21117). Standard: die k3s-VM; ServiceLB stellt die Ports
# auf jeder Knoten-Adresse bereit. Nach DHCP-Reservierung/DNS-Name hier bzw. per -e anpassen.
rustdesk_public_host: "{{ hostvars['k3s'].ansible_host }}"
tasks:
- name: Schlüsseldateien vorhanden?
ansible.builtin.stat:
path: "{{ key_dir }}/{{ item }}"
loop: [id_ed25519, id_ed25519.pub]
register: keys
failed_when: not keys.stat.exists
- name: Namespace
ansible.builtin.shell: >
kubectl create namespace rustdesk --dry-run=client -o yaml | kubectl apply -f -
register: ns
changed_when: "'created' in ns.stdout"
- name: Secret rustdesk-keys aus den Schlüsseldateien
ansible.builtin.shell: >
kubectl -n rustdesk create secret generic rustdesk-keys
--from-file=id_ed25519={{ key_dir }}/id_ed25519 --from-file=id_ed25519.pub={{ key_dir }}/id_ed25519.pub
--dry-run=client -o yaml | kubectl apply -f -
register: secret
changed_when: "'configured' in secret.stdout or 'created' in secret.stdout"
no_log: true
- name: Manifest mit Relay-Adresse anwenden
ansible.builtin.shell: >
sed 's/__RELAY_HOST__/{{ rustdesk_public_host }}/' {{ manifest }} | kubectl apply -f -
register: dep
changed_when: "'configured' in dep.stdout or 'created' in dep.stdout"
- name: Neustart, wenn sich nur das Secret geändert hat
ansible.builtin.command: kubectl -n rustdesk rollout restart deployment/rustdesk
when: secret.changed and not dep.changed
- name: Warten, bis bereit
ansible.builtin.command: kubectl -n rustdesk rollout status deployment/rustdesk --timeout=300s
changed_when: false
- name: Public Key im Cluster entspricht der Datei (Image hat keine Shell, daher über das Secret)
ansible.builtin.shell: >
set -o pipefail;
kubectl -n rustdesk get secret rustdesk-keys -o go-template='{{ "{{" }}index .data "id_ed25519.pub"{{ "}}" }}' | base64 -d | cmp - {{ key_dir }}/id_ed25519.pub
args: {executable: /bin/bash}
changed_when: false
- name: Ports von außen erreichbar (ID-Server 21116/tcp, Relay 21117/tcp auf {{ rustdesk_public_host }})
ansible.builtin.wait_for:
host: "{{ rustdesk_public_host }}"
port: "{{ item }}"
timeout: 30
loop: [21115, 21116, 21117, 21118, 21119]
- name: Ergebnis
ansible.builtin.debug:
msg: "RustDesk in k3s bereit: ID-Server/Relay {{ rustdesk_public_host }}, Public Key {{ lookup('file', key_dir + '/id_ed25519.pub') }}"