30.Januar 2025
In diesem Artikel zeige ich euch, wie man mit Ansible ein Debian-System auf einem Proxmox-Server aktualisieren kann. Dabei nutzen wir die Möglichkeit, vor dem Update einen Snapshot der VM zu erstellen. Dies stellt sicher, dass wir im Falle eines Fehlers auf einen funktionierenden Zustand zurückkehren können. Alles wird mit Ansible automatisiert.
Einrichtung des Projekts
Zunächst richten wir ein Projektverzeichnis ein und erstellen eine Python Virtual Environment:
1mkdir ansible-projekt
2cd ansible-projekt
3python3 -m venv .venv
Nachdem die Umgebung eingerichtet ist, aktivieren wir sie und installieren Ansible sowie die benötigten Pakete:
1source .venv/bin/activate
2pip install ansible proxmoxer requests
Hinweis: Die Pakete proxmoxer
und requests
werden für den Zugriff auf Proxmox benötigt.
Für den Zugriff auf den Proxmox-Server wird ein Benutzer mit Passwort oder ein API-Token benötigt. Speichert eure Zugangsdaten niemals direkt im Playbook!
Ansible Playbook zur Aktualisierung des Systems
Hier ist das Playbook, das den Upgrade-Prozess durchführt:
1---
2- name: Update Debian System
3 hosts: all
4 become: yes
5
6 vars:
7 snapname: before_update
8
9 tasks:
10 - name: Prüfe, ob das System Debian 11 ist
11 ansible.builtin.fail:
12 msg: "Dieses Playbook ist nur für Debian 11 (Bullseye)"
13 when: ansible_lsb.release != "11"
14
15 - name: Erstelle einen Snapshot
16 community.general.proxmox_snap:
17 vmid: 111
18 snapname: "{{ snapname }}"
19 state: present
20 api_user: root@pam
21 api_password: xxxxx
22 api_host: 192.168.174.20
23 validate_certs: no
24 become: false
25 delegate_to: localhost
26
27 - name: Ersetze "bullseye" durch "bookworm"
28 ansible.builtin.replace:
29 path: /etc/apt/sources.list
30 regexp: 'bullseye'
31 replace: 'bookworm'
32
33 - name: Update apt Cache
34 ansible.builtin.apt:
35 update_cache: yes
36
37 - name: Aktualisiere das OS
38 ansible.builtin.apt:
39 upgrade: dist
40
41 - name: Starte das System neu
42 reboot:
43 msg: "Rebooting system after upgrade"
44 connect_timeout: 5
45 reboot_timeout: 600
46 pre_reboot_delay: 10
47
48 - name: Erneutes Sammeln der Systeminformationen
49 setup:
50
51 - name: Prüfe, ob Debian 12 installiert ist
52 debug:
53 msg: "Upgrade erfolgreich: System läuft nun mit Debian 12 (Bookworm)"
54 when: ansible_lsb.release == "12"
55
56 - name: Fehlermeldung, falls das System noch Debian 11 ist
57 fail:
58 msg: "Upgrade fehlgeschlagen: System läuft weiterhin mit Debian 11 (Bullseye)"
59 when: ansible_lsb.release == "11"
Schritt-für-Schritt-Erklärung des Playbooks
-
Prüfung des Betriebssystems:
- Das Playbook stellt sicher, dass das System Debian 11 ist.
- Falls nicht, bricht das Playbook mit einer Fehlermeldung ab.
-
Snapshot-Erstellung:
- Vor dem Upgrade wird ein Snapshot der VM erstellt.
- Die Zugangsdaten für Proxmox dürfen nicht im Playbook gespeichert werden.
delegate_to: localhost
sorgt dafür, dass dieser Task nicht auf der Zielmaschine, sondern direkt auf dem Ansible-Controller ausgeführt wird. Dies ist besonders wichtig für Aufgaben, die mit externen Systemen wie Proxmox interagieren, da sie nicht von der verwalteten VM, sondern von der Steuerungsmaschine aus erfolgen müssen. Dadurch müssen die erforderlichen Python-Pakete wie proxmoxer nur auf dem Controller installiert sein.
-
Anpassen der Paketquellen:
- “bullseye” wird in
/etc/apt/sources.list
durch “bookworm” ersetzt.
- “bullseye” wird in
-
Aktualisieren des apt Caches:
- Der apt Cache wird aktualisiert, damit das System die neuesten Paketlisten kennt.
-
Upgrade des Betriebssystems:
- Ein vollständiges Upgrade wird durchgeführt.
-
Neustart des Systems:
- Das System wird nach der Aktualisierung neu gestartet.
- Ansible wartet, bis die Maschine wieder erreichbar ist.
-
Erneutes Sammeln der Systeminformationen:
- Nach dem Reboot wird das System erneut analysiert.
-
Upgrade-Validierung:
- Es wird geprüft, ob Debian 12 installiert ist.
- Falls das Upgrade erfolgreich war, gibt es eine Bestätigung.
-
Fehlerprüfung:
- Falls das System immer noch Debian 11 ist, wird das Playbook mit einer Fehlermeldung abgebrochen.
Löschen des Snapshots:
Falls das Upgrade erfolgreich war, kann nun der Snapshot gelöscht werden.
Hinweis:
- Bevor ihr den Snapshot löscht, stellt sicher, dass alle Dienste korrekt laufen (z. B. Webserver, Datenbanken etc.).
- Falls nach dem Upgrade Probleme auftreten, kann der Snapshot zur Wiederherstellung genutzt werden.
Fazit
Mit diesem Ansible-Playbook lässt sich ein Debian-Upgrade effizient durchführen. Gleichzeitig sorgt der Snapshot für eine Sicherheitsrückfallebene, falls das Update fehlschlägt. So kann das System einfach wiederhergestellt werden.