Files
ansible-content-stabil/roles/auto-update/tasks/main.yml
T
adminandClaude Sonnet 5 553117466b Phase 2: 10 neue Konfiguration/Härtung-Merkmale (erste Batch)
Konfiguration: multimedia-codecs, barrierefreiheit, wlan-firmware,
tastaturlayout, laender, zeitserver, auto-update.
Härtung: firewall, virenscanner, security-updates.

Vier Config-Value-Rollen (tastaturlayout/laender/zeitserver/auto-update)
nutzen tuxflotte_optionen fuer den eigentlichen Wert (Muster wie
brave/standardbrowser), nicht nur present/absent.

ECHT auf golden-linux-mint getestet (ansible-core dort, Live-VM ueber
SSH), nicht nur Syntax-Check - dabei drei reale Bugs gefunden+behoben:

1. wlan-firmware: Paketname ist NICHT distributionsunabhaengig wie
   angenommen - Debian "firmware-linux-nonfree", Ubuntu/Mint
   "linux-firmware". Per ansible_facts[distribution] verzweigt (dabei
   zusaetzlich gelernt: Mint meldet sich als "Linux Mint" mit
   Leerzeichen, nicht "Linuxmint").
2. auto-update: Jinja-Dict-Lookup in set_fact lieferte einen String
   statt int zurueck, dadurch spaeterer Vergleich mit TypeError
   abgestuerzt UND zwei stille Gleichheitsvergleiche immer falsch
   (waeren nie aufgefallen ohne den einen lauten Fehler an anderer
   Stelle). Mit explizitem int-Filter behoben.
3. firewall/security-updates: Auftrag-abgewaehlt deaktivierte nur die
   Funktion (ufw disable / Config-Datei loeschen), liess aber das Paket
   installiert - inkonsistent zum Rest des Katalogs, wo absent immer
   vollstaendige Rueckabwicklung bedeutet. Ergaenzt.

Nebenbefund beim Testen: clamav-daemon startet bewusst nicht sofort nach
der Installation (echte systemd-Condition auf die noch fehlende
Signaturdatenbank) - kein Bug, aber clamav-freshclam war standardmaessig
nicht dauerhaft aktiviert, das nachgezogen.

Firewall-Rolle laesst SSH bewusst offen (sonst waere Fernwartung
ausgesperrt - fast selbst beim Testen passiert). Bekannte offene Luecke
klar kommentiert: andere Merkmale mit Eingehend-Bedarf (z.B. veyon)
muessen ihre eigene ufw-Freigabe mitbringen, diese Rolle kennt andere
Merkmale nicht (Konflikt-/Gruppen-Handling insgesamt noch offen, siehe
Roadmap).

Gehoert zusammen mit admin/provisioning-server-Migration 0035 (live auf
anode angewendet+verifiziert: 10 Merkmale, 30 Blueprint-Zeilen) und den
3 neuen Kategorien aus Migration 0034.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VLk93dhDMrkPXefVdknMV9
2026-09-10 09:07:37 +02:00

86 lines
3.4 KiB
YAML

- name: Ensure marker directory exists
ansible.builtin.file:
path: /run/tuxflotte/agent/applied
state: directory
mode: "0755"
# Allgemeine Update-Taktung (nicht zu verwechseln mit der Rolle
# "security-updates", die als eigenständiges Härtungs-Merkmal NUR
# Security-Patches automatisiert - diese Rolle steuert die Taktung für
# ALLE Paketaktualisierungen). Nutzt denselben apt-Periodic-Mechanismus,
# aber eine ANDERE Datei (10periodic statt 20auto-upgrades), damit sich
# beide Rollen nicht gegenseitig überschreiben.
# tuxflotte_optionen.intervall: taeglich/woechentlich/monatlich/manuell
# (Default woechentlich) - "manuell" deaktiviert die automatische
# Aktualisierung komplett (Tage=0), App-Auswahl/Zeitpunkt bleibt beim
# Nutzer.
#
# App-Update (Flatpak): flatpak selbst bringt keinen automatischen
# Hintergrund-Update-Mechanismus mit (anders als apt) - ein eigener
# systemd-Timer mit derselben Taktung übernimmt das hier mit, falls
# Flatpak auf dem Gerät installiert ist (mehrere App-Store-Merkmale nutzen
# es, siehe brave/gdevelop/turbowarp).
- name: Taktung in Tagen aus der Option ableiten
ansible.builtin.set_fact:
tuxflotte_update_tage: >-
{{
{'taeglich': 1, 'woechentlich': 7, 'monatlich': 30, 'manuell': 0}[
tuxflotte_optionen.intervall | default('woechentlich')
]
}}
- name: apt-Periodic-Taktung setzen
ansible.builtin.copy:
dest: /etc/apt/apt.conf.d/10periodic
content: |
APT::Periodic::Update-Package-Lists "{{ tuxflotte_update_tage }}";
APT::Periodic::Download-Upgradeable-Packages "{{ tuxflotte_update_tage }}";
APT::Periodic::AutocleanInterval "{{ tuxflotte_update_tage }}";
mode: "0644"
when: tuxflotte_state == "present"
- name: Prüfen, ob Flatpak installiert ist
ansible.builtin.stat:
path: /usr/bin/flatpak
register: tuxflotte_flatpak_binary
when: tuxflotte_state == "present"
- name: Flatpak-Auto-Update-Timer einrichten (falls Flatpak vorhanden)
ansible.builtin.cron:
name: "tuxflotte-flatpak-auto-update"
special_time: "{{ 'daily' if (tuxflotte_update_tage | int) == 1 else 'weekly' if (tuxflotte_update_tage | int) == 7 else 'monthly' }}"
job: "/usr/bin/flatpak update --noninteractive"
when: tuxflotte_state == "present" and tuxflotte_flatpak_binary.stat.exists and (tuxflotte_update_tage | int) > 0
- name: Flatpak-Auto-Update-Timer entfernen (falls "manuell" gewählt)
ansible.builtin.cron:
name: "tuxflotte-flatpak-auto-update"
state: absent
when: tuxflotte_state == "present" and (tuxflotte_update_tage | int) == 0
- name: Record that the auto-update role ran
ansible.builtin.copy:
dest: /run/tuxflotte/agent/applied/auto-update.marker
content: "{{ ansible_date_time.iso8601 }}: {{ tuxflotte_optionen.intervall | default('woechentlich') }}\n"
mode: "0644"
when: tuxflotte_state == "present"
- name: apt-Periodic-Taktung entfernen (Auftrag abgewählt)
ansible.builtin.file:
path: /etc/apt/apt.conf.d/10periodic
state: absent
when: tuxflotte_state == "absent"
- name: Flatpak-Auto-Update-Timer entfernen (Auftrag abgewählt)
ansible.builtin.cron:
name: "tuxflotte-flatpak-auto-update"
state: absent
when: tuxflotte_state == "absent"
- name: auto-update-Marker entfernen (Auftrag abgewählt)
ansible.builtin.file:
path: /run/tuxflotte/agent/applied/auto-update.marker
state: absent
when: tuxflotte_state == "absent"