feat(chv-guest): seed 附加项供客机用户与静态网络(wake 路径前置)

wake_vm 在 WSL 台架上跑通需要客机身份与网络:镜像本身不建
用户、tap 无 DHCP,缺 users 块的 VM 登不进去、缺 network-config
的 VM 拿不到静态 IP。最小补法(复用 write_seed 机制):
- hostkeys.write_seed 新增 user_data_extra(原样追加进
  user-data,供 users: 块)与 network_config(写 seed
  network-config 文件,0600);附加项含 runcmd: 即 ValueError
- config _seed_fragment:CHV_SEED_USER_DATA_EXTRA_FILE /
  CHV_SEED_NETWORK_CONFIG_FILE(只存路径)
- executor._seed_extras 在 wake 起 VMM 前读入,缺失即
  ChvFailure seed_extra_missing;provision_host_key 透传
- README §7 残留更新:guest-env 集成已做
- 测试:test_chv_gitea_sync 新增 5 项(写盘/禁 runcmd/
  配置映射/wake 带附加项/缺失 fail-closed)
This commit is contained in:
host committed 2026-11-06 16:58:27 +00:00
1 parent e7f699c62b
commit d7cc482ed5
5 files changed
+184 -11

No files matched your search

+13 -3
View File
@@ -143,6 +143,16 @@ rebase、不静默丢提交。
- 验收(用户视角):VM 启动后仓在 `~/workspace` 且是最新
HEAD;VM 内改文件 commit push 后 Gitea 网页可见该提交;
Gitea 上改一次后 VM 内 pull 能同步回来。双向都通才算集成通。
- 残留:执行器生成 seed 时自动写 guest-env 的集成未做(本轨
验收用手工 seed 测通链路);专用 token 与测试仓名须用户给,
本轨不自编 token、不动生产 Gitea 配置。
- 集成(2026-11-07,第二轮第一棒):执行器生成 seed 时自动写
guest-env 已做(`cloud/chv/gitea_sync.py` + `wake_vm`):
GITEA_TOKEN 进密钥集(只进 seed,绝不进 argv),其余 5 键
也随 seed 进 guest-env;来源是宿主 `CHV_GITEA_*` 环境变量
或任务 `gitea_sync` dict;必填 4 键缺失时起 VMM 前
fail-closed(`gitea_sync_incomplete`),无同步变量时静默
不同步。客机用户与静态网络由 seed 附加项供给:
`CHV_SEED_USER_DATA_EXTRA_FILE`(含 `users:` 块的文件)与
`CHV_SEED_NETWORK_CONFIG_FILE`(NoCloud network-config),
路径配了但文件读不出时 wake 前 fail-closed
(`seed_extra_missing`);附加 user-data 里禁 `runcmd:`。
专用 token 与测试仓名须用户给,本轨不自编 token、不动
生产 Gitea 配置。