feat(cluster): varianta PowerShell a scripturilor de oprire/repornire

Statia de admin e Windows si nu ruleaza .sh direct: `bash` din PATH e cel din
WSL, cu alt filesystem si alta configuratie de chei SSH. Adaug echivalentele
native PowerShell.

- cluster-shutdown.ps1 / cluster-startup.ps1, aceeasi logica si aceleasi
  garantii ca variantele bash
- folosesc clientul OpenSSH din Windows, deja prezent in System32
- compatibile PowerShell 5.1: fara &&/||, fara ternar, fara ?., fara
  -AsHashtable; ping prin System.Net.NetworkInformation.Ping, nu
  Test-Connection (WMI, lent si des blocat)
- nu redirecteaza stderr-ul lui ssh: in 5.1 asta transforma fiecare linie
  intr-un ErrorRecord si strica $LASTEXITCODE chiar cand comanda a reusit
- parsarea `pct list` / `qm list` se face in PowerShell, nu prin awk remote,
  ca sa nu se incurce interpolarea $1/$2 din stringurile PowerShell
- scriu acelasi format de fisier de stare ca variantele bash, deci poti opri
  cu una si porni cu cealalta

Ambele testate cu -DryRun pe clusterul live, rezultat identic cu bash.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RRyaDj39hPQ89SZS6URRpS
This commit is contained in:
Marius
2026-08-27 14:04:50 +03:00
parent 3ae491f8f2
commit 730ce94fac
3 changed files with 845 additions and 6 deletions

View File

@@ -13,19 +13,40 @@ mutare rack, mentenanță UPS, intervenții la switch.
## Varianta automată
Toată procedura de mai jos e implementată în două scripturi, de rulat **de pe
stația de admin** (nu de pe un nod):
stația de admin** (nu de pe un nod). Există în două variante echivalente —
folosește-o pe cea potrivită shell-ului tău.
```bash
cd proxmox/cluster/scripts
**PowerShell (Windows, varianta obișnuită aici):**
./cluster-shutdown.sh --dry-run # arată exact ce ar face, nu atinge nimic
./cluster-shutdown.sh # oprire completă, cu confirmări
```powershell
cd E:\proiecte\ROMFASTSQL\proxmox\cluster\scripts
.\cluster-shutdown.ps1 -DryRun # arată exact ce ar face, nu atinge nimic
.\cluster-shutdown.ps1 # oprire completă, cu confirmări
# ... după revenirea curentului, cu nodurile pornite fizic ...
./cluster-startup.sh # repornire completă
.\cluster-startup.ps1 # repornire completă
```
Cere doar clientul OpenSSH din Windows (`C:\Windows\System32\OpenSSH\ssh.exe`),
deja prezent, și cheia SSH pentru root pe noduri. Testate pe PowerShell 5.1.
Dacă politica de execuție blochează scriptul:
`powershell -ExecutionPolicy Bypass -File .\cluster-shutdown.ps1 -DryRun`
**Bash (Git Bash, WSL sau de pe CT 171 claude-agent):**
```bash
cd proxmox/cluster/scripts
./cluster-shutdown.sh --dry-run
./cluster-shutdown.sh
./cluster-startup.sh
```
Cele două variante scriu același fișier de stare, deci poți opri cu una și porni
cu cealaltă.
`cluster-shutdown.sh` salvează local ce guest-uri rulau, iar `cluster-startup.sh`
pornește **exact** ce era pornit — nu repornește VM-uri oprite intenționat.