diff --git a/script/todo/qemu_deploy_form.py b/script/todo/qemu_deploy_form.py index 101aca3..b7ad1fe 100644 --- a/script/todo/qemu_deploy_form.py +++ b/script/todo/qemu_deploy_form.py @@ -149,15 +149,40 @@ def apply_overrides(vms, entries, overrides): return vms +def vm_name(base, desktop, suffixes): + """Nom de VM, suffixé du bureau quand il y en a un. + + Le nom sert de nom d'hôte ET de clé de collision : une VM graphique et sa + jumelle serveur doivent donc porter des noms différents, sinon la seconde + est signalée « existe déjà » et silencieusement ignorée. Idempotent, le + nom étant recalculé à chaque frappe.""" + suffix = (suffixes or {}).get(desktop or "") + if not suffix or base.endswith(f"-{suffix}"): + return base + return f"{base}-{suffix}" + + def build_vms( - entries, profile, base_vcpus, host_cpu, custom, overrides, desktop="" + entries, + profile, + base_vcpus, + host_cpu, + custom, + overrides, + desktop="", + suffixes=None, ): """Catalogue choisi + profil + surcharges -> liste de VM de la spec.""" - return apply_overrides( + vms = apply_overrides( apply_profile(entries, profile, base_vcpus, host_cpu, custom, desktop), entries, overrides, ) + # APRÈS les surcharges : c'est là seulement que le type de chaque VM est + # connu, puisqu'il se choisit machine par machine. + for vm in vms: + vm["name"] = vm_name(vm["name"], vm.get("desktop"), suffixes) + return vms def vm_status(name, domains): @@ -277,6 +302,9 @@ def run_deploy_form(ctx, run_app: bool = True): desktop_disk = ctx.get("desktop_disk_gb") or 0 # [(clé, libellé)] — la liste vient de todo.py, source unique. desktops = list(ctx.get("desktops") or []) + # {clé de saveur: suffixe de nom}, fourni par todo.py qui décrit les + # saveurs — on ne le redéfinit pas ici. + desktop_suffixes = dict(ctx.get("desktop_suffixes") or {}) # Architectures pour lesquelles mise publie un binaire. mise_arches = set(ctx.get("mise_arches") or ()) # [(clé, libellé)] des magasins d'applications, et les distributions qui @@ -647,6 +675,7 @@ def run_deploy_form(ctx, run_app: bool = True): self.custom, self.overrides, self._default_desktop(), + desktop_suffixes, ) # ERPLibre et GNOME pèsent chacun sur le disque, et se cumulent. grow = 0 diff --git a/script/todo/todo.py b/script/todo/todo.py index ad78f7e..db3253e 100755 --- a/script/todo/todo.py +++ b/script/todo/todo.py @@ -4338,6 +4338,11 @@ class TODO: "pacman": "gnome gdm", "zypper": "patterns-gnome-gnome_basic gdm", "service": "gdm", + # Suffixe ajouté au nom de VM, donc au nom d'hôte. Une VM + # graphique se reconnaît alors d'un « virsh list », et deux VM de + # même distribution mais de types différents ne se marchent plus + # dessus — le nom sert aussi de clé de collision. + "suffix": "gnome", }, "cinnamon": { "label": "Cinnamon (Linux Mint)", @@ -4350,6 +4355,10 @@ class TODO: "pacman": "cinnamon lightdm lightdm-gtk-greeter", "zypper": "cinnamon lightdm", "service": "lightdm", + # « mint » plutôt que « cinnamon » : c'est le nom retenu pour le + # parc. Le paquet installé reste bien Cinnamon, depuis les dépôts + # de la distribution et non ceux de Mint. + "suffix": "mint", }, } # Ubuntu remplace trois applications par des paquets de TRANSITION dont le @@ -5708,6 +5717,7 @@ class TODO: "mise_arches": self.QEMU_MISE_ARCHES, "app_stores": [(k, t(lbl)) for k, lbl in self.QEMU_APP_STORES], "snap_distros": self.QEMU_SNAP_DISTROS, + "desktop_suffixes": self._qemu_desktop_suffixes(), "desktops": [ (k, v["label"]) for k, v in self._QEMU_DESKTOP.items() ], @@ -6109,8 +6119,14 @@ class TODO: desktop = self._qemu_ask_desktop() # La CLI ne pose qu'un type pour tout le parc : on le recopie sur chaque # VM avant de décider du magasin, qui ne concerne que les graphiques. + # Le nom suit le type, exactement comme dans le formulaire — c'est la + # même fonction, pas une seconde implémentation. + from script.todo.qemu_deploy_form import vm_name + + suffixes = self._qemu_desktop_suffixes() for _vm in vms: _vm.setdefault("desktop", desktop) + _vm["name"] = vm_name(_vm["name"], _vm.get("desktop"), suffixes) app_store = self._qemu_ask_app_store(vms) python_provider = self._qemu_ask_python_provider( [vm["arch"] for vm in vms]