diff --git a/Playbooks/update-stopped-vms.sh b/Playbooks/update-stopped-vms.sh new file mode 100644 index 0000000..a44a71d --- /dev/null +++ b/Playbooks/update-stopped-vms.sh @@ -0,0 +1,74 @@ +#!/bin/bash + +# Proxmox-Server-IPs und Login-Daten +PROXMOX_SERVERS=("192.168.178.2" "192.168.178.3") +SSH_USER="root" +SSH_KEY_PATH="/root/.ssh/id_rsa" # Pfad zu deinem SSH-Schlüssel + +# Funktion, um alle VMs auf einem Proxmox-Server zu starten +start_vms_if_needed() { + local server=$1 + echo "Verbinde mit Server: $server" + + # Liste der VMs, die derzeit nicht laufen + ssh -i "$SSH_KEY_PATH" "$SSH_USER@$server" "qm list | grep -v 'status running' | awk '{print \$1}'" | while read vmid; do + echo "Starte VM mit ID: $vmid" + # VM starten + ssh -i "$SSH_KEY_PATH" "$SSH_USER@$server" "qm start $vmid" + done +} + +# Funktion für das Update, Upgrade und Bereinigung auf einer VM +update_vm() { + local server=$1 + local vmid=$2 + local was_running=$3 # Flag, ob die VM ursprünglich lief (1 = ja, 0 = nein) + + echo "Führe Update und Upgrade für VM ID $vmid auf Server $server aus" + + # Update und Upgrade auf der VM durchführen + ssh -i "$SSH_KEY_PATH" "$SSH_USER@$server" << EOF + qm terminal $vmid -- /bin/bash -c " + echo 'Update starte auf VM $vmid...' + apt-get update && apt-get upgrade -y && apt-get autoremove -y && apt-get clean + echo 'Update abgeschlossen auf VM $vmid' + " +EOF + + # Wenn die VM ursprünglich nicht lief, nach dem Update wieder herunterfahren + if [ "$was_running" -eq 0 ]; then + echo "Fahre VM mit ID $vmid nach dem Update herunter." + ssh -i "$SSH_KEY_PATH" "$SSH_USER@$server" "qm stop $vmid" + fi +} + +# Funktion, um alle VMs auf einem Server zu überprüfen und zu aktualisieren +check_and_update_vms() { + local server=$1 + echo "Überprüfe VMs auf Server: $server" + + # Alle VMs durchgehen und sicherstellen, dass sie laufen + ssh -i "$SSH_KEY_PATH" "$SSH_USER@$server" "qm list | awk '{print \$1}' | tail -n +2" | while read vmid; do + # Prüfen, ob VM läuft + status=$(ssh -i "$SSH_KEY_PATH" "$SSH_USER@$server" "qm status $vmid") + was_running=0 + + if [[ "$status" == *"running"* ]]; then + # VM läuft, keine Notwendigkeit zum Starten + was_running=1 + else + # VM läuft nicht, starte sie + start_vms_if_needed "$server" + fi + + # Nach dem Starten das Update/Upgrade durchführen + update_vm "$server" "$vmid" "$was_running" + done +} + +# Hauptprozess, alle Server abarbeiten +for server in "${PROXMOX_SERVERS[@]}"; do + check_and_update_vms "$server" +done + +echo "Alle VMs wurden aktualisiert, bereinigt und nach Bedarf heruntergefahren."