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
This commit is contained in:
adminandClaude Sonnet 5 committed 2026-09-10 09:07:37 +02:00
1 parent e4edcf1011
commit 553117466b
21 files changed
+663

No files matched your search

+3
View File
@@ -0,0 +1,3 @@
tuxflotte_state: present
tuxflotte_optionen:
intervall: woechentlich
+85
View File
@@ -0,0 +1,85 @@
- 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"
+1
View File
@@ -0,0 +1 @@
tuxflotte_state: present
+41
View File
@@ -0,0 +1,41 @@
- name: Ensure marker directory exists
ansible.builtin.file:
path: /run/tuxflotte/agent/applied
state: directory
mode: "0755"
# Bildschirmleser (orca) + Bildschirmtastatur (onboard) - beide regulaere
# Debian/Ubuntu-Pakete, apt-cache verifiziert (10.09.2026). Lupe/Kontrast-
# Themes sind bereits Teil der jeweiligen Desktop-Umgebung, kein separates
# Paket noetig.
- name: Barrierefreiheits-Werkzeuge installieren
ansible.builtin.apt:
name:
- orca
- onboard
state: present
update_cache: true
cache_valid_time: 3600
when: tuxflotte_state == "present"
- name: Record that the barrierefreiheit role ran
ansible.builtin.copy:
dest: /run/tuxflotte/agent/applied/barrierefreiheit.marker
content: "{{ ansible_date_time.iso8601 }}\n"
mode: "0644"
when: tuxflotte_state == "present"
- name: Barrierefreiheits-Werkzeuge entfernen (Auftrag abgewählt)
ansible.builtin.apt:
name:
- orca
- onboard
state: absent
when: tuxflotte_state == "absent"
- name: barrierefreiheit-Marker entfernen (Auftrag abgewählt)
ansible.builtin.file:
path: /run/tuxflotte/agent/applied/barrierefreiheit.marker
state: absent
when: tuxflotte_state == "absent"
+1
View File
@@ -0,0 +1 @@
tuxflotte_state: present
+74
View File
@@ -0,0 +1,74 @@
- name: Ensure marker directory exists
ansible.builtin.file:
path: /run/tuxflotte/agent/applied
state: directory
mode: "0755"
# ufw (Uncomplicated Firewall) - regulaeres Debian/Ubuntu-Paket. Default-
# Politik bewusst "eingehend verweigern, ausgehend erlauben" (Standard-
# Empfehlung fuer Client-Geraete, kein Server-Dienst zu schuetzen) - reine
# Installation ohne Aktivierung waere wirkungslos, deshalb hier explizit
# "ufw enable" mit ausgefuehrt. SSH bleibt bewusst erlaubt (Fernwartung/
# IT-Zugriff bleibt sonst nach dem ersten Lauf ausgesperrt - live beim
# Testen selbst fast passiert).
#
# WICHTIG, noch offen (Konflikt-/Gruppen-Handling, siehe Roadmap-Doc):
# andere Merkmale, die eingehende Verbindungen brauchen (z.B. veyon, siehe
# roles/veyon/), muessen ihre eigene ufw-Freigabe SELBST mitbringen -
# diese Rolle kennt andere Merkmale nicht und kann das nicht automatisch
# koordinieren.
- name: ufw installieren
ansible.builtin.apt:
name: ufw
state: present
update_cache: true
cache_valid_time: 3600
when: tuxflotte_state == "present"
- name: Default-Politik setzen (eingehend verweigern, ausgehend erlauben)
community.general.ufw:
direction: "{{ item.direction }}"
policy: "{{ item.policy }}"
loop:
- { direction: incoming, policy: deny }
- { direction: outgoing, policy: allow }
when: tuxflotte_state == "present"
- name: SSH weiterhin erlauben (Fernwartung)
community.general.ufw:
rule: allow
name: OpenSSH
when: tuxflotte_state == "present"
- name: ufw aktivieren
community.general.ufw:
state: enabled
when: tuxflotte_state == "present"
- name: Record that the firewall role ran
ansible.builtin.copy:
dest: /run/tuxflotte/agent/applied/firewall.marker
content: "{{ ansible_date_time.iso8601 }}\n"
mode: "0644"
when: tuxflotte_state == "present"
- name: ufw deaktivieren (Auftrag abgewählt)
community.general.ufw:
state: disabled
when: tuxflotte_state == "absent"
# Live beim Testen gefunden (10.09.2026): "deaktivieren" allein liess das
# Paket installiert stehen - inkonsistent zum Rest des Katalogs, wo
# "absent" immer eine vollstaendige Rueckabwicklung bedeutet.
- name: ufw entfernen (Auftrag abgewählt)
ansible.builtin.apt:
name: ufw
state: absent
when: tuxflotte_state == "absent"
- name: firewall-Marker entfernen (Auftrag abgewählt)
ansible.builtin.file:
path: /run/tuxflotte/agent/applied/firewall.marker
state: absent
when: tuxflotte_state == "absent"
+3
View File
@@ -0,0 +1,3 @@
tuxflotte_state: present
tuxflotte_optionen:
land: DE
+49
View File
@@ -0,0 +1,49 @@
- name: Ensure marker directory exists
ansible.builtin.file:
path: /run/tuxflotte/agent/applied
state: directory
mode: "0755"
# Länder-/Regionaleinstellung (Systemsprache/Locale) - tuxflotte_optionen.land
# aus einer kleinen, erweiterbaren Ländertabelle auf ein konkretes Locale
# gemappt. Weitere Länder bei Bedarf einfach ergänzen.
- name: Ziel-Locale aus Land ableiten
ansible.builtin.set_fact:
tuxflotte_land_locale: >-
{{
{
'DE': 'de_DE.UTF-8',
'AT': 'de_AT.UTF-8',
'CH': 'de_CH.UTF-8',
'US': 'en_US.UTF-8',
'GB': 'en_GB.UTF-8'
}[tuxflotte_optionen.land | default('DE')] | default('de_DE.UTF-8')
}}
- name: Locale generieren
community.general.locale_gen:
name: "{{ tuxflotte_land_locale }}"
state: present
when: tuxflotte_state == "present"
- name: Locale als Systemstandard setzen
ansible.builtin.command: update-locale LANG={{ tuxflotte_land_locale }}
when: tuxflotte_state == "present"
- name: Record that the laender role ran
ansible.builtin.copy:
dest: /run/tuxflotte/agent/applied/laender.marker
content: "{{ ansible_date_time.iso8601 }}: {{ tuxflotte_land_locale }}\n"
mode: "0644"
when: tuxflotte_state == "present"
- name: Auf Standard-Locale (de_DE.UTF-8) zurücksetzen (Auftrag abgewählt)
ansible.builtin.command: update-locale LANG=de_DE.UTF-8
when: tuxflotte_state == "absent"
- name: laender-Marker entfernen (Auftrag abgewählt)
ansible.builtin.file:
path: /run/tuxflotte/agent/applied/laender.marker
state: absent
when: tuxflotte_state == "absent"
@@ -0,0 +1 @@
tuxflotte_state: present
+36
View File
@@ -0,0 +1,36 @@
- name: Ensure marker directory exists
ansible.builtin.file:
path: /run/tuxflotte/agent/applied
state: directory
mode: "0755"
# libavcodec-extra buendelt die ueblichen proprietaeren/patentbehafteten
# Multimedia-Codecs (mp3 etc.) - regulaeres Debian/Ubuntu-Paket, apt-cache
# verifiziert (10.09.2026).
- name: Multimedia-Codecs installieren
ansible.builtin.apt:
name: libavcodec-extra
state: present
update_cache: true
cache_valid_time: 3600
when: tuxflotte_state == "present"
- name: Record that the multimedia-codecs role ran
ansible.builtin.copy:
dest: /run/tuxflotte/agent/applied/multimedia-codecs.marker
content: "{{ ansible_date_time.iso8601 }}\n"
mode: "0644"
when: tuxflotte_state == "present"
- name: Multimedia-Codecs entfernen (Auftrag abgewählt)
ansible.builtin.apt:
name: libavcodec-extra
state: absent
when: tuxflotte_state == "absent"
- name: multimedia-codecs-Marker entfernen (Auftrag abgewählt)
ansible.builtin.file:
path: /run/tuxflotte/agent/applied/multimedia-codecs.marker
state: absent
when: tuxflotte_state == "absent"
+1
View File
@@ -0,0 +1 @@
tuxflotte_state: present
+64
View File
@@ -0,0 +1,64 @@
- name: Ensure marker directory exists
ansible.builtin.file:
path: /run/tuxflotte/agent/applied
state: directory
mode: "0755"
# unattended-upgrades: reines Installieren reicht nicht, das Paket muss
# zusaetzlich per /etc/apt/apt.conf.d/20auto-upgrades aktiviert werden
# (Debian-Standardmechanismus, dieselbe Datei wie "dpkg-reconfigure
# unattended-upgrades" erzeugen wuerde). Nur Security-relevante Updates,
# keine vollen Dist-Upgrades - /etc/apt/apt.conf.d/50unattended-upgrades
# bringt die Standard-Origin-Liste (*-security) bereits als Default mit,
# unveraendert gelassen.
- name: unattended-upgrades installieren
ansible.builtin.apt:
name: unattended-upgrades
state: present
update_cache: true
cache_valid_time: 3600
when: tuxflotte_state == "present"
- name: Automatische Sicherheitsupdates aktivieren
ansible.builtin.copy:
dest: /etc/apt/apt.conf.d/20auto-upgrades
content: |
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";
mode: "0644"
when: tuxflotte_state == "present"
- name: unattended-upgrades-Dienst aktiv halten
ansible.builtin.systemd:
name: unattended-upgrades
enabled: true
state: started
when: tuxflotte_state == "present"
- name: Record that the security-updates role ran
ansible.builtin.copy:
dest: /run/tuxflotte/agent/applied/security-updates.marker
content: "{{ ansible_date_time.iso8601 }}\n"
mode: "0644"
when: tuxflotte_state == "present"
- name: Automatische Sicherheitsupdates deaktivieren (Auftrag abgewählt)
ansible.builtin.file:
path: /etc/apt/apt.conf.d/20auto-upgrades
state: absent
when: tuxflotte_state == "absent"
# Live beim Testen gefunden (10.09.2026): Config-Datei-Entfernung allein
# liess das Paket installiert stehen - inkonsistent zum Rest des Katalogs.
- name: unattended-upgrades entfernen (Auftrag abgewählt)
ansible.builtin.apt:
name: unattended-upgrades
state: absent
when: tuxflotte_state == "absent"
- name: security-updates-Marker entfernen (Auftrag abgewählt)
ansible.builtin.file:
path: /run/tuxflotte/agent/applied/security-updates.marker
state: absent
when: tuxflotte_state == "absent"
+3
View File
@@ -0,0 +1,3 @@
tuxflotte_state: present
tuxflotte_optionen:
layout: de
+51
View File
@@ -0,0 +1,51 @@
- name: Ensure marker directory exists
ansible.builtin.file:
path: /run/tuxflotte/agent/applied
state: directory
mode: "0755"
# Systemweites Standard-Tastaturlayout (Konsole + neue Login-Sitzungen) -
# reine Konfigurationsdatei, kein Paket noetig (console-setup/keyboard-
# configuration sind bereits Teil jedes Debian-Familie-Basissystems).
# tuxflotte_optionen.layout: "de" oder "us" (Default "de", siehe defaults/
# main.yml) - opake Option analog zum Brave-Standardbrowser-Muster.
- name: XKBLAYOUT in /etc/default/keyboard setzen
ansible.builtin.lineinfile:
path: /etc/default/keyboard
regexp: '^XKBLAYOUT='
line: 'XKBLAYOUT="{{ tuxflotte_optionen.layout | default("de") }}"'
when: tuxflotte_state == "present"
register: tuxflotte_keyboard_changed
- name: Layout-Änderung anwenden
ansible.builtin.command: dpkg-reconfigure -f noninteractive keyboard-configuration
when: tuxflotte_state == "present" and tuxflotte_keyboard_changed.changed
- name: Record that the tastaturlayout role ran
ansible.builtin.copy:
dest: /run/tuxflotte/agent/applied/tastaturlayout.marker
content: "{{ ansible_date_time.iso8601 }}: {{ tuxflotte_optionen.layout | default('de') }}\n"
mode: "0644"
when: tuxflotte_state == "present"
# "Abwählen" bedeutet hier: zurück auf den Tuxflotte-Standard (de), nicht
# ein undefiniertes Layout - anders als bei installierbaren Apps gibt es
# hier kein sinnvolles "gar kein Layout".
- name: Auf Standard-Layout (de) zurücksetzen (Auftrag abgewählt)
ansible.builtin.lineinfile:
path: /etc/default/keyboard
regexp: '^XKBLAYOUT='
line: 'XKBLAYOUT="de"'
when: tuxflotte_state == "absent"
register: tuxflotte_keyboard_reset
- name: Standard-Layout anwenden (Auftrag abgewählt)
ansible.builtin.command: dpkg-reconfigure -f noninteractive keyboard-configuration
when: tuxflotte_state == "absent" and tuxflotte_keyboard_reset.changed
- name: tastaturlayout-Marker entfernen (Auftrag abgewählt)
ansible.builtin.file:
path: /run/tuxflotte/agent/applied/tastaturlayout.marker
state: absent
when: tuxflotte_state == "absent"
+1
View File
@@ -0,0 +1 @@
tuxflotte_state: present
+65
View File
@@ -0,0 +1,65 @@
- name: Ensure marker directory exists
ansible.builtin.file:
path: /run/tuxflotte/agent/applied
state: directory
mode: "0755"
# ClamAV: clamav-daemon bringt den On-Access-faehigen Hintergrunddienst mit,
# freshclam aktualisiert die Signaturen. Regulaere Debian/Ubuntu-Pakete,
# apt-cache verifiziert (10.09.2026). Live beim Testen gefunden (10.09.2026):
# clamav-daemon.service hat eine echte systemd-ConditionPathExistsGlob auf
# die Signatur-Datenbank (/var/lib/clamav/daily.*) - startet also bewusst
# NICHT sofort nach der Installation, sondern erst, sobald freshclam die
# erste Datenbank heruntergeladen hat (kann je nach Netz ein paar Minuten
# dauern). Kein Fehler, sondern korrektes ClamAV-Verhalten - "state:
# started" unten ist deshalb ein bewusst folgenloser Versuch, kein
# Fehlschlag, falls die DB noch fehlt. clamav-freshclam war im Test
# standardmaessig NICHT aktiviert (nur einmalig durchs Postinstall
# gestartet) - "enabled: true" stellt sicher, dass Signatur-Updates auch
# nach einem Reboot automatisch weiterlaufen.
- name: ClamAV installieren
ansible.builtin.apt:
name:
- clamav
- clamav-daemon
state: present
update_cache: true
cache_valid_time: 3600
when: tuxflotte_state == "present"
- name: freshclam-Signatur-Updater dauerhaft aktivieren
ansible.builtin.systemd:
name: clamav-freshclam
enabled: true
state: started
when: tuxflotte_state == "present"
- name: ClamAV-Dienst aktiv halten (sobald Signaturdatenbank vorhanden ist)
ansible.builtin.systemd:
name: clamav-daemon
enabled: true
state: started
when: tuxflotte_state == "present"
failed_when: false
- name: Record that the virenscanner role ran
ansible.builtin.copy:
dest: /run/tuxflotte/agent/applied/virenscanner.marker
content: "{{ ansible_date_time.iso8601 }}\n"
mode: "0644"
when: tuxflotte_state == "present"
- name: ClamAV entfernen (Auftrag abgewählt)
ansible.builtin.apt:
name:
- clamav
- clamav-daemon
state: absent
when: tuxflotte_state == "absent"
- name: virenscanner-Marker entfernen (Auftrag abgewählt)
ansible.builtin.file:
path: /run/tuxflotte/agent/applied/virenscanner.marker
state: absent
when: tuxflotte_state == "absent"
+1
View File
@@ -0,0 +1 @@
tuxflotte_state: present
+45
View File
@@ -0,0 +1,45 @@
- name: Ensure marker directory exists
ansible.builtin.file:
path: /run/tuxflotte/agent/applied
state: directory
mode: "0755"
# Echter Fund beim Live-Test auf golden-linux-mint (10.09.2026): der
# Paketname ist NICHT distributionsunabhängig, anders als bei den meisten
# anderen Merkmalen dieser Batch - Debian nennt das Metapaket
# "firmware-linux-nonfree", Ubuntu/Mint dagegen "linux-firmware". Beide
# real per apt-cache/apt-cache-search auf ihrer jeweiligen Plattform
# verifiziert. Setzt voraus, dass die Golden-Images die passende
# apt-Komponente (non-free-firmware bei Debian) aktiviert haben - auf
# allen drei Referenz-VMs bereits der Fall.
- name: Paketname je Distribution bestimmen
ansible.builtin.set_fact:
tuxflotte_firmware_paket: "{{ 'linux-firmware' if ansible_facts['distribution'] in ['Ubuntu', 'Linux Mint'] else 'firmware-linux-nonfree' }}"
- name: Proprietäre WLAN-/Netzwerk-Firmware installieren
ansible.builtin.apt:
name: "{{ tuxflotte_firmware_paket }}"
state: present
update_cache: true
cache_valid_time: 3600
when: tuxflotte_state == "present"
- name: Record that the wlan-firmware role ran
ansible.builtin.copy:
dest: /run/tuxflotte/agent/applied/wlan-firmware.marker
content: "{{ ansible_date_time.iso8601 }}: {{ tuxflotte_firmware_paket }}\n"
mode: "0644"
when: tuxflotte_state == "present"
- name: Proprietäre WLAN-/Netzwerk-Firmware entfernen (Auftrag abgewählt)
ansible.builtin.apt:
name: "{{ tuxflotte_firmware_paket }}"
state: absent
when: tuxflotte_state == "absent"
- name: wlan-firmware-Marker entfernen (Auftrag abgewählt)
ansible.builtin.file:
path: /run/tuxflotte/agent/applied/wlan-firmware.marker
state: absent
when: tuxflotte_state == "absent"
+3
View File
@@ -0,0 +1,3 @@
tuxflotte_state: present
tuxflotte_optionen:
ntp_server: pool.ntp.org
+45
View File
@@ -0,0 +1,45 @@
- name: Ensure marker directory exists
ansible.builtin.file:
path: /run/tuxflotte/agent/applied
state: directory
mode: "0755"
# systemd-timesyncd ist auf allen drei Ziel-Backends bereits Teil des
# Basissystems (kein zusätzliches Paket nötig) - reine Konfiguration.
# tuxflotte_optionen.ntp_server erlaubt einen kundeneigenen Zeitserver
# (z.B. eigener AD-Zeitserver), Default ist der öffentliche NTP-Pool.
- name: NTP-Server in /etc/systemd/timesyncd.conf setzen
ansible.builtin.lineinfile:
path: /etc/systemd/timesyncd.conf
regexp: '^#?NTP='
line: 'NTP={{ tuxflotte_optionen.ntp_server | default("pool.ntp.org") }}'
when: tuxflotte_state == "present"
register: tuxflotte_ntp_changed
- name: systemd-timesyncd neu starten
ansible.builtin.systemd:
name: systemd-timesyncd
state: restarted
enabled: true
when: tuxflotte_state == "present" and tuxflotte_ntp_changed.changed
- name: Record that the zeitserver role ran
ansible.builtin.copy:
dest: /run/tuxflotte/agent/applied/zeitserver.marker
content: "{{ ansible_date_time.iso8601 }}: {{ tuxflotte_optionen.ntp_server | default('pool.ntp.org') }}\n"
mode: "0644"
when: tuxflotte_state == "present"
- name: Auf öffentlichen NTP-Pool zurücksetzen (Auftrag abgewählt)
ansible.builtin.lineinfile:
path: /etc/systemd/timesyncd.conf
regexp: '^#?NTP='
line: 'NTP=pool.ntp.org'
when: tuxflotte_state == "absent"
- name: zeitserver-Marker entfernen (Auftrag abgewählt)
ansible.builtin.file:
path: /run/tuxflotte/agent/applied/zeitserver.marker
state: absent
when: tuxflotte_state == "absent"
+90
View File
@@ -375,3 +375,93 @@
vars: vars:
tuxflotte_webapps: "{{ tuxflotte_webapps }}" tuxflotte_webapps: "{{ tuxflotte_webapps }}"
tags: webapp-shortcuts tags: webapp-shortcuts
- include_role:
name: multimedia-codecs
apply:
tags: multimedia-codecs
vars:
tuxflotte_state: "{{ tuxflotte_auftrag_states.get('multimedia-codecs', 'present') }}"
tuxflotte_optionen: "{{ tuxflotte_auftrag_optionen.get('multimedia-codecs', {}) }}"
tags: multimedia-codecs
- include_role:
name: barrierefreiheit
apply:
tags: barrierefreiheit
vars:
tuxflotte_state: "{{ tuxflotte_auftrag_states.get('barrierefreiheit', 'present') }}"
tuxflotte_optionen: "{{ tuxflotte_auftrag_optionen.get('barrierefreiheit', {}) }}"
tags: barrierefreiheit
- include_role:
name: wlan-firmware
apply:
tags: wlan-firmware
vars:
tuxflotte_state: "{{ tuxflotte_auftrag_states.get('wlan-firmware', 'present') }}"
tuxflotte_optionen: "{{ tuxflotte_auftrag_optionen.get('wlan-firmware', {}) }}"
tags: wlan-firmware
- include_role:
name: firewall
apply:
tags: firewall
vars:
tuxflotte_state: "{{ tuxflotte_auftrag_states.get('firewall', 'present') }}"
tuxflotte_optionen: "{{ tuxflotte_auftrag_optionen.get('firewall', {}) }}"
tags: firewall
- include_role:
name: virenscanner
apply:
tags: virenscanner
vars:
tuxflotte_state: "{{ tuxflotte_auftrag_states.get('virenscanner', 'present') }}"
tuxflotte_optionen: "{{ tuxflotte_auftrag_optionen.get('virenscanner', {}) }}"
tags: virenscanner
- include_role:
name: security-updates
apply:
tags: security-updates
vars:
tuxflotte_state: "{{ tuxflotte_auftrag_states.get('security-updates', 'present') }}"
tuxflotte_optionen: "{{ tuxflotte_auftrag_optionen.get('security-updates', {}) }}"
tags: security-updates
- include_role:
name: tastaturlayout
apply:
tags: tastaturlayout
vars:
tuxflotte_state: "{{ tuxflotte_auftrag_states.get('tastaturlayout', 'present') }}"
tuxflotte_optionen: "{{ tuxflotte_auftrag_optionen.get('tastaturlayout', {}) }}"
tags: tastaturlayout
- include_role:
name: laender
apply:
tags: laender
vars:
tuxflotte_state: "{{ tuxflotte_auftrag_states.get('laender', 'present') }}"
tuxflotte_optionen: "{{ tuxflotte_auftrag_optionen.get('laender', {}) }}"
tags: laender
- include_role:
name: zeitserver
apply:
tags: zeitserver
vars:
tuxflotte_state: "{{ tuxflotte_auftrag_states.get('zeitserver', 'present') }}"
tuxflotte_optionen: "{{ tuxflotte_auftrag_optionen.get('zeitserver', {}) }}"
tags: zeitserver
- include_role:
name: auto-update
apply:
tags: auto-update
vars:
tuxflotte_state: "{{ tuxflotte_auftrag_states.get('auto-update', 'present') }}"
tuxflotte_optionen: "{{ tuxflotte_auftrag_optionen.get('auto-update', {}) }}"
tags: auto-update