diff --git a/script/qemu/README.base.md b/script/qemu/README.base.md index 362c346..6353137 100644 --- a/script/qemu/README.base.md +++ b/script/qemu/README.base.md @@ -205,7 +205,10 @@ parameters and builds the command for you. - `--image-dir` — image cache directory (default `/var/lib/libvirt/images/iso`). - `--download-only` — download the image then exit (no VM). - `--name` — VM name (required for deployment). -- `--memory`, `--vcpus`, `--disk-size` — VM sizing. +- `--memory`, `--vcpus`, `--disk-size` — VM sizing. When omitted, `--memory` + and `--disk-size` default to the **minimum required by the chosen Ubuntu + version** (libosinfo values: 20.04 → 2048 MB/5G, 22.04 → 2048 MB/10G, + 24.04+ → 3072 MB/20G); `--vcpus` defaults to 2. - `--ssh-key`, `--ask-password`, `--password-hash` — authentication. - `-y` / `--assume-yes` — auto-accept dependency installation. - `--no-install-deps` — never auto-install dependencies. @@ -233,7 +236,10 @@ vous. `/var/lib/libvirt/images/iso`). - `--download-only` — télécharge l'image puis quitte (sans VM). - `--name` — nom de la VM (requis pour le déploiement). -- `--memory`, `--vcpus`, `--disk-size` — dimensionnement de la VM. +- `--memory`, `--vcpus`, `--disk-size` — dimensionnement de la VM. Omis, + `--memory` et `--disk-size` prennent le **minimum requis par la version + Ubuntu** choisie (valeurs libosinfo : 20.04 → 2048 Mo/5G, 22.04 → + 2048 Mo/10G, 24.04+ → 3072 Mo/20G) ; `--vcpus` vaut 2 par défaut. - `--ssh-key`, `--ask-password`, `--password-hash` — authentification. - `-y` / `--assume-yes` — accepte automatiquement l'installation des dépendances. diff --git a/script/qemu/README.fr.md b/script/qemu/README.fr.md index c3788e9..dc6fd0d 100644 --- a/script/qemu/README.fr.md +++ b/script/qemu/README.fr.md @@ -120,7 +120,10 @@ vous. `/var/lib/libvirt/images/iso`). - `--download-only` — télécharge l'image puis quitte (sans VM). - `--name` — nom de la VM (requis pour le déploiement). -- `--memory`, `--vcpus`, `--disk-size` — dimensionnement de la VM. +- `--memory`, `--vcpus`, `--disk-size` — dimensionnement de la VM. Omis, + `--memory` et `--disk-size` prennent le **minimum requis par la version + Ubuntu** choisie (valeurs libosinfo : 20.04 → 2048 Mo/5G, 22.04 → + 2048 Mo/10G, 24.04+ → 3072 Mo/20G) ; `--vcpus` vaut 2 par défaut. - `--ssh-key`, `--ask-password`, `--password-hash` — authentification. - `-y` / `--assume-yes` — accepte automatiquement l'installation des dépendances. diff --git a/script/qemu/README.md b/script/qemu/README.md index 206ad44..feb2ef7 100644 --- a/script/qemu/README.md +++ b/script/qemu/README.md @@ -112,7 +112,10 @@ parameters and builds the command for you. - `--image-dir` — image cache directory (default `/var/lib/libvirt/images/iso`). - `--download-only` — download the image then exit (no VM). - `--name` — VM name (required for deployment). -- `--memory`, `--vcpus`, `--disk-size` — VM sizing. +- `--memory`, `--vcpus`, `--disk-size` — VM sizing. When omitted, `--memory` + and `--disk-size` default to the **minimum required by the chosen Ubuntu + version** (libosinfo values: 20.04 → 2048 MB/5G, 22.04 → 2048 MB/10G, + 24.04+ → 3072 MB/20G); `--vcpus` defaults to 2. - `--ssh-key`, `--ask-password`, `--password-hash` — authentication. - `-y` / `--assume-yes` — auto-accept dependency installation. - `--no-install-deps` — never auto-install dependencies. diff --git a/script/qemu/deploy_qemu.py b/script/qemu/deploy_qemu.py index a41f5eb..d4d167c 100755 --- a/script/qemu/deploy_qemu.py +++ b/script/qemu/deploy_qemu.py @@ -49,18 +49,22 @@ import urllib.request from pathlib import Path # --------------------------------------------------------------------------- # -# Table des versions Ubuntu -> (nom de code, valeur --osinfo/libosinfo) -# Le nom de code sert à construire l'URL de l'image cloud. Les valeurs LTS sont -# stables ; --codename et --osinfo permettent de surcharger si la table vieillit. +# Table des versions Ubuntu -> (nom de code, --osinfo, RAM min. Mo, disque min.) +# Le nom de code sert à construire l'URL de l'image cloud. La RAM et le disque +# minimaux proviennent de libosinfo (osinfo-db) : ce sont les seuils sous +# lesquels virt-install émet un avertissement. Ils servent de valeurs PAR +# DÉFAUT — une VM Ubuntu démarre avec ça sans gaspiller la RAM de l'hôte. Les +# valeurs LTS sont stables ; --codename et --osinfo surchargent si la table +# vieillit ; --memory / --disk-size surchargent le dimensionnement. # --------------------------------------------------------------------------- # -UBUNTU_VERSIONS: dict[str, tuple[str, str]] = { - "20.04": ("focal", "ubuntu20.04"), - "22.04": ("jammy", "ubuntu22.04"), - "24.04": ("noble", "ubuntu24.04"), - "24.10": ("oracular", "ubuntu24.10"), - "25.04": ("plucky", "ubuntu25.04"), - "25.10": ("questing", "ubuntu25.10"), - # "26.04": ("resolute", "ubuntu26.04"), +UBUNTU_VERSIONS: dict[str, tuple[str, str, int, str]] = { + "20.04": ("focal", "ubuntu20.04", 2048, "5G"), + "22.04": ("jammy", "ubuntu22.04", 2048, "10G"), + "24.04": ("noble", "ubuntu24.04", 3072, "20G"), + "24.10": ("oracular", "ubuntu24.10", 3072, "20G"), + "25.04": ("plucky", "ubuntu25.04", 3072, "20G"), + "25.10": ("questing", "ubuntu25.10", 3072, "20G"), + # "26.04": ("resolute", "ubuntu26.04", 3072, "20G"), } CLOUD_IMG_BASE = "https://cloud-images.ubuntu.com" @@ -682,8 +686,9 @@ def ssh_command(user: str, ip: str, has_key: bool) -> str: # --------------------------------------------------------------------------- # def build_parser() -> argparse.ArgumentParser: versions_help = "\n".join( - f" {v:<7} {code:<10} {image_url(code, 'amd64')}" - for v, (code, _osinfo) in UBUNTU_VERSIONS.items() + f" {v:<7} {code:<10} RAM≥{ram:<5}Mo disque≥{disk:<4} " + f"{image_url(code, 'amd64')}" + for v, (code, _osinfo, ram, disk) in UBUNTU_VERSIONS.items() ) p = argparse.ArgumentParser( formatter_class=argparse.RawDescriptionHelpFormatter, @@ -739,15 +744,20 @@ def build_parser() -> argparse.ArgumentParser: "--hostname", help="Nom d'hôte interne (défaut : --name)." ) g_vm.add_argument( - "--memory", type=int, default=8192, help="RAM en Mo (défaut : 8192)." + "--memory", + type=int, + default=None, + help="RAM en Mo (défaut : minimum requis par la version Ubuntu, " + "voir la liste ci-dessous).", ) g_vm.add_argument( - "--vcpus", type=int, default=4, help="Nombre de vCPU (défaut : 4)." + "--vcpus", type=int, default=2, help="Nombre de vCPU (défaut : 2)." ) g_vm.add_argument( "--disk-size", - default="20G", - help="Taille du disque virtuel, ex. 120G (défaut : 20G).", + default=None, + help="Taille du disque virtuel, ex. 120G (défaut : minimum requis " + "par la version Ubuntu, voir la liste ci-dessous).", ) g_vm.add_argument( "--disk-dir", @@ -907,10 +917,15 @@ def load_ssh_keys(paths: list[str]) -> list[str]: def main() -> None: args = build_parser().parse_args() - codename, default_osinfo = UBUNTU_VERSIONS[args.version] + codename, default_osinfo, min_ram, min_disk = UBUNTU_VERSIONS[args.version] if args.codename: codename = args.codename osinfo = args.osinfo or default_osinfo + # Dimensionnement par défaut = minimum requis par la version (libosinfo). + if args.memory is None: + args.memory = min_ram + if args.disk_size is None: + args.disk_size = min_disk url = image_url(codename, args.arch) # Chemin de l'image : déduit automatiquement si non fourni. diff --git a/script/todo/todo.py b/script/todo/todo.py index e467485..e01df23 100755 --- a/script/todo/todo.py +++ b/script/todo/todo.py @@ -812,9 +812,11 @@ class TODO: print(t("VM name is required!")) return version = self._qemu_prompt_version() - memory = input(t("RAM in MB (default: 8192): ")).strip() or "8192" - vcpus = input(t("vCPUs (default: 4): ")).strip() or "4" - disk_size = input(t("Disk size (default: 20G): ")).strip() or "20G" + # Laisser vide => le script applique le minimum requis par la version + # Ubuntu choisie (libosinfo). On n'envoie alors pas le flag. + memory = input(t("RAM in MB (blank = version minimum): ")).strip() + vcpus = input(t("vCPUs (default: 2): ")).strip() + disk_size = input(t("Disk size (blank = version minimum): ")).strip() default_key = self._qemu_default_ssh_key() key_hint = default_key or t("none") @@ -849,14 +851,12 @@ class TODO: parts.append("sudo") parts.append(script_path) parts += ["--name", name, "--version", version] - parts += [ - "--memory", - memory, - "--vcpus", - vcpus, - "--disk-size", - disk_size, - ] + if memory: + parts += ["--memory", memory] + if vcpus: + parts += ["--vcpus", vcpus] + if disk_size: + parts += ["--disk-size", disk_size] if ssh_key: parts += ["--ssh-key", ssh_key] if use_password: diff --git a/script/todo/todo_i18n.py b/script/todo/todo_i18n.py index 8f44ea9..0391fcb 100644 --- a/script/todo/todo_i18n.py +++ b/script/todo/todo_i18n.py @@ -1041,17 +1041,17 @@ TRANSLATIONS = { "fr": "Nom de la VM : ", "en": "VM name: ", }, - "RAM in MB (default: 8192): ": { - "fr": "RAM en Mo (défaut : 8192) : ", - "en": "RAM in MB (default: 8192): ", + "RAM in MB (blank = version minimum): ": { + "fr": "RAM en Mo (vide = minimum de la version) : ", + "en": "RAM in MB (blank = version minimum): ", }, - "vCPUs (default: 4): ": { - "fr": "vCPU (défaut : 4) : ", - "en": "vCPUs (default: 4): ", + "vCPUs (default: 2): ": { + "fr": "vCPU (défaut : 2) : ", + "en": "vCPUs (default: 2): ", }, - "Disk size (default: 20G): ": { - "fr": "Taille du disque (défaut : 20G) : ", - "en": "Disk size (default: 20G): ", + "Disk size (blank = version minimum): ": { + "fr": "Taille du disque (vide = minimum de la version) : ", + "en": "Disk size (blank = version minimum): ", }, "SSH public key path": { "fr": "Chemin de la clé publique SSH",