fix(chv): CHV 54 VmConfig 形态——payload.kernel/cmdline 纯字符串 + 磁盘显式 image_type Raw

真机 CHV 54.0.0 实测:旧顶层 kernel:{path}/cmdline:{args}
create 时 204 照放、vm.boot 400 'No bootitem provided';
补 payload 后又报 'Image type required for disk'(raw 盘
无魔数、探测失败),磁盘须显式 image_type,枚举原名
Raw(JSON 写小写 raw 报 unknown variant)。
This commit is contained in:
host committed 2026-11-06 17:59:53 +00:00
1 parent 5b6514d019
commit 4f3a176771
4 files changed
+38 -12

No files matched your search

+1 -1
View File
@@ -111,7 +111,7 @@ class Arch95Case(unittest.TestCase):
"第一盘必须是任务盘")
self.assertTrue(disks[1].endswith("seed.iso"),
"第二盘必须是 seed 盘,缺 seed 即假保证")
self.assertTrue(payload.get("kernel", {}).get("path"))
self.assertTrue(payload.get("payload", {}).get("kernel"))
nets = payload.get("net", [])
taps = [n.get("tap") for n in nets]
self.assertEqual(len(taps), len(set(taps)), "net tap 重复")
+3
View File
@@ -158,6 +158,9 @@ class SeedDiskTest(ChvFixCase):
self.assertEqual(len(cfg["disks"]), 2)
self.assertEqual(cfg["disks"][1]["path"], seed)
self.assertTrue(cfg["disks"][1]["readonly"])
# CHV 54 要求磁盘显式 image_type(缺了 vm.boot 400)。
self.assertEqual(cfg["disks"][0]["image_type"], "Raw")
self.assertEqual(cfg["disks"][1]["image_type"], "Raw")
cfg2 = ex.build_vm_config(disk)
self.assertEqual(len(cfg2["disks"]), 1)
+8 -4
View File
@@ -243,9 +243,10 @@ class ConfigCommandTest(ChvCase):
self.assertEqual(cfg["cpus"], {"boot_vcpus": 2,
"max_vcpus": 2})
self.assertEqual(cfg["memory"]["size"], 2 * 1024 ** 3)
self.assertEqual(cfg["kernel"]["path"], self.kernel)
self.assertEqual(cfg["disks"], [{"path": disk}])
self.assertEqual(cfg["cmdline"]["args"],
self.assertEqual(cfg["payload"]["kernel"], self.kernel)
self.assertEqual(cfg["disks"],
[{"path": disk, "image_type": "Raw"}])
self.assertEqual(cfg["payload"]["cmdline"],
"console=hvc0 root=/dev/vda1 rw")
def test_memory_parsing(self):
@@ -346,7 +347,10 @@ class WakeApiTest(ChvCase):
self.assertEqual(kinds[1], ("PUT", "/vm.create"))
self.assertEqual(kinds[2], ("PUT", "/vm.boot"))
create_payload = self.api_calls[1][2]
self.assertEqual(create_payload["kernel"]["path"], self.kernel)
# CHV 54:内核走 payload.kernel 纯字符串(旧顶层
# kernel:{path} 会被忽略、vm.boot 400)。
self.assertEqual(create_payload["payload"]["kernel"], self.kernel)
self.assertEqual(create_payload["disks"][0]["image_type"], "Raw")
self.assertTrue(create_payload["disks"][0]["path"].endswith(
"disk.raw"))
events = [e for e, _, _, _ in self.audit]