feat(chv): 阶段 1 数据盘与 tenant 标记同 overlay 解耦(copy 也供)
真机根因(2026-11-07,CHV v54 三变体实证):vm.boot 对任何 带 backing file 的 qcow2 都报 Maximum disk nesting depth exceeded——overlay-only 与 overlay-rawbase 均 500,base 直接 启动(reuse)22.5 秒成功,数据盘与压缩均已排除。overlay 在 本 VMM 上不可用,持久 VM 须能在 copy 模式下跑。 - _provision_task_disk:copy 与 overlay 都供数据盘并写 tenant.json(只有 reuse 不供不写);_provision_data_disk_path 同理(reuse 才返回 None)。 - _cleanup_vm_task_disk:保护(持久登记/登记快照)不再只限 overlay 模式;无登记无快照的 copy 盘仍按旧语义删除。 - provision_data_disk:数据盘改 raw 稀疏盘(os.truncate, 零外部依赖)——copy 模式本来就不需要 qemu-img,数据盘 绝不能悄悄加上这个依赖;CHV 按后缀认 Raw。 - 测试:新增 copy 供数据盘+tenant 与 copy 持久盘 stop 保护; VmConfig 三盘断言(任务+seed+数据)更新 arch95/fix 两处 旧“恰好两盘”契约与本轨 qcow2 类型断言。 回归:test_chv_*.py、test_cloud_hypervisor.py 42、test_chv_v3_fixes 38 全过(全量 cloud/tests 在跑)。 不推、不合、不部署;只本地分支。
This commit is contained in:
1 parent
a5f836e9fd
commit
f809014bef
5 files changed
+113
-65
No files matched your search
@@ -176,11 +176,15 @@ class SeedDiskTest(ChvFixCase):
|
||||
out = ex.wake_vm({"id": "seed1"})
|
||||
self.assertEqual(out["state"], "running")
|
||||
payload = self.api_payloads["vm.create"]
|
||||
self.assertEqual(len(payload["disks"]), 2)
|
||||
self.assertEqual(len(payload["disks"]), 3)
|
||||
seed_disk = payload["disks"][1]["path"]
|
||||
self.assertTrue(seed_disk.endswith("seed.iso"))
|
||||
self.assertTrue(payload["disks"][1]["readonly"])
|
||||
self.assertTrue(os.path.exists(seed_disk))
|
||||
# 第三盘是数据盘(阶段 1:copy 模式也挂数据盘)。
|
||||
self.assertTrue(payload["disks"][2]["path"].endswith(
|
||||
"data.raw"))
|
||||
self.assertEqual(payload["disks"][2]["image_type"], "Raw")
|
||||
self.assertIn("genisoimage", [c[0] for c in self.calls])
|
||||
|
||||
def test_seed_disk_build_failure_is_fail_fast(self):
|
||||
|
||||
Reference in new issue
Block a user