Merge remote-tracking branch 'origin/master'

# Conflicts:
#	app.py
#	k8s/agent-manager-configmap.yaml
This commit is contained in:
elipitc
2026-05-31 18:04:07 +08:00
62 changed files with 9569 additions and 73 deletions
+13 -3
View File
@@ -9,7 +9,7 @@ from sqlalchemy.orm import Session
from datetime import datetime
import logging
from k8s_manager import K8sManager
from k8s_manager import K8sManager, sanitize_k8s_name
from database import (
get_db, Template, Agent, Quota, AgentMetric,
AgentType, AgentStatus, parse_resource_string
@@ -328,6 +328,12 @@ async def create_agent(request: CreateAgentRequest, db: Session = Depends(get_db
detail=f"无效的框架类型。支持的框架: {', '.join(valid_frameworks)}"
)
# DNS-1035 名称合规化:确保名称可以用作 K8s 资源名称
original_name = request.name
request.name = sanitize_k8s_name(request.name)
if original_name != request.name:
logger.info(f"🔄 Agent 名称已合规化: '{original_name}' -> '{request.name}' (DNS-1035)")
# 合并环境变量到config
config_data = request.config.copy()
config_data["agent_framework"] = framework # 添加框架类型到配置
@@ -394,7 +400,8 @@ async def create_agent(request: CreateAgentRequest, db: Session = Depends(get_db
if request.template == "openclaw":
service_port = 18789
else:
service_port = k8s_manager.TEMPLATE_PORTS.get(request.template)
# 其他模板从数据库动态获取
service_port = template_manager.get_port(request.template)
# 步骤4: 创建 Service(OpenClaw 已在 create_openclaw_deployment 中自动创建 Service 和 Ingress)
service_info = None
@@ -608,8 +615,11 @@ async def delete_agent(agent_name: str, db: Session = Depends(get_db)):
try:
logger.info(f"收到删除Agent请求: {agent_name}")
# DNS-1035 名称合规化
agent_name = sanitize_k8s_name(agent_name)
# 保护机制:防止删除 agent-manager 命名空间
computed_namespace = f"agent-{agent_name}".lower().strip('-')[:63]
computed_namespace = f"agent-{agent_name}"[:63].rstrip('-')
if computed_namespace == "agent-manager":
logger.error(f"❌ 禁止删除 agent-manager 命名空间!agent_name={agent_name}, computed_namespace={computed_namespace}")
raise HTTPException(