From cc72a5f96e95b6fa8a9ee3ca247283eff9e0ded1 Mon Sep 17 00:00:00 2001 From: Marius Date: Mon, 6 Oct 2025 21:46:28 +0300 Subject: [PATCH] Add UPS battery replacement procedure and maintenance shutdown script MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds complete procedure for replacing UPS battery when entire cluster is powered by the same UPS, requiring full cluster shutdown. New files: - scripts/ups-maintenance-shutdown.sh: Automated orchestrated shutdown for maintenance operations with confirmation prompts and progress display - docs/UPS-BATTERY-REPLACEMENT.md: Complete step-by-step guide for battery replacement including pre-shutdown, physical replacement, and post-startup verification procedures Features: - Orchestrated shutdown: VMs → LXC containers → secondary nodes → primary - Interactive confirmation before shutdown - Color-coded progress indicators - Countdown timers for each phase - Post-replacement verification checklist - Troubleshooting guide for common issues - Recovery procedures for cluster/quorum problems The procedure accounts for all 3 cluster nodes (pve1, pvemini, pveelite) being on the same UPS, requiring complete infrastructure shutdown. Documentation includes: - When to replace battery (based on monthly test results) - Pre-planning and user notification templates - Physical battery replacement safety procedures - Cluster recovery and VM restart procedures - Post-replacement testing and verification - 24-hour and 1-week monitoring checklists Estimated maintenance window: 30-60 minutes 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- proxmox/ups/README.md | 12 +- proxmox/ups/docs/UPS-BATTERY-REPLACEMENT.md | 515 ++++++++++++++++++ .../ups/scripts/ups-maintenance-shutdown.sh | 156 ++++++ 3 files changed, 681 insertions(+), 2 deletions(-) create mode 100644 proxmox/ups/docs/UPS-BATTERY-REPLACEMENT.md create mode 100644 proxmox/ups/scripts/ups-maintenance-shutdown.sh diff --git a/proxmox/ups/README.md b/proxmox/ups/README.md index 869fbdd..616a2eb 100644 --- a/proxmox/ups/README.md +++ b/proxmox/ups/README.md @@ -19,12 +19,14 @@ proxmox/ups/ │ ├── ups-shutdown-cluster.sh # Script principal shutdown orchestrat │ ├── ups-shutdown-test.sh # Script test (dry-run) │ ├── upssched-cmd # Handler evenimente upssched -│ └── ups-monthly-test.sh # Test lunar automat baterie (NOU!) +│ ├── ups-monthly-test.sh # Test lunar automat baterie +│ └── ups-maintenance-shutdown.sh # Shutdown pentru mentenanță UPS (NOU!) └── docs/ # Documentație ├── INSTALARE-NUT.md # Ghid instalare NUT pe Proxmox ├── INSTALARE-WINNUT.md # Ghid instalare WinNUT pe Windows ├── UPS-SHUTDOWN-README.md # Documentație completă sistem - └── UPS-MONTHLY-TEST.md # Documentație test lunar baterie (NOU!) + ├── UPS-MONTHLY-TEST.md # Documentație test lunar baterie + └── UPS-BATTERY-REPLACEMENT.md # Procedură înlocuire baterie (NOU!) ``` 🎯 Utilizare: @@ -399,6 +401,12 @@ iptables -A INPUT -p tcp --dport 3493 -s 10.0.20.0/24 -j ACCEPT - NUT server pe pvemini expune date la toate nodurile - Logging complet evenimente și teste +### ✅ Mentenanță Baterie (NOU!) +- Script automat shutdown orchestrat pentru înlocuire baterie +- Procedură pas-cu-pas completă cu checklist-uri +- Recovery procedures pentru probleme comune +- Documentație: [`docs/UPS-BATTERY-REPLACEMENT.md`](docs/UPS-BATTERY-REPLACEMENT.md) + ## Autori și Istoric - **Creat:** 2025-10-06 diff --git a/proxmox/ups/docs/UPS-BATTERY-REPLACEMENT.md b/proxmox/ups/docs/UPS-BATTERY-REPLACEMENT.md new file mode 100644 index 0000000..bf42a99 --- /dev/null +++ b/proxmox/ups/docs/UPS-BATTERY-REPLACEMENT.md @@ -0,0 +1,515 @@ +# Procedură Înlocuire Baterie UPS + +## Despre + +Ghid complet pentru înlocuirea bateriei UPS când cluster-ul Proxmox este complet alimentat de UPS. Include scripturi automate, checklist-uri și proceduri de recovery. + +**⚠️ IMPORTANT:** Toate cele 3 noduri (pve1, pvemini, pveelite) sunt pe același UPS, deci **trebuie oprit complet cluster-ul**. + +## Când Trebuie Înlocuită Bateria? + +### Indicatori din Testele Lunare: + +| Indicator | Acțiune | +|-----------|---------| +| **Health: POOR** (charge drop > 55%) | ⚠️ URGENT - Înlocuiește IMEDIAT | +| **Health: FAIR** (charge drop 35-55%) | 📅 Planifică în 1-3 luni | +| **Health: GOOD** (charge drop 15-35%) | ✅ Monitorizează lunar | +| **Health: EXCELLENT** (charge drop < 15%) | ✅ Baterie OK | + +### Alte Semne: + +- Vârsta bateriei > 3-4 ani +- UPS emite beep-uri frecvente +- Timp de autonomie scăzut vizibil (< 5 minute cu sarcină normală) +- Baterie umflată sau deteriorată fizic +- 3+ teste lunare consecutive cu health FAIR/POOR + +## Pregătire + +### 1. Comandă Baterie Nouă + +**Verifică specificațiile UPS-ului:** +```bash +ssh root@10.0.20.201 "upsc nutdev1 2>/dev/null | grep -E 'battery.voltage.nominal|battery.type'" +``` + +Pentru UPS-ul tău (INNO TECH): +- Tensiune nominală: **24V** (2x 12V în serie) +- Tip: Probabil **12V 7Ah** sau **12V 9Ah** (2 bucăți) + +**Verifică FIZIC bateria actuală** înainte de comandă: +- Model exact scris pe baterie +- Capacitate (Ah) +- Dimensiuni fizice + +### 2. Planificare Fereastră de Mentenanță + +**Timpul estimat: 30-60 minute** + +Breakdown: +- Shutdown cluster: ~10 minute +- Înlocuire fizică baterie: 10-15 minute +- Pornire și verificare cluster: 10-15 minute +- **Buffer pentru probleme:** 15-20 minute + +**Moment recomandat:** +- Duminică 02:00-04:00 (minimal impact) +- SAU orice fereastră de mentenanță aprobată + +### 3. Anunță În Avans + +**Template email/notificare:** +``` +Subject: [IMPORTANT] Mentenanță Programată UPS - Duminică 02:00-04:00 + +Bună ziua, + +Duminică, [DATA], între orele 02:00-04:00 va avea loc o intervenție +programată pentru înlocuirea bateriei UPS. + +IMPACT: +- Toate serverele/serviciile vor fi indisponibile timp de ~45 minute +- Cluster Proxmox va fi oprit complet +- VM-uri și servicii vor fi oprite orchestrat și repornite automat + +Ce se va întâmpla: +1. 02:00 - Shutdown orchestrat cluster (VM-uri + noduri) +2. 02:15 - Înlocuire fizică baterie UPS +3. 02:30 - Pornire noduri + verificare cluster +3. 02:45 - Pornire VM-uri și verificare servicii + +În caz de probleme, timpul poate fi extins cu 30-60 minute. + +Vă rugăm să salvați orice lucru în curs și să vă deconectați +de la servicii cu 10 minute înainte (01:50). + +Mulțumim pentru înțelegere! +``` + +## Procedură Pas-cu-Pas + +### ETAPA 1: Pre-Shutdown (15 minute înainte) + +**1.1. Conectare la pvemini:** +```bash +ssh root@10.0.20.201 +``` + +**1.2. Verificare finală status cluster:** +```bash +# Status cluster +pvecm status + +# VM-uri running +qm list | grep running + +# Status UPS +upsc nutdev1 ups.status battery.charge + +# Backup-uri recente? +ls -lh /var/lib/vz/dump/ | tail -5 +``` + +**1.3. Notificare utilizatori (dacă aplicabil):** +```bash +# Trimite mesaj pe toate nodurile (wall) +for node in pve1 pvemini pveelite; do + ssh root@$node "wall 'ATENȚIE: Cluster se va opri în 15 minute pentru mentenanță UPS!'" +done +``` + +### ETAPA 2: Shutdown Orchestrat + +**2.1. Rulare script automat:** +```bash +cd /opt/scripts +./ups-maintenance-shutdown.sh +``` + +Scriptul va: +- Cere confirmare (scrie **DA**) +- Opri toate VM-urile (timeout 180s) +- Opri containerele LXC +- Opri nodurile secundare (pve1, pveelite) +- Opri pvemini (ultimul) + +**2.2. Monitorizare (opțional):** + +Deschide un al doilea terminal SSH și monitorizează: +```bash +# Monitor log +tail -f /var/log/ups-maintenance.log + +# Monitor VM-uri +watch -n 5 'qm list' +``` + +**2.3. Așteptare:** +- Script va afișa countdown +- Totul se va opri automat în ~10 minute +- **pvemini se va opri ultimul (2 minute după nodurile secundare)** + +### ETAPA 3: Verificare Oprire Completă + +**3.1. Verifică LED-uri:** +- **pve1:** LED-uri stinse +- **pveelite:** LED-uri stinse +- **pvemini:** LED-uri stinse + +**3.2. Verifică ventilatoare:** +- Ascultă - toate ventilatoarele ar trebui să fie oprite + +**3.3. Dacă un nod nu s-a oprit:** +- Conectează monitor/keyboard la nod +- SAU apasă lung butonul de power (10 secunde) pentru force shutdown +- **ULTIMĂ OPȚIUNE:** Deconectează alimentarea + +### ETAPA 4: Înlocuire Fizică Baterie + +**⚠️ ATENȚIE LA SIGURANȚĂ:** +- Folosește mănuși izolante +- NU scurtcircuita terminalele bateriei +- Notează polaritatea (+/-) + +**4.1. Deconectare UPS:** +``` +1. Deconectează UPS de la priză (scoate din priză) +2. Apasă butonul de power al UPS-ului 5 secunde (descarcă condensatori) +``` + +**4.2. Deschide UPS:** +``` +1. Identifică panoul de acces baterie (de obicei față sau spate) +2. Deșurubează/deschide panoul +3. Fotografiază conexiunile (pentru referință) +``` + +**4.3. Deconectare baterie veche:** +``` +1. Notează polaritatea (+ la roșu, - la negru) +2. Deconectează mai întâi cablul NEGATIV (-) +3. Apoi deconectează cablul POZITIV (+) +4. Scoate bateria veche cu grijă +``` + +**4.4. Instalare baterie nouă:** +``` +1. Plasează bateria nouă în suport +2. Conectează cablul POZITIV (+) PRIMUL +3. Apoi conectează cablul NEGATIV (-) +4. Verifică că conexiunile sunt ferme +5. Asigură-te că bateria nu se mișcă +``` + +**4.5. Închide UPS:** +``` +1. Închide panoul de acces +2. Fixează șuruburile +``` + +**4.6. Reconectare:** +``` +1. Conectează UPS la priză +2. Pornește UPS (buton de power) +3. Verifică LED-uri: ar trebui să vadă "charging" sau "online" +4. Ascultă beep-uri - normal este 1 beep la pornire +``` + +**4.7. Așteptare încărcare inițială:** +- Lasă UPS-ul conectat 2-3 minute să încarce bateria nouă +- Verifică că nu sunt erori pe display + +### ETAPA 5: Pornire Cluster + +**5.1. Pornire noduri - Ordine inversă:** + +**Primul: Noduri secundare (pve1, pveelite)** +``` +1. Apasă butonul de power pe pve1 +2. Apasă butonul de power pe pveelite +3. Așteaptă 2 minute pentru boot +``` + +**Al doilea: Nod primary (pvemini)** +``` +1. Apasă butonul de power pe pvemini +2. Așteaptă 3 minute pentru boot complet +``` + +**5.2. Conectare la pvemini când e disponibil:** +```bash +# Așteaptă până poți face SSH +ssh root@10.0.20.201 +``` + +### ETAPA 6: Verificări Post-Pornire + +**6.1. Verificare cluster:** +```bash +# Status cluster - ar trebui să vezi toate cele 3 noduri +pvecm status + +# Verifică quorum +corosync-quorumtool -s + +# Toate nodurile online? +pvecm nodes +``` + +**Așteptat:** +``` +Quorate: Yes +Expected votes: 3 +Total votes: 3 + +Nodeid: 1 (pve1) - online +Nodeid: 2 (pvemini) - online +Nodeid: 3 (pveelite) - online +``` + +**6.2. Verificare UPS:** +```bash +# Status UPS +upsc nutdev1 + +# Valori importante: +upsc nutdev1 ups.status # Ar trebui: OL (Online) +upsc nutdev1 battery.charge # Poate fi 50-80% (baterie nouă în încărcare) +upsc nutdev1 battery.voltage # ~24-27V +``` + +**6.3. Verificare servicii NUT:** +```bash +systemctl status nut-server +systemctl status nut-monitor + +# Logs pentru erori +journalctl -u nut-server -n 50 +``` + +### ETAPA 7: Pornire VM-uri + +**7.1. Verifică ce VM-uri au autostart:** +```bash +# VM-uri cu onboot=1 +grep -r "onboot: 1" /etc/pve/qemu-server/ + +# Sau +qm list | head -1 && grep "^onboot" /etc/pve/qemu-server/*.conf | grep "onboot: 1" +``` + +**7.2. Pornire VM-uri critice manual:** +```bash +# Listează toate VM-urile +qm list + +# Pornește VM-uri importante +qm start 201 # roacentral (Windows 11) +# Adaugă alte VM-uri critice + +# Sau pornește toate VM-urile care erau running: +for vmid in $(qm list | awk 'NR>1 {print $1}'); do + qm start $vmid +done +``` + +**7.3. Verificare VM-uri:** +```bash +# Status VM-uri +qm list + +# Pentru fiecare VM important, verifică: +qm status 201 +``` + +### ETAPA 8: Test Final Baterie Nouă + +**8.1. Rulare test baterie NUT:** +```bash +# Test automat +/opt/scripts/ups-monthly-test.sh + +# Monitorizează log +tail -f /var/log/ups-monthly-test.log +``` + +**8.2. Verificare rezultat test:** +```bash +# Ar trebui să vezi EXCELLENT sau GOOD pentru baterie nouă +tail -30 /var/log/ups-monthly-test.log | grep -A 5 "Sănătate baterie" +``` + +**Așteptat pentru baterie nouă:** +- Charge drop: < 10% (EXCELLENT) +- Voltage drop: 1-2V +- Recuperare rapidă: < 60 secunde + +**8.3. Test fizic (opțional dar recomandat):** +```bash +# Deconectează UPS de la priză 10 secunde +# Monitorizează în WinNUT pe VM 201 +# UPS ar trebui să susțină sarcina fără probleme +# Reconectează la priză +``` + +### ETAPA 9: Notificare Finalizare + +**9.1. Email/notificare utilizatori:** +``` +Subject: Mentenanță UPS Finalizată Cu Succes + +Mentenanța programată a fost finalizată cu succes. + +STATUS: +✅ Baterie UPS înlocuită +✅ Toate nodurile cluster online +✅ Quorum OK +✅ VM-uri repornite +✅ Test baterie: [EXCELLENT/GOOD] + +Serviciile sunt disponibile. + +Durata totală: [XX] minute + +Mulțumim pentru răbdare! +``` + +**9.2. Documentare în log:** +```bash +echo "[$(date)] UPS Battery replaced. Old battery removed, new battery installed. Test result: [RESULT]. Cluster fully operational." >> /var/log/ups-maintenance.log +``` + +## Troubleshooting + +### Problema 1: Un nod nu pornește după shutdown + +**Verificări:** +```bash +# Încearcă SSH +ssh root@[IP-NOD] + +# Dacă nu răspunde: +# 1. Verifică LED-uri de pe nod - sunt aprinse? +# 2. Conectează monitor la nod - ce erori apar? +# 3. Verifică cablul de rețea +# 4. Hard reset: butoane power lung (10s) apoi pornește din nou +``` + +**Recovery:** +```bash +# Dacă nodul lipsește din cluster: +pvecm nodes + +# Forțează quorum cu 2 noduri (ULTIMĂ OPȚIUNE): +pvecm expected 2 +``` + +### Problema 2: UPS nu funcționează după înlocuire baterie + +**Verificări:** +- LED-uri UPS - ce culoare? +- Beep-uri - ce pattern? +- Polaritate baterie corectă? (+ la +, - la -) +- Conexiuni ferme? + +**Soluții:** +```bash +# Verifică ce raportează NUT +upsc nutdev1 + +# Dacă nu răspunde: +systemctl restart nut-driver@nutdev1 +systemctl restart nut-server +``` + +### Problema 3: Baterie nouă se descarcă prea repede în test + +**Normal pentru bateriile noi:** +- Primele 2-3 cicluri de încărcare pot fi instabile +- Bateria trebuie "condiționată" (câteva cicluri complete) + +**Verificare:** +```bash +# Rulează test din nou după 24 ore +/opt/scripts/ups-monthly-test.sh + +# Dacă și al 2-lea test e POOR: +# -> Baterie defectă, returnează la furnizor +``` + +### Problema 4: Cluster nu formează quorum + +**Verificări:** +```bash +# Status pe fiecare nod +ssh root@10.0.20.200 "pvecm status" +ssh root@10.0.20.201 "pvecm status" +ssh root@10.0.20.202 "pvecm status" + +# Corosync funcționează? +ssh root@10.0.20.201 "systemctl status corosync" +``` + +**Recovery:** +```bash +# Restart corosync pe toate nodurile +for node in 10.0.20.200 10.0.20.201 10.0.20.202; do + ssh root@$node "systemctl restart corosync pve-cluster" +done + +# Așteaptă 30 secunde +sleep 30 + +# Verifică din nou +pvecm status +``` + +## Checklist Post-Înlocuire + +### Verificare Imediată (primele 24 ore): + +- [ ] Toate nodurile online în cluster +- [ ] Quorum OK (pvecm status) +- [ ] UPS status: OL (Online) +- [ ] Baterie nouă se încarcă (battery.charge crește) +- [ ] Test automat baterie: EXCELLENT sau GOOD +- [ ] VM-uri critice pornite și funcționale +- [ ] Servicii în producție OK +- [ ] Notificare utilizatori trimisă +- [ ] Documentat în log (/var/log/ups-maintenance.log) + +### Monitorizare Prima Săptămână: + +- [ ] Zi 1: Verificare battery.charge ajunge la 100% +- [ ] Zi 3: Test fizic scurt (deconectare 10s) +- [ ] Zi 7: Test baterie complet (rulare script lunar manual) + +### Acțiuni După 1 Lună: + +- [ ] Verificare test lunar automat (1 ale lunii) +- [ ] Rezultat ar trebui să fie în continuare EXCELLENT/GOOD +- [ ] Dacă nu: verifică baterie/conexiuni + +## Checklist Înainte de Următoarea Mentenanță + +Pentru mentenanța viitoare (peste 3-4 ani), verifică că: + +- [ ] Acest document este actualizat +- [ ] IP-urile nodurilor sunt corecte în script +- [ ] Backup-uri recente există +- [ ] Procedura a fost testată/revizuită +- [ ] Ai bateria de rezervă comandată din timp + +## Referințe + +- Script shutdown: `/opt/scripts/ups-maintenance-shutdown.sh` +- Log mentenanță: `/var/log/ups-maintenance.log` +- Test lunar: `/opt/scripts/ups-monthly-test.sh` +- Documentație UPS: [`UPS-SHUTDOWN-README.md`](UPS-SHUTDOWN-README.md) + +--- + +**Autor:** Claude Code +**Data:** 2025-10-06 +**Versiune:** 1.0 diff --git a/proxmox/ups/scripts/ups-maintenance-shutdown.sh b/proxmox/ups/scripts/ups-maintenance-shutdown.sh new file mode 100644 index 0000000..4c77c16 --- /dev/null +++ b/proxmox/ups/scripts/ups-maintenance-shutdown.sh @@ -0,0 +1,156 @@ +#!/bin/bash +# +# Script de shutdown orchestrat pentru mentenanță UPS +# Folosit când trebuie să oprești complet clusterul pentru înlocuire baterie +# +# Autor: Claude Code +# Data: 2025-10-06 + +LOGFILE="/var/log/ups-maintenance.log" +NODES=("10.0.20.200" "10.0.20.202") # pve1, pveelite (adaptează dacă IP-urile sunt altele) + +# Culori pentru output +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +NC='\033[0m' # No Color + +log() { + echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a $LOGFILE +} + +echo -e "${BLUE}========================================${NC}" +echo -e "${BLUE}UPS MAINTENANCE - CLUSTER SHUTDOWN${NC}" +echo -e "${BLUE}========================================${NC}" +echo "" +echo -e "${YELLOW}⚠️ ATENȚIE: Acest script va opri TOATE nodurile cluster!${NC}" +echo -e "${YELLOW}⚠️ Folosit pentru mentenanță UPS (înlocuire baterie)${NC}" +echo "" +echo -e "${RED}Cluster nodes care vor fi oprite:${NC}" +echo " - pve1 (10.0.20.200)" +echo " - pveelite (10.0.20.202)" +echo " - pvemini (10.0.20.201) - ULTIMUL" +echo "" +read -p "Continui cu shutdown? (scrie 'DA' pentru confirmare): " confirm + +if [ "$confirm" != "DA" ]; then + echo -e "${RED}Anulat de utilizator.${NC}" + exit 0 +fi + +log "========================================" +log "MAINTENANCE SHUTDOWN - START" +log "Initiated by: $(whoami)" +log "========================================" + +# 1. Verificare status cluster înainte +log "Step 1: Verificare status cluster..." +pvecm status | tee -a $LOGFILE +echo "" + +# 2. Oprire VM-uri pe toate nodurile +log "Step 2: Oprire VM-uri pe TOATE nodurile..." + +echo -e "${BLUE}Oprire VM-uri pe pvemini (local)...${NC}" +for vmid in $(qm list | awk 'NR>1 {print $1}'); do + vm_name=$(qm config $vmid | grep '^name:' | cut -d' ' -f2 || echo "VM-$vmid") + vm_status=$(qm status $vmid | awk '{print $2}') + + if [ "$vm_status" == "running" ]; then + log " Oprire VM $vmid ($vm_name) pe pvemini..." + qm shutdown $vmid --timeout 180 & + else + log " VM $vmid ($vm_name) deja oprit" + fi +done + +# Oprire VM-uri pe nodurile secundare +for node_ip in ${NODES[@]}; do + echo -e "${BLUE}Oprire VM-uri pe nod $node_ip...${NC}" + ssh -o ConnectTimeout=5 root@$node_ip " + for vmid in \$(qm list | awk 'NR>1 {print \$1}'); do + vm_name=\$(qm config \$vmid | grep '^name:' | cut -d' ' -f2 || echo 'VM-'\$vmid) + vm_status=\$(qm status \$vmid | awk '{print \$2}') + + if [ \"\$vm_status\" == \"running\" ]; then + echo ' Oprire VM '\$vmid' ('\$vm_name') pe $node_ip...' + qm shutdown \$vmid --timeout 180 & + fi + done + " 2>&1 | tee -a $LOGFILE +done + +log "Așteptare 3 minute pentru shutdown VM-uri..." +echo -e "${YELLOW}Aștept 180 secunde pentru oprirea graceful a VM-urilor...${NC}" +for i in {180..1}; do + echo -ne "\r${YELLOW}Rămas: $i secunde...${NC} " + sleep 1 +done +echo "" + +# 3. Verificare VM-uri oprite +log "Step 3: Verificare VM-uri oprite..." +running_vms=$(qm list | awk 'NR>1 && $3=="running" {print $1}') +if [ ! -z "$running_vms" ]; then + log "WARNING: VM-uri încă pornite pe pvemini: $running_vms" + echo -e "${YELLOW}WARNING: Unele VM-uri încă rulează. Oprire forțată în 30 secunde...${NC}" + sleep 30 + for vmid in $running_vms; do + log " Force stop VM $vmid" + qm stop $vmid + done +fi + +# 4. Oprire containere (dacă există) +log "Step 4: Oprire containere LXC (dacă există)..." +pct list 2>/dev/null | awk 'NR>1 && $2=="running" {print $1}' | while read ctid; do + log " Oprire container $ctid" + pct shutdown $ctid --timeout 60 & +done +sleep 70 + +# 5. Oprire noduri secundare +log "Step 5: Oprire noduri secundare (pve1, pveelite)..." +for node_ip in ${NODES[@]}; do + log " Shutdown nod $node_ip în 2 minute..." + echo -e "${RED}Shutdown nod $node_ip...${NC}" + ssh -o ConnectTimeout=5 root@$node_ip "shutdown -h +2 'UPS Maintenance - Battery Replacement'" 2>&1 | tee -a $LOGFILE & +done + +log "Așteptare 150 secunde pentru shutdown noduri secundare..." +echo -e "${YELLOW}Aștept 150 secunde pentru oprirea nodurilor secundare...${NC}" +for i in {150..1}; do + echo -ne "\r${YELLOW}Rămas: $i secunde până la shutdown pvemini...${NC} " + sleep 1 +done +echo "" + +# 6. Oprire nod local (pvemini) - ULTIMUL +log "Step 6: Oprire pvemini (nod PRIMARY - ULTIMUL)..." +log "========================================" +log "MAINTENANCE SHUTDOWN - COMPLETE" +log "Nodurile secundare ar trebui să fie oprite." +log "pvemini se va opri în 2 minute." +log "========================================" + +echo "" +echo -e "${GREEN}========================================${NC}" +echo -e "${GREEN}SHUTDOWN ORCHESTRAT FINALIZAT${NC}" +echo -e "${GREEN}========================================${NC}" +echo "" +echo -e "${YELLOW}URMĂTORII PAȘI:${NC}" +echo "1. Așteaptă 2 minute pentru oprirea completă a pvemini" +echo "2. Verifică că toate LED-urile nodurilor sunt stinse" +echo "3. Deconectează UPS de la priză" +echo "4. Înlocuiește bateria UPS" +echo "5. Reconectează UPS la priză" +echo "6. Pornește nodurile (apasă buton power sau WOL)" +echo "7. Verifică cluster cu: pvecm status" +echo "" +echo -e "${RED}pvemini se va opri în 2 minute!${NC}" +echo "" + +shutdown -h +2 "UPS Maintenance - Battery Replacement - Primary Node" + +exit 0