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

+27
View File
@@ -2575,6 +2575,25 @@ class Worker:
}
return "sub2api", env
def _gitea_sync_env(self, task):
"""Gitea 同步变量(CHV guest-env 集成):任务 gitea_sync
覆盖宿主 CHV_GITEA_* 配置(见 gitea_sync.extract_...)。
只读本任务与本 worker 的 self._env(默认 os.environ),
绝不硬编码任何值、不读其它任务、不写日志。返回空 dict
即本次启动不同步;完整性校验不在这里做——执行器
wake_vm 在起 VMM 前 fail-closed(gitea_sync_incomplete),
worker 只负责把变量带进 extra_env。
注意:tasks 表没有 JSON/元数据列,DB 往返会丢任务 dict
的 gitea_sync;生产主来源是宿主 CHV_GITEA_* 环境变量。"""
from cloud.chv.gitea_sync import (
config_gitea_sync_env,
extract_gitea_sync_env,
)
return extract_gitea_sync_env(
task=task,
config_sync=config_gitea_sync_env(self._env))
def _ensure_gateway(self, task):
"""任务 dict 上的网关缓存:已算过直接取,否则算一次并存回。
@@ -4684,6 +4703,14 @@ class Worker:
message="worker exec start: %s" % _exec_detail)
try:
gateway_provider, gateway_env = self._ensure_gateway(task)
if isinstance(self.executor, CloudHypervisorExecutor):
# CHV guest-env 集成:Gitea 同步变量随 extra_env
# 进 wake_vm(密钥走 seed,boot 变量也走 seed;
# 见 gitea_sync)。只对 CHV 合并——Docker/Local
# 的密钥处理口径不同(-e/子进程环境),不在本轮
# 改动,避免 GITEA_TOKEN 经其它通道外泄。
gateway_env = _merge_env(
gateway_env, self._gitea_sync_env(task))
if self._use_popen():
if goal_mode and task.get("_goal_resume_breakpoint"):
# G10 断点:无 --goal-text,不开新循环。