Honor custom CLI defaults in guided VM creation

This commit is contained in:
Codex
2026-10-13 15:40:21 +03:00
parent 73bcf616ee
commit 1bc7965cca
3 changed files with 56 additions and 6 deletions
+1 -1
View File
@@ -100,7 +100,7 @@ def main(argv: list[str] | None = None) -> int:
if args.command in (None, 'menu'):
from .launch import session_manifest
from .menu import run_menu
return run_menu(runtime, manifest=session_manifest(runtime))
return run_menu(runtime, manifest=session_manifest(runtime), defaults=args.defaults)
if args.command == 'download':
from .media import download_iso
print(download_iso(args.url, sha256=args.sha256, progress=_download_progress()))
+10 -5
View File
@@ -96,7 +96,7 @@ def _source_prompt(label: str, supplied: str | None = None) -> str:
return value
def _guided_run(runtime: Runtime, manifest: Path | None, source: str | None):
def _guided_run(runtime: Runtime, manifest: Path | None, source: str | None, *, defaults: Path):
source = _source_prompt('ISO path or direct HTTP(S) URL (blank cancels)> ', source)
name = validate_name(_source_prompt('New VM name (blank cancels)> '))
# Reject duplicates before asking for options or downloading an image.
@@ -106,11 +106,14 @@ def _guided_run(runtime: Runtime, manifest: Path | None, source: str | None):
cpus = int(input('CPUs [2]> ').strip() or '2')
disk_size = input('Disk size [40G]> ').strip() or '40G'
sha256 = input('SHA-256 (optional)> ').strip() or None
_preview(['hydra', 'run', _redact_url(source), '--name', name, '--memory', str(memory),
prefix = ['hydra']
if defaults != Path('/etc/hydra/defaults.toml'):
prefix += ['--defaults', str(defaults)]
_preview(prefix + ['run', _redact_url(source), '--name', name, '--memory', str(memory),
'--cpus', str(cpus), '--disk-size', disk_size] + (['--sha256', sha256] if sha256 else []))
code = run_source(runtime, source, name=name, memory=memory, cpus=cpus,
disk_size=disk_size, sha256=sha256, manifest=manifest,
defaults=Path('/etc/hydra/defaults.toml'), progress=_progress())
defaults=defaults, progress=_progress())
return code, name
@@ -142,7 +145,8 @@ def _redact_url(source: str) -> str:
return source
def run_menu(runtime: Runtime, *, manifest: Path | None = None) -> int:
def run_menu(runtime: Runtime, *, manifest: Path | None = None,
defaults: Path = Path('/etc/hydra/defaults.toml')) -> int:
last = _last_selected(runtime)
while True:
profiles = _profiles(runtime)
@@ -205,7 +209,8 @@ def run_menu(runtime: Runtime, *, manifest: Path | None = None) -> int:
elif action in (':run', ':new'):
if len(arguments) > 1:
raise ValueError('Use :run followed by one quoted ISO path or URL, or follow the prompts.')
code, name = _guided_run(runtime, manifest, arguments[0] if arguments else None)
code, name = _guided_run(runtime, manifest, arguments[0] if arguments else None,
defaults=defaults)
if code == 0:
_remember(runtime, name)
last = name