[IMP] script todo: infra deploy — option granulaire + choix d'architecture
Menu « Déployer l'infra ERPLibre » : - Nouveau choix [granulaire] dans la sélection des distributions : affiche la liste À PLAT de TOUTES les versions du catalogue (distro + version, défauts marqués d'un *) et permet d'en choisir plusieurs par leurs numéros séparés par des virgules (ex. « 1,3,12 »). Complète [all] et [principal]. - Demande l'ARCHITECTURE du parc en début de flux, par défaut l'architecture NATIVE de l'hôte (amd64/arm64/s390x via uname -m). s390x est proposé mais émulé (lent) et n'a d'images cloud que pour Ubuntu -> le catalogue est alors restreint à Ubuntu (les autres distros sont ignorées avec un avertissement). --arch est transmis à deploy_qemu.py quand ≠ amd64. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
374373cc7c
commit
3bf8fc2972
2 changed files with 141 additions and 4 deletions
|
|
@ -880,6 +880,56 @@ class TODO:
|
||||||
return "s390x"
|
return "s390x"
|
||||||
return "amd64"
|
return "amd64"
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _native_arch():
|
||||||
|
"""Architecture native de l'hôte, en jeton de deploy_qemu.py
|
||||||
|
(amd64/arm64/s390x). Défaut amd64 si indéterminée."""
|
||||||
|
try:
|
||||||
|
machine = os.uname().machine
|
||||||
|
except (AttributeError, OSError):
|
||||||
|
machine = ""
|
||||||
|
return {
|
||||||
|
"x86_64": "amd64",
|
||||||
|
"amd64": "amd64",
|
||||||
|
"aarch64": "arm64",
|
||||||
|
"arm64": "arm64",
|
||||||
|
"s390x": "s390x",
|
||||||
|
}.get(machine, "amd64")
|
||||||
|
|
||||||
|
def _qemu_prompt_infra_arch(self):
|
||||||
|
"""Demande l'architecture du parc (défaut : native de l'hôte). s390x
|
||||||
|
est proposé mais ÉMULÉ (lent) et limité à Ubuntu (seule distro avec
|
||||||
|
des images cloud s390x)."""
|
||||||
|
native = self._native_arch()
|
||||||
|
opts = [native]
|
||||||
|
if native != "s390x":
|
||||||
|
opts.append("s390x") # émulé, disponible en plus du natif
|
||||||
|
print(f"\n{t('Architecture:')}")
|
||||||
|
for i, a in enumerate(opts, 1):
|
||||||
|
tag = f" ({t('native')}) *" if a == native else ""
|
||||||
|
extra = ""
|
||||||
|
if a == "s390x":
|
||||||
|
extra = f" ({t('IBM Z — emulated, slow on x86; Ubuntu only')})"
|
||||||
|
print(f" [{i}] {a}{tag}{extra}")
|
||||||
|
sel = (
|
||||||
|
input(f"{t('Choice (number or name, blank = native):')} ")
|
||||||
|
.strip()
|
||||||
|
.lower()
|
||||||
|
)
|
||||||
|
if not sel:
|
||||||
|
return native
|
||||||
|
for i, a in enumerate(opts, 1):
|
||||||
|
if sel == str(i) or sel == a:
|
||||||
|
if a == "s390x":
|
||||||
|
warn = t(
|
||||||
|
"s390x is emulated (TCG): boot and install are much "
|
||||||
|
"slower than x86."
|
||||||
|
)
|
||||||
|
print(f"⚠ {warn}")
|
||||||
|
return a
|
||||||
|
print(f"{t('Invalid selection, using')} {native}")
|
||||||
|
return native
|
||||||
|
|
||||||
def _qemu_list_images(self):
|
def _qemu_list_images(self):
|
||||||
"""Affiche la liste des distros/versions et leurs specs."""
|
"""Affiche la liste des distros/versions et leurs specs."""
|
||||||
cmd = f"{self._qemu_script_path()} --list-images"
|
cmd = f"{self._qemu_script_path()} --list-images"
|
||||||
|
|
@ -1863,8 +1913,26 @@ class TODO:
|
||||||
return
|
return
|
||||||
distros = list(mod.DISTROS)
|
distros = list(mod.DISTROS)
|
||||||
|
|
||||||
# 1) Distributions : multi-sélection, catalogue complet, ou principal
|
# 0) Architecture du parc (défaut : native de l'hôte). s390x n'a des
|
||||||
# (la version par défaut de chaque distro, marquée d'un *).
|
# images cloud que pour Ubuntu -> on restreint le catalogue.
|
||||||
|
arch = self._qemu_prompt_infra_arch()
|
||||||
|
if arch == "s390x":
|
||||||
|
keep = [d for d in distros if d in self._QEMU_S390X_DISTROS]
|
||||||
|
dropped = [d for d in distros if d not in keep]
|
||||||
|
if dropped:
|
||||||
|
print(
|
||||||
|
f" ⚠ {t('s390x images only exist for:')} "
|
||||||
|
f"{', '.join(self._QEMU_S390X_DISTROS)} "
|
||||||
|
f"({t('ignored:')} {', '.join(dropped)})"
|
||||||
|
)
|
||||||
|
distros = keep
|
||||||
|
if not distros:
|
||||||
|
print(t("Nothing selected."))
|
||||||
|
return
|
||||||
|
|
||||||
|
# 1) Distributions : multi-sélection, catalogue complet, principal (la
|
||||||
|
# version par défaut de chaque distro, marquée d'un *), ou granulaire
|
||||||
|
# (liste à plat de TOUTES les versions, choix par virgules).
|
||||||
print(f"\n{t('Distributions:')}")
|
print(f"\n{t('Distributions:')}")
|
||||||
for i, d in enumerate(distros, 1):
|
for i, d in enumerate(distros, 1):
|
||||||
default_v = mod.DISTROS[d][1]
|
default_v = mod.DISTROS[d][1]
|
||||||
|
|
@ -1876,18 +1944,46 @@ class TODO:
|
||||||
print(
|
print(
|
||||||
f" [principal] {t('The main version of each distro (marked *)')}"
|
f" [principal] {t('The main version of each distro (marked *)')}"
|
||||||
)
|
)
|
||||||
|
print(
|
||||||
|
f" [granulaire] {t('Pick exact versions (comma-separated list)')}"
|
||||||
|
)
|
||||||
raw = (
|
raw = (
|
||||||
input(
|
input(
|
||||||
t("Selection (numbers, 'all' or 'principal', default: all): ")
|
t(
|
||||||
|
"Selection (numbers, 'all', 'principal' or 'granulaire',"
|
||||||
|
" default: all): "
|
||||||
|
)
|
||||||
)
|
)
|
||||||
.strip()
|
.strip()
|
||||||
.lower()
|
.lower()
|
||||||
)
|
)
|
||||||
catalog_all = raw in ("", "all", "*")
|
catalog_all = raw in ("", "all", "*")
|
||||||
principal = raw in ("principal", "each", "p")
|
principal = raw in ("principal", "each", "p")
|
||||||
|
granular = raw in ("granulaire", "granular", "g")
|
||||||
|
|
||||||
selected = [] # (distro, version, ram_mb, disk_str)
|
selected = [] # (distro, version, ram_mb, disk_str)
|
||||||
if principal:
|
if granular:
|
||||||
|
# Liste APLATIE de toutes les versions (distro + version) : on choisit
|
||||||
|
# des versions précises par leurs numéros, séparés par des virgules.
|
||||||
|
flat = [] # (distro, version, ram, disk, is_default)
|
||||||
|
for d in distros:
|
||||||
|
versions_map, default_v = mod.DISTROS[d]
|
||||||
|
for v, (_c, _o, ram, disk) in versions_map.items():
|
||||||
|
flat.append((d, v, ram, disk, v == default_v))
|
||||||
|
print(f"\n{t('All versions:')}")
|
||||||
|
for i, (d, v, ram, disk, isdef) in enumerate(flat, 1):
|
||||||
|
star = " *" if isdef else ""
|
||||||
|
print(f" [{i}] {d} {v}{star} (RAM≥{ram}Mo, {disk})")
|
||||||
|
r = (
|
||||||
|
input(t("Selection (comma-separated numbers): "))
|
||||||
|
.strip()
|
||||||
|
.lower()
|
||||||
|
)
|
||||||
|
for d, v, ram, disk, _isdef in self._parse_index_selection(
|
||||||
|
r, flat
|
||||||
|
):
|
||||||
|
selected.append((d, v, ram, disk))
|
||||||
|
elif principal:
|
||||||
# Une VM par distro : sa version par défaut.
|
# Une VM par distro : sa version par défaut.
|
||||||
for d in distros:
|
for d in distros:
|
||||||
versions_map, default_v = mod.DISTROS[d]
|
versions_map, default_v = mod.DISTROS[d]
|
||||||
|
|
@ -2014,6 +2110,8 @@ class TODO:
|
||||||
"erplibre",
|
"erplibre",
|
||||||
"--no-wait-ip",
|
"--no-wait-ip",
|
||||||
]
|
]
|
||||||
|
if arch and arch != "amd64":
|
||||||
|
parts += ["--arch", arch]
|
||||||
if ssh_key:
|
if ssh_key:
|
||||||
parts += ["--ssh-key", ssh_key]
|
parts += ["--ssh-key", ssh_key]
|
||||||
if install_branch:
|
if install_branch:
|
||||||
|
|
|
||||||
|
|
@ -1166,6 +1166,45 @@ TRANSLATIONS = {
|
||||||
"fr": "Architecture :",
|
"fr": "Architecture :",
|
||||||
"en": "Architecture:",
|
"en": "Architecture:",
|
||||||
},
|
},
|
||||||
|
"native": {
|
||||||
|
"fr": "native",
|
||||||
|
"en": "native",
|
||||||
|
},
|
||||||
|
"IBM Z — emulated, slow on x86; Ubuntu only": {
|
||||||
|
"fr": "IBM Z — émulé, lent sur x86 ; Ubuntu uniquement",
|
||||||
|
"en": "IBM Z — emulated, slow on x86; Ubuntu only",
|
||||||
|
},
|
||||||
|
"Choice (number or name, blank = native):": {
|
||||||
|
"fr": "Choix (numéro ou nom, vide = native) :",
|
||||||
|
"en": "Choice (number or name, blank = native):",
|
||||||
|
},
|
||||||
|
"Pick exact versions (comma-separated list)": {
|
||||||
|
"fr": "Choisir des versions précises (liste séparée par des virgules)",
|
||||||
|
"en": "Pick exact versions (comma-separated list)",
|
||||||
|
},
|
||||||
|
"Selection (numbers, 'all', 'principal' or 'granulaire',"
|
||||||
|
" default: all): ": {
|
||||||
|
"fr": "Sélection (numéros, « all », « principal » ou « granulaire »,"
|
||||||
|
" défaut : all) : ",
|
||||||
|
"en": "Selection (numbers, 'all', 'principal' or 'granulaire',"
|
||||||
|
" default: all): ",
|
||||||
|
},
|
||||||
|
"All versions:": {
|
||||||
|
"fr": "Toutes les versions :",
|
||||||
|
"en": "All versions:",
|
||||||
|
},
|
||||||
|
"Selection (comma-separated numbers): ": {
|
||||||
|
"fr": "Sélection (numéros séparés par des virgules) : ",
|
||||||
|
"en": "Selection (comma-separated numbers): ",
|
||||||
|
},
|
||||||
|
"s390x images only exist for:": {
|
||||||
|
"fr": "images s390x disponibles seulement pour :",
|
||||||
|
"en": "s390x images only exist for:",
|
||||||
|
},
|
||||||
|
"ignored:": {
|
||||||
|
"fr": "ignoré :",
|
||||||
|
"en": "ignored:",
|
||||||
|
},
|
||||||
"IBM Z — emulated, slow on x86": {
|
"IBM Z — emulated, slow on x86": {
|
||||||
"fr": "IBM Z — émulé, lent sur x86",
|
"fr": "IBM Z — émulé, lent sur x86",
|
||||||
"en": "IBM Z — emulated, slow on x86",
|
"en": "IBM Z — emulated, slow on x86",
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue