Co-authored-by: DerLinkman <derlinkman@gmail.com> Reviewed-on: #1
6.5 KiB
Rolle os-updates
Aktualisiert alle installierten Pakete auf Debian-Hosts, optional mit Spiegel-Wechsel (Mirror-Switch) und Codename-Anpassung. Die Rolle führt bei Bedarf einen Reboot durch (nur bei neuem Kernel, nicht in LXC-Containern) und schreibt ein detailliertes Update-Log auf den Ansible-Controller.
Siehe auch das Playbook
playbooks/os-updates-deb.yml(in dem direkt im Anschluss diehealthcheck-Rolle läuft) sowie die Repo-README.
Voraussetzungen
- Debian-Ziel-Host
- Benutzer mit
become-Rechten - Schreibrecht auf dem Controller für das Log (delegiert nach localhost)
Einbindung
- hosts: all
become: true
user: admin
roles:
- role: os-updates
ansible-playbook -i inventory/dmc12.yml playbooks/os-updates-deb.yml
Funktionsweise
tasks/main.yml steuert den Ablauf:
update_mirrors.yml(nur wennos_also_update_mirror):- Führt ggf. ein vorangestelltes
apt upgrade distdurch, falls der Codename des Hosts nicht dem Ziel-Codename entspricht. - Sichert
/etc/apt/sources.list(Debian <= 12). - Entfernt
/etc/apt/sources.listab Debian 13 (Umstieg auf deb822). - Schreibt das Template
sources.list-deb822.j2nach/etc/apt/sources.list.d/debian.sources(Debian >= 13) bzw.sources.list.j2nach/etc/apt/sources.list(Debian < 13). - Erkennt
.list- und.sources-Fragmente in/etc/apt/sources.list.dund ersetzt Codenames (z. B.bookworm→trixie) perreplace, sofern sie inos_update_debian_codenamesgelistet sind. - Aktualisiert den apt-Cache, wenn sich Quellen geändert haben.
- Führt ggf. ein vorangestelltes
upgrade_packages.yml:logging_preflight.yml– ermittelt Anzahl und Liste der upgradbaren Pakete, zeichnet Start-Zeitpunkt auf.apt upgrade: full– vollständiges Upgrade aller Pakete. Benachrichtigt Handlerapt cleanupundapt autoremove.reboot.yml– entscheidet über Reboot-Vergleich von laufendem und installiertem Kernel, rebootet asynchron, wartet auf Wiederkehr, erfasst Downtime. Wird in LXC-Containern übersprungen.logging_postflight.yml– berechnet Dauer, schreibt Log-Eintrag mit allen Fakten inos_update_log_file(delegiert an localhost).
Reboot-Entscheidung
- Läuft ein älterer Kernel als installiert, gilt
reboot_required: true. - Der Reboot erfolgt mit
async: 1,poll: 0, gefolgt vonwait_for_connection(Delay 10s, Timeout 600s). - In LXC-Containern (
virtualization_type == "lxc") wird der gesamte Reboot-Block übersprungen.
Variablen
| Variable | Typ | Default | Beschreibung |
|---|---|---|---|
os_update_auto_upgrade |
bool | true |
(Steuer-Vorbereitung) Auto-Upgrade erlauben |
os_also_update_mirror |
bool | false |
Spiegel-Wechsel und Codename-Rewrite durchführen |
os_update_logging_enabled |
bool | true |
Update-Logging aktivieren |
os_update_log_dir |
string | /ansible/logs |
Basis-Verzeichnis für Logs |
os_update_log_inventory |
string | {{ inventory_file | basename | splitext | first }} |
Inventory-Name (abgeleitet) |
os_update_log_file |
string | <log_dir>/<inventory>/<hostname>/update.log |
Pfad zur Update-Log-Datei (Controller-seitig) |
os_update_mirrors |
list | siehe defaults/ |
Zwei Spiegel: [0] Haupt-Spiegel, [1] Security-Spiegel |
os_update_version_codename |
string | {{ ansible_facts['distribution_release'] }} |
Ziel-Codename für Template-Ausfüllung |
os_update_debian_codenames |
list | [trixie, bookworm, bullseye] |
Erlaubte Codenames, die in .list/.sources umgeschrieben werden |
Achtung:
os_update_version_codenamewird ininventory/group_vars/debian.ymlauftrixieüberschrieben. Nicht blind ändern – der Wert steuert die Template-Ausfüllung dersources.list.
Templates
| Template | Ziel | Debian-Version |
|---|---|---|
sources.list.j2 |
/etc/apt/sources.list |
< 13 |
sources.list-deb822.j2 |
/etc/apt/sources.list.d/debian.sources |
>= 13 |
Beide Templates erzeugen main, -updates, -backports und -security
Einträge mit main contrib non-free non-free-firmware.
Handler
| Handler | Auslöser | Beschreibung |
|---|---|---|
apt cleanup |
apt upgrade: full |
apt clean + apt autoclean |
apt autoremove |
apt upgrade: full |
apt autoremove |
Tags
Die Rolle vergibt keine eigenen Tags.
Abhängigkeiten
- Keine weiteren Rollen.
- Collections:
ansible.builtin(Bordmittel). - Empfohlener Partner:
healthcheck-Rolle (für Quality-Gate nach Update).
Hinweise
- Logging: Das Log wird delegiert an localhost geschrieben unter
logs/<inventory>/<hostname>/update.log. Das Verzeichnislogs/ist git-ignored. Die Struktur ist so gewählt, dass diehealthcheck-Rolle ihrequality_gate-Sektion an denselben Log-Eintrag anhängen kann. - Spiegel-Wechsel (
os_also_update_mirror: true) ist potenziell destruktiv: bestehendesources.listwird gesichert bzw. entfernt. Vorsicht beim Wechsel auf andere Debian-Releases. - Codename-Rewrite greift nur bei Codenames aus
os_update_debian_codenames– schützt davor, Drittrepositories versehentlich umzuschreiben. - LXC: In Containern wird der Reboot-Block komplett übersprungen
(
virtualization_type != "lxc"). - Idempotenz:
apt upgrade: fullmeldetchanged, wenn Pakete aktualisiert wurden; ohne anstehende Updates ist der Lauf "ok".