feat(chv-guest): Gitea 同步变量经 seed 进 guest-env(执行器集成)

- 新增 cloud/chv/gitea_sync.py:6 键白名单,三源合并
  (宿主 CHV_GITEA_* < 任务 gitea_sync < extra_env),
  必填 4 键缺失即 fail-closed,空即不同步
- ssh_transport:GITEA_TOKEN 进密钥集(argv 拒绝),其余
  5 键进 guest-env 集(split_guest_env)
- hostkeys.write_seed:guest_env 与 secret_env 合并写同一
  条目,仍无 runcmd、0600
- config:_gitea_fragment 产 gitea_sync_env(函数内 import,
  叶子模块顶层只许标准库)
- executor.wake_vm:起 VMM 前合并+校验(gitea_sync_incomplete),
  guest-env 随 seed 投递;provision_host_key 透传 guest_env
- worker:_run_attempt 仅对 CHV 执行器把同步变量并进 gateway_env
- 测试:cloud/tests/test_chv_gitea_sync.py 20 项
- 边界:tasks 表无 JSON 列,DB 往返丢任务 gitea_sync;
  生产主来源是宿主 CHV_GITEA_* 环境变量
This commit is contained in:
host committed 2026-11-06 16:55:32 +00:00
1 parent 67ca0b86cd
commit e7f699c62b
7 files changed
+785 -37

No files matched your search

+15
View File
@@ -245,6 +245,20 @@ def _timeout_fragment(params: dict, env: dict) -> dict:
}
def _gitea_fragment(env: dict) -> dict:
"""Gitea 同步片段:宿主配置环境变量 CHV_GITEA_*(见
gitea_sync.CHV_GITEA_ENV_MAP)映射成的 guest-env 键值
dict。无配置即空 dict(本次启动不同步);值本身不校验
完整性——完整性由 wake_vm 在起 VMM 前 fail-closed
(validate_gitea_sync_env),构造时不拦,免得一个配
错的宿主连执行器对象都建不出来、排障信息全丢。
import 在函数内:本模块是叶子模块,顶层只许 import
标准库(见 test_leaf_modules_only_import_stdlib),
与执行器的方法内 import 同款惯例。"""
from cloud.chv.gitea_sync import config_gitea_sync_env
return {"gitea_sync_env": config_gitea_sync_env(env)}
def _assemble_chv_config(fragments: list) -> "ChvConfig":
"""把各片段 dict 合并成 ChvConfig(纯合并,不改值)。
@@ -277,4 +291,5 @@ def build_chv_config(params: dict, env: dict) -> "ChvConfig":
_disk_fragment(env),
_network_fragment(params, env),
_timeout_fragment(params, env),
_gitea_fragment(env),
])