From 3a3a80e0ac8c3b1fbce37e88c66637829e5e06ed Mon Sep 17 00:00:00 2001 From: Daniel Allaire Date: Tue, 30 Jun 2026 15:36:08 -0400 Subject: [PATCH] =?UTF-8?q?Appliquer=20chezlepro=5Ftimezone=20(r=C3=B4le?= =?UTF-8?q?=20chrony)=20+=20nettoyer=20le=20CSS=20mort=20du=20GUI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit L'intrant de base global chezlepro_timezone était défini mais jamais appliqué : le rôle chrony règle désormais le fuseau horaire (chrony_timezone, vide = ne pas toucher). Nettoyage du CSS/HTML devenu mort après la refonte maître-détail (.message, .chip-f, .onglet*, .base-ligne, .ch-grp*, etc.). Co-Authored-By: Claude Opus 4.8 --- CHANGELOG.md | 12 ++++++++++++ roles/chrony/defaults/main.yml | 5 +++++ roles/chrony/tasks/main.yml | 5 +++++ scripts/inventory_gui.py | 28 ---------------------------- 4 files changed, 22 insertions(+), 28 deletions(-) create mode 100644 roles/chrony/defaults/main.yml diff --git a/CHANGELOG.md b/CHANGELOG.md index 612b8aa..9f0ee79 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,19 @@ ## 2026-06-30 +### Corrigé +- **`chezlepro_timezone` n'était appliqué nulle part.** Cet intrant de base global + était défini mais aucun rôle ne s'en servait. Le rôle `chrony` (appliqué à tout + hôte via `serveur_debian`) règle désormais le fuseau horaire à partir de + `chezlepro_timezone` (`chrony_timezone` par défaut, vide = ne pas toucher). Les + autres défauts globaux (nœud / stockage / pont Proxmox) étaient déjà réutilisés + comme valeurs par défaut, surchargeables par hôte. + ### Modifié +- **Nettoyage CSS/HTML du GUI** après la refonte : retrait des règles et éléments + morts (`.message`, `.chips-filtre`/`.chip-f`, `.onglet*`, `.base-ligne`, + `.bases-liste`, `.ch-grp*`/`.ch-fleche`/`.ch-roles`, `.champ-val`, divs `#message` + et `#chips`). - **GUI refondu en atelier maître-détail unifié.** Toutes les vues suivent le même motif : tuiles à gauche, **détail + saisie à droite**, le panneau droit reflétant la sélection de la vue courante (fin du panneau « figé » au changement de vue). diff --git a/roles/chrony/defaults/main.yml b/roles/chrony/defaults/main.yml new file mode 100644 index 0000000..d893d97 --- /dev/null +++ b/roles/chrony/defaults/main.yml @@ -0,0 +1,5 @@ +--- +# Fuseau horaire de l'hôte. Réutilise l'intrant de base global chezlepro_timezone +# (source unique : inventories//group_vars/all/, panneau « Intrants » du GUI). +# Laisser vide pour ne pas toucher au fuseau de la VM. +chrony_timezone: "{{ chezlepro_timezone | default('') }}" diff --git a/roles/chrony/tasks/main.yml b/roles/chrony/tasks/main.yml index b4ec91b..c1516a1 100644 --- a/roles/chrony/tasks/main.yml +++ b/roles/chrony/tasks/main.yml @@ -1,4 +1,9 @@ --- +- name: Définir le fuseau horaire (intrant global chezlepro_timezone) + community.general.timezone: + name: "{{ chrony_timezone }}" + when: chrony_timezone | length > 0 + - name: Installer chrony ansible.builtin.apt: name: chrony diff --git a/scripts/inventory_gui.py b/scripts/inventory_gui.py index a512754..c47ab2d 100644 --- a/scripts/inventory_gui.py +++ b/scripts/inventory_gui.py @@ -577,8 +577,6 @@ HTML = r""" input:focus, select:focus { outline: none; border-color: var(--teal); box-shadow: 0 0 0 3px color-mix(in srgb, var(--teal) 22%, transparent); } main { padding: 16px 22px 44px; display: grid; grid-template-columns: minmax(0, 1.6fr) minmax(420px, 1fr); gap: 20px; align-items: start; max-width: 1760px; margin: 0 auto; } - .message { min-height: 18px; font-size: 13px; font-weight: 650; color: var(--bleu); margin: 0 2px 12px; } - .message.erreur { color: var(--rouge); } .message.ok { color: var(--vert); } .toasts { position: fixed; top: 14px; right: 14px; z-index: 60; display: flex; flex-direction: column; gap: 8px; max-width: min(380px, 92vw); pointer-events: none; } .toast { pointer-events: auto; background: var(--surface-2); border: 1px solid var(--ligne-forte); border-left: 3px solid var(--bleu); border-radius: var(--rayon-sm); box-shadow: var(--ombre-forte); padding: 9px 12px; font-size: 13px; font-weight: 600; color: var(--texte); display: flex; gap: 9px; align-items: flex-start; animation: toast-in .18s ease-out; } .toast.ok { border-left-color: var(--vert); } .toast.erreur { border-left-color: var(--rouge); } @@ -588,15 +586,6 @@ HTML = r""" @keyframes toast-in { from { opacity: 0; transform: translateX(12px); } } input.invalide, select.invalide { border-color: var(--rouge) !important; box-shadow: 0 0 0 1px var(--rouge); } - .chips-filtre { display: flex; gap: 7px; flex-wrap: wrap; margin-bottom: 16px; } - .chip-f { padding: 6px 13px; border-radius: 999px; border: 1px solid var(--ligne-forte); background: var(--surface-2); color: var(--muted); font-weight: 700; font-size: 12.5px; cursor: pointer; display: inline-flex; align-items: center; gap: 7px; transition: all .14s; } - .chip-f:hover { border-color: var(--ligne-forte); color: var(--texte); } - .chip-f .n { font-size: 11px; opacity: .8; } - .chip-f.on { color: #07101f; border-color: transparent; } - .chip-f.on.tous { background: var(--teal); } - .chip-f.on.actif { background: var(--vert); } - .chip-f.on.planifie { background: var(--bleu); } - .chip-f.on.bloque { background: var(--rouge); } .section-grille { margin-bottom: 22px; } .section-tete { display: flex; align-items: center; gap: 10px; margin: 0 0 11px; color: var(--faint); font-size: 11px; font-weight: 800; letter-spacing: .09em; text-transform: uppercase; } @@ -638,11 +627,6 @@ HTML = r""" .stat .v { font-size: 18px; font-weight: 800; line-height: 1.1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .stat .v.vide { color: var(--faint); } .stat .l { font-size: 9.5px; text-transform: uppercase; letter-spacing: .06em; color: var(--faint); font-weight: 800; margin-top: 3px; } - .onglets { display: flex; gap: 2px; padding: 0 12px; border-bottom: 1px solid var(--ligne); } - .onglet { padding: 9px 12px; background: transparent; border: none; border-bottom: 2px solid transparent; color: var(--muted); font-weight: 750; font-size: 13px; cursor: pointer; border-radius: 0; } - .onglet:hover { color: var(--texte); border-color: transparent; } - .onglet.actif { color: var(--texte); border-bottom-color: var(--teal); } - .onglet-corps { padding: 14px 16px; } .grille { display: grid; grid-template-columns: repeat(auto-fit, minmax(135px, 1fr)); gap: 11px 12px; } .champ { display: flex; flex-direction: column; gap: 4px; min-width: 0; } .champ > span { color: var(--muted); font-size: 11px; font-weight: 700; } @@ -656,8 +640,6 @@ HTML = r""" .aide-corps p { margin: 6px 0; } .aide-corps ul { margin: 6px 0; padding-left: 18px; } .aide-corps li { margin: 3px 0; } .aide-corps b { color: var(--texte); } .aide-ro { border-top: 1px solid var(--ligne); padding-top: 8px; } - .champ .champ-val { font-size: 13px; font-weight: 600; color: var(--texte); padding: 5px 2px; min-height: 18px; overflow-wrap: anywhere; } - .champ .champ-val.vide { color: var(--faint); } .detail-nom-txt { font-weight: 800; font-size: 17px; padding: 4px 7px; display: inline-block; overflow-wrap: anywhere; } #infobulle { position: fixed; z-index: 200; max-width: 260px; pointer-events: none; @@ -699,16 +681,8 @@ HTML = r""" .vue-bascule button { border: none; background: transparent; border-radius: 999px; padding: 6px 13px; font-size: 12.5px; font-weight: 750; color: var(--muted); box-shadow: none; } .vue-bascule button:hover { color: var(--texte); background: transparent; } .vue-bascule button.on { background: var(--surface); color: var(--teal); box-shadow: var(--ombre); } - .ch-grp { border-left: 2px solid var(--ligne-forte); padding: 3px 0 3px 12px; } - .ch-grp-tete { display: flex; align-items: center; gap: 7px; font-weight: 700; font-size: 13px; flex-wrap: wrap; } - .ch-fleche { color: var(--faint); } .mono { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; color: var(--teal); font-size: 12px; } - .ch-roles { display: flex; flex-wrap: wrap; gap: 5px; margin-top: 6px; } .ch-stub { color: var(--ambre); font-size: 11.5px; font-style: italic; margin-top: 5px; } - .bases-liste { display: grid; gap: 10px; } - .base-ligne { display: grid; grid-template-columns: repeat(auto-fit, minmax(120px, 1fr)) auto; gap: 9px 11px; align-items: end; background: var(--surface); border: 1px solid var(--ligne); border-radius: var(--rayon-sm); padding: 11px 12px; box-shadow: var(--ombre); } - .base-ligne .danger { align-self: end; } - .base-ligne .dsn { grid-column: 1 / -1; color: var(--muted); font-size: 11.5px; padding-top: 2px; overflow-wrap: anywhere; } .ch-bases { display: grid; gap: 4px; margin: 6px 0 0 23px; } .ch-base { font-size: 11.5px; color: var(--muted); overflow-wrap: anywhere; } .badge-bd { display: inline-block; font-size: 10px; font-weight: 800; padding: 1px 6px; border-radius: 999px; background: color-mix(in srgb, var(--bleu) 18%, transparent); color: var(--bleu); } @@ -773,8 +747,6 @@ HTML = r"""
-
-
Dépendances causales