GUI : boutons cohérents (Créer la VM / Déployer), fin de « Pousser » ambigu
Audit des boutons : « Pousser » était surchargé — servait à cloner la VM (🖥 Pousser = creer-vm) ET à déployer (= make deployer, identique à « Déployer »). Corrigé : - 🖥 Pousser -> « 🖥 Créer la VM » (il clone) ; - tous les Pousser/Déployer -> « Déployer » (une action = un mot) ; - dry-run obligatoire AUSSI sur le déploiement des pieds (évite un déploiement à l'aveugle ; cohérent avec un seul « Déployer ») ; - titres/messages/console : Poussée -> Déploiement. Chaque bouton fait désormais ce qu'il dit. GUI déjà entièrement francisée. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
e006dee693
commit
a943fa6222
1 changed files with 8 additions and 8 deletions
|
|
@ -1129,7 +1129,7 @@ HTML = r"""<!doctype html>
|
|||
${(() => {
|
||||
const hS = hotes.find(h => h.nom === s.hote);
|
||||
if (hS && hS.etat === 'actif') { const hiS = hotes.indexOf(hS);
|
||||
return `<div class="pied"><span class="hint-dep">Pousser déploie l'hôte « ${echapper(s.hote)} ».</span><span class="grandit"></span>${estProduction ? '<span class="badge-prod">PROD</span>' : ''}<button type="button" class="${estProduction ? 'danger' : 'primaire'}" onclick="lancer('pousser', ${hiS})" title="Déployer l'hôte du serveur de BD">Pousser</button></div>`; }
|
||||
return `<div class="pied"><span class="hint-dep">Déployer applique les rôles sur l'hôte « ${echapper(s.hote)} ».</span><span class="grandit"></span>${estProduction ? '<span class="badge-prod">PROD</span>' : ''}<button type="button" class="${estProduction ? 'danger' : 'primaire'}" onclick="lancer('pousser', ${hiS})" title="Déployer l'hôte du serveur de BD">Déployer</button></div>`; }
|
||||
return `<div class="pied"><span class="hint-dep">${s.hote ? `Active + pousse d'abord l'hôte « ${echapper(s.hote)} ».` : 'Aucun hôte assigné.'}</span></div>`;
|
||||
})()}
|
||||
</article>`;
|
||||
|
|
@ -1157,7 +1157,7 @@ HTML = r"""<!doctype html>
|
|||
const srv = bdServeurs.find(x => x.nom === a.serveur);
|
||||
const hB = srv ? hotes.find(h => h.nom === srv.hote) : null;
|
||||
if (hB && hB.etat === 'actif') { const hiB = hotes.indexOf(hB);
|
||||
return `<div class="pied"><span class="hint-dep">Pousser déploie « ${echapper(srv.hote)} » (le serveur de BD qui héberge cette base).</span><span class="grandit"></span>${estProduction ? '<span class="badge-prod">PROD</span>' : ''}<button type="button" class="${estProduction ? 'danger' : 'primaire'}" onclick="lancer('pousser', ${hiB})" title="Déployer le serveur de BD (crée cette base)">Pousser</button></div>`; }
|
||||
return `<div class="pied"><span class="hint-dep">Déployer applique les rôles sur « ${echapper(srv.hote)} » (le serveur de BD qui héberge cette base).</span><span class="grandit"></span>${estProduction ? '<span class="badge-prod">PROD</span>' : ''}<button type="button" class="${estProduction ? 'danger' : 'primaire'}" onclick="lancer('pousser', ${hiB})" title="Déployer le serveur de BD (crée cette base)">Déployer</button></div>`; }
|
||||
return `<div class="pied"><span class="hint-dep">${(srv && srv.hote) ? `Active + pousse d'abord l'hôte « ${echapper(srv.hote)} ».` : 'Serveur de BD sans hôte assigné.'}</span></div>`;
|
||||
})()}
|
||||
</article>`;
|
||||
|
|
@ -1249,7 +1249,7 @@ HTML = r"""<!doctype html>
|
|||
const hA = hotes.find(x => x.nom === a.hote);
|
||||
if (hA && hA.etat === 'actif') {
|
||||
const hiA = hotes.indexOf(hA);
|
||||
return `<div class="pied"><span class="hint-dep">Pousser déploie l'hôte porteur « ${echapper(a.hote)} ».</span><span class="grandit"></span>${estProduction ? '<span class="badge-prod">PROD</span>' : ''}<button type="button" class="${estProduction ? 'danger' : 'primaire'}" onclick="lancer('pousser', ${hiA})" title="Déployer l'hôte porteur (rend l'application vivante)">Pousser</button></div>`;
|
||||
return `<div class="pied"><span class="hint-dep">Déployer applique les rôles sur l'hôte porteur « ${echapper(a.hote)} ».</span><span class="grandit"></span>${estProduction ? '<span class="badge-prod">PROD</span>' : ''}<button type="button" class="${estProduction ? 'danger' : 'primaire'}" onclick="lancer('pousser', ${hiA})" title="Déployer l'hôte porteur (rend l'application vivante)">Déployer</button></div>`;
|
||||
}
|
||||
return `<div class="pied"><span class="hint-dep">${a.hote ? `Active + pousse d'abord l'hôte « ${echapper(a.hote)} ».` : 'Aucun hôte assigné.'}</span></div>`;
|
||||
})()}
|
||||
|
|
@ -1373,7 +1373,7 @@ HTML = r"""<!doctype html>
|
|||
hoteOpCourant = s.nom;
|
||||
const hi = h ? hotes.indexOf(h) : -1;
|
||||
let boutons = '';
|
||||
if (h) boutons += `<button type="button" title="Cloner la VM depuis le golden template (Proxmox)" onclick="lancer('creer', ${hi})">🖥 Pousser</button>`;
|
||||
if (h) boutons += `<button type="button" title="Cloner la VM depuis le golden template (Proxmox)" onclick="lancer('creer', ${hi})">🖥 Créer la VM</button>`;
|
||||
if (h && h.etat === 'actif' && !hoteBloque(h)) {
|
||||
const clsDep = estProduction ? 'danger' : 'primaire';
|
||||
boutons += `<button type="button" id="btn-verifier" onclick="lancer('verifier', ${hi})">Vérifier</button>`
|
||||
|
|
@ -1685,7 +1685,7 @@ HTML = r"""<!doctype html>
|
|||
if (!hote) { message('Hôte introuvable.', 'erreur'); return; }
|
||||
if (occupe) return;
|
||||
let vault = '';
|
||||
if (mode === 'deployer' && !verifie[hote]) { message('Vérifiez (dry-run) d\'abord.', 'erreur'); return; }
|
||||
if ((mode === 'deployer' || mode === 'pousser') && !verifie[hote]) { message('Vérifiez (dry-run) d\'abord.', 'erreur'); return; }
|
||||
if (mode === 'creer' || mode === 'deployer' || mode === 'pousser' || mode === 'verifier') {
|
||||
if (estProduction && (mode === 'deployer' || mode === 'pousser')) {
|
||||
const saisi = prompt('⚠️ PRODUCTION — action réelle sur « ' + hote + ' ».\n'
|
||||
|
|
@ -1701,13 +1701,13 @@ HTML = r"""<!doctype html>
|
|||
: mode === 'verifier'
|
||||
? 'Dry-run (--check), AUCUNE modification. Mot de passe vault pour déchiffrer les secrets — laisse VIDE si cet hôte n\'a pas de secrets.'
|
||||
: av + 'Applique les playbooks de groupes sur la VM réelle, en root (sudo). Non transactionnel.';
|
||||
const titre = (mode === 'creer' ? 'Pousser — créer la VM ' : mode === 'pousser' ? 'Pousser — déployer ' : mode === 'verifier' ? 'Vérifier ' : 'Déployer ') + hote;
|
||||
const titre = (mode === 'creer' ? 'Créer la VM — ' : mode === 'pousser' ? 'Déployer — ' : mode === 'verifier' ? 'Vérifier — ' : 'Déployer — ') + hote;
|
||||
vault = await ouvrirModale(titre, txt);
|
||||
if (vault === null) return;
|
||||
motVault = vault;
|
||||
}
|
||||
occupe = true; majBoutonsDeploiement();
|
||||
const titreConsole = {verifier: 'Vérification (dry-run)', deployer: 'Déploiement', creer: 'Création VM (clone)', pousser: 'Poussée (déploiement)'}[mode] || mode;
|
||||
const titreConsole = {verifier: 'Vérification (dry-run)', deployer: 'Déploiement', creer: 'Création VM (clone)', pousser: 'Déploiement'}[mode] || mode;
|
||||
ouvrirConsole(titreConsole, hote);
|
||||
try {
|
||||
const rep = await fetch('/api/' + mode, {
|
||||
|
|
@ -1734,7 +1734,7 @@ HTML = r"""<!doctype html>
|
|||
finirConsole(rc);
|
||||
if (mode === 'verifier' && rc === 0) { verifie[hote] = true; message('Vérification réussie — déploiement débloqué pour ' + hote + '.', 'ok'); }
|
||||
else if (mode === 'creer') { message(rc === 0 ? 'VM « ' + hote + ' » créée — hôte marqué actif.' : 'Échec de la création.', rc === 0 ? 'ok' : 'erreur'); if (rc === 0) appliquerPlan(); else sonder(); }
|
||||
else if (mode === 'deployer' || mode === 'pousser') { verifie[hote] = false; message(rc === 0 ? 'Poussée terminée — hôte marqué actif.' : 'Poussée en échec.', rc === 0 ? 'ok' : 'erreur'); if (rc === 0) appliquerPlan(); else sonder(); }
|
||||
else if (mode === 'deployer' || mode === 'pousser') { verifie[hote] = false; message(rc === 0 ? 'Déploiement terminé — hôte marqué actif.' : 'Déploiement en échec.', rc === 0 ? 'ok' : 'erreur'); if (rc === 0) appliquerPlan(); else sonder(); }
|
||||
} catch (e) {
|
||||
ecrireConsole('Erreur client : ' + e.message + '\n'); finirConsole(1);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue