From 4abb7d7bf038617e18fec871f4172e7d0dcc7720 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Thalheim?= Date: Tue, 3 Oct 2023 18:50:14 +0200 Subject: [PATCH] make vm test also work in ci --- pkgs/clan-cli/clan_cli/vms/create.py | 70 ++++++++++--------- .../tests/test_flake_with_core/flake.nix | 1 + pkgs/clan-cli/tests/test_vms_api.py | 4 +- 3 files changed, 39 insertions(+), 36 deletions(-) diff --git a/pkgs/clan-cli/clan_cli/vms/create.py b/pkgs/clan-cli/clan_cli/vms/create.py index dd4764f23..9b870adfd 100644 --- a/pkgs/clan-cli/clan_cli/vms/create.py +++ b/pkgs/clan-cli/clan_cli/vms/create.py @@ -1,5 +1,7 @@ import argparse +import asyncio import json +import shlex import tempfile from pathlib import Path from typing import Iterator @@ -8,7 +10,7 @@ from uuid import UUID from ..dirs import get_clan_flake_toplevel from ..nix import nix_build, nix_shell from ..task_manager import BaseTask, CmdState, create_task -from .inspect import VmConfig +from .inspect import VmConfig, inspect_vm class BuildVmTask(BaseTask): @@ -76,32 +78,38 @@ class BuildVmTask(BaseTask): ) cmd = next(cmds) - cmd.run( - nix_shell( - ["qemu"], - [ - # fmt: off - "qemu-kvm", - "-name", machine, - "-m", f'{vm_config["memorySize"]}M', - "-smp", str(vm_config["cores"]), - "-device", "virtio-rng-pci", - "-net", "nic,netdev=user.0,model=virtio", "-netdev", "user,id=user.0", - "-virtfs", "local,path=/nix/store,security_model=none,mount_tag=nix-store", - "-virtfs", f"local,path={xchg_dir},security_model=none,mount_tag=shared", - "-virtfs", f"local,path={xchg_dir},security_model=none,mount_tag=xchg", - "-drive", f'cache=writeback,file={disk_img},format=raw,id=drive1,if=none,index=1,werror=report', - "-device", "virtio-blk-pci,bootindex=1,drive=drive1,serial=root", - "-device", "virtio-keyboard", - "-usb", - "-device", "usb-tablet,bus=usb-bus.0", - "-kernel", f'{vm_config["toplevel"]}/kernel', - "-initrd", vm_config["initrd"], - "-append", f'{(Path(vm_config["toplevel"]) / "kernel-params").read_text()} init={vm_config["toplevel"]}/init regInfo={vm_config["regInfo"]}/registration console=ttyS0,115200n8 console=tty0', - # fmt: on - ], - ) - ) + cmdline = [ + (Path(vm_config["toplevel"]) / "kernel-params").read_text(), + f'init={vm_config["toplevel"]}/init', + f'regInfo={vm_config["regInfo"]}/registration', + "console=ttyS0,115200n8", + "console=tty0", + ] + qemu_command = [ + # fmt: off + "qemu-kvm", + "-name", machine, + "-m", f'{vm_config["memorySize"]}M', + "-smp", str(vm_config["cores"]), + "-device", "virtio-rng-pci", + "-net", "nic,netdev=user.0,model=virtio", "-netdev", "user,id=user.0", + "-virtfs", "local,path=/nix/store,security_model=none,mount_tag=nix-store", + "-virtfs", f"local,path={xchg_dir},security_model=none,mount_tag=shared", + "-virtfs", f"local,path={xchg_dir},security_model=none,mount_tag=xchg", + "-drive", f'cache=writeback,file={disk_img},format=raw,id=drive1,if=none,index=1,werror=report', + "-device", "virtio-blk-pci,bootindex=1,drive=drive1,serial=root", + "-device", "virtio-keyboard", + "-usb", + "-device", "usb-tablet,bus=usb-bus.0", + "-kernel", f'{vm_config["toplevel"]}/kernel', + "-initrd", vm_config["initrd"], + "-append", " ".join(cmdline), + # fmt: on + ] + if not self.vm.graphics: + qemu_command.append("-nographic") + print("$ " + shlex.join(qemu_command)) + cmd.run(nix_shell(["qemu"], qemu_command)) def create_vm(vm: VmConfig) -> BuildVmTask: @@ -110,13 +118,7 @@ def create_vm(vm: VmConfig) -> BuildVmTask: def create_command(args: argparse.Namespace) -> None: clan_dir = get_clan_flake_toplevel().as_posix() - vm = VmConfig( - flake_url=clan_dir, - flake_attr=args.machine, - cores=0, - graphics=False, - memory_size=0, - ) + vm = asyncio.run(inspect_vm(flake_url=clan_dir, flake_attr=args.machine)) task = create_vm(vm) for line in task.logs_iter(): diff --git a/pkgs/clan-cli/tests/test_flake_with_core/flake.nix b/pkgs/clan-cli/tests/test_flake_with_core/flake.nix index 913b097e2..0666fcb49 100644 --- a/pkgs/clan-cli/tests/test_flake_with_core/flake.nix +++ b/pkgs/clan-cli/tests/test_flake_with_core/flake.nix @@ -15,6 +15,7 @@ system.stateVersion = lib.version; sops.age.keyFile = "__CLAN_SOPS_KEY_PATH__"; clanCore.secretsUploadDirectory = "__CLAN_SOPS_KEY_DIR__"; + clan.virtualisation.graphics = false; clan.networking.zerotier.controller.enable = true; diff --git a/pkgs/clan-cli/tests/test_vms_api.py b/pkgs/clan-cli/tests/test_vms_api.py index 13cfe0200..7f09dedad 100644 --- a/pkgs/clan-cli/tests/test_vms_api.py +++ b/pkgs/clan-cli/tests/test_vms_api.py @@ -17,7 +17,7 @@ def test_inspect(api: TestClient, test_flake_with_core: Path) -> None: assert config.get("flake_attr") == "vm1" assert config.get("cores") == 1 assert config.get("memory_size") == 1024 - assert config.get("graphics") is True + assert config.get("graphics") is False def test_incorrect_uuid(api: TestClient) -> None: @@ -42,7 +42,7 @@ def test_create(api: TestClient, test_flake_with_core: Path) -> None: flake_attr="vm1", cores=1, memory_size=1024, - graphics=True, + graphics=False, ), ) assert response.status_code == 200, "Failed to create vm"