Files
ansible-playbooks/roles/os-updates/README.md
T
DerLinkman 30f3e9a4c6 rename dmc12 inventory to cloudlorean and vault admin_password
- replace inventory/dmc12.yml with cloudlorean.yml (+ group_vars) and update
  all README/AGENTS call examples and the inventory table
- move admin_password hash into encrypted vault.yml; remove plaintext copies
  from roles/bootstrap/defaults and group_vars/external.yml
- bootstrap.yml loads vault.yml via vars_files (same pattern as monitoring)
- monitoring: PSK config/registration updates, docker role defaults,
  os-updates logging/reboot refinements, ansible.cfg/execute.sh tweaks
- add .project-wiki knowledge base and .github agent instructions
2026-09-09 14:14:18 +02:00

139 lines
7.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 oder
standardmäßig auf Proxmox-Hypervisoren) und schreibt ein detailliertes
Update-Log auf den Ansible-Controller.
> Siehe auch das Playbook `playbooks/os-updates-deb.yml` (in dem direkt im
> Anschluss die `healthcheck`-Rolle läuft) sowie die
> [Repo-README](../../README.md).
## Voraussetzungen
- Debian-Ziel-Host
- Benutzer mit `become`-Rechten
- Schreibrecht auf dem Controller für das Log (delegiert nach localhost)
## Einbindung
```yaml
- hosts: all
become: true
user: admin
roles:
- role: os-updates
```
```bash
ansible-playbook -i inventory/cloudlorean.yml playbooks/os-updates-deb.yml
```
## Funktionsweise
`tasks/main.yml` steuert den Ablauf:
1. **`update_mirrors.yml`** (nur wenn `os_also_update_mirror`):
- Führt ggf. ein vorangestelltes `apt upgrade dist` durch, falls der
Codename des Hosts nicht dem Ziel-Codename entspricht.
- Sichert `/etc/apt/sources.list` (Debian <= 12).
- Entfernt `/etc/apt/sources.list` ab Debian 13 (Umstieg auf deb822).
- Schreibt das Template `sources.list-deb822.j2` nach
`/etc/apt/sources.list.d/debian.sources` (Debian >= 13) bzw.
`sources.list.j2` nach `/etc/apt/sources.list` (Debian < 13).
- Erkennt `.list`- und `.sources`-Fragmente in
`/etc/apt/sources.list.d` und ersetzt Codenames (z. B. `bookworm` →
`trixie`) per `replace`, sofern sie in `os_update_debian_codenames`
gelistet sind.
- Aktualisiert den apt-Cache, wenn sich Quellen geändert haben.
2. **`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
Handler `apt cleanup` und `apt autoremove`.
- `reboot.yml` – entscheidet über Reboot-Vergleich von laufendem und
installiertem Kernel, rebootet asynchron, wartet auf Wiederkehr,
erfasst Downtime. Auf Hosts in der Inventory-Gruppe `proxmox` wird der
notwendige Reboot standardmäßig nur gemeldet und nicht ausgeführt.
Wird in LXC-Containern übersprungen.
- `logging_postflight.yml` – berechnet Dauer, schreibt Log-Eintrag mit
allen Fakten in `os_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 von
`wait_for_connection` (Delay 10s, Timeout 600s).
- Auf Proxmox-Hypervisoren (`'proxmox' in group_names`) wird bei einem
notwendigen Reboot eine Meldung ausgegeben und `reboot_deferred: true` im
Log gesetzt. So kann der Hypervisor kontrolliert außerhalb dieses Laufs
neu gestartet werden.
- Mit `os_update_reboot_on_proxmox: true` kann der automatische Reboot für
einen Proxmox-Host explizit aktiviert werden.
- 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_reboot_on_proxmox` | bool | `false` | Reboot auf Hosts der Inventory-Gruppe `proxmox` zulassen; standardmäßig wird nur gemeldet |
| `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_codename` wird in
> `inventory/group_vars/debian.yml` auf `trixie` überschrieben. Nicht blind
> ändern – der Wert steuert die Template-Ausfüllung der `sources.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 Verzeichnis `logs/` ist
git-ignored. Die Struktur ist so gewählt, dass die `healthcheck`-Rolle
ihre `quality_gate`-Sektion an denselben Log-Eintrag anhängen kann.
- **Spiegel-Wechsel** (`os_also_update_mirror: true`) ist potenziell
destruktiv: bestehende `sources.list` wird 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: full` meldet `changed`, wenn Pakete
aktualisiert wurden; ohne anstehende Updates ist der Lauf "ok".