主要更新: - 新增 external_tool_api.py: 外部工具管理 API - 新增 tool_storage.py: 工具存储管理器 - 新增回调功能用于计费 (agent_callback_utils) - 支持多工具创建 Agent - 新增 CI/CD 构建状态查询 API - 新增部署信息查询 API - 更新文档 (EXTERNAL_TOOL_API.md v2.0) - 更新 Dockerfile 添加新模块 - 更新 app.py 集成外部工具路由
193 lines
6.3 KiB
Bash
Executable File
193 lines
6.3 KiB
Bash
Executable File
#!/bin/bash
|
||
# =============================================================================
|
||
# Agent Manager DNS权限配置脚本
|
||
# =============================================================================
|
||
#
|
||
# 用途:为Azure Service Principal分配DNS Zone管理权限
|
||
#
|
||
# 前提条件:
|
||
# 1. 已安装Azure CLI (az命令)
|
||
# 2. 已登录到正确的Azure账户 (az login)
|
||
# 3. 已选择正确的subscription (az account set)
|
||
# 4. 有足够权限分配角色(Owner或User Access Administrator)
|
||
#
|
||
# 使用方法:
|
||
# bash scripts/setup_dns_permissions.sh
|
||
#
|
||
# =============================================================================
|
||
|
||
set -e # 遇到错误立即退出
|
||
|
||
# 颜色输出
|
||
RED='\033[0;31m'
|
||
GREEN='\033[0;32m'
|
||
YELLOW='\033[1;33m'
|
||
BLUE='\033[0;34m'
|
||
NC='\033[0m' # No Color
|
||
|
||
# 日志函数
|
||
log_info() {
|
||
echo -e "${BLUE}[INFO]${NC} $1"
|
||
}
|
||
|
||
log_success() {
|
||
echo -e "${GREEN}[SUCCESS]${NC} $1"
|
||
}
|
||
|
||
log_warning() {
|
||
echo -e "${YELLOW}[WARNING]${NC} $1"
|
||
}
|
||
|
||
log_error() {
|
||
echo -e "${RED}[ERROR]${NC} $1"
|
||
}
|
||
|
||
# =============================================================================
|
||
# 配置部分 - 根据实际环境修改
|
||
# =============================================================================
|
||
|
||
# 从k8s secret读取配置(如果可用)
|
||
if command -v kubectl &> /dev/null && kubectl get secret agent-manager-secret -n agent-manager &> /dev/null 2>&1; then
|
||
log_info "从Kubernetes Secret读取配置..."
|
||
|
||
AZURE_CLIENT_ID=$(kubectl get secret agent-manager-secret -n agent-manager -o jsonpath='{.data.AZURE_CLIENT_ID}' 2>/dev/null | base64 -d)
|
||
AZURE_SUBSCRIPTION_ID=$(kubectl get secret agent-manager-secret -n agent-manager -o jsonpath='{.data.AZURE_SUBSCRIPTION_ID}' 2>/dev/null | base64 -d)
|
||
AZURE_RESOURCE_GROUP=$(kubectl get secret agent-manager-secret -n agent-manager -o jsonpath='{.data.AZURE_RESOURCE_GROUP}' 2>/dev/null | base64 -d)
|
||
AZURE_DNS_ZONE=$(kubectl get secret agent-manager-secret -n agent-manager -o jsonpath='{.data.AZURE_DNS_ZONE}' 2>/dev/null | base64 -d)
|
||
else
|
||
log_warning "无法从Kubernetes读取配置,使用默认值"
|
||
|
||
# 默认配置
|
||
AZURE_CLIENT_ID="${AZURE_CLIENT_ID:-c5ba26db-f180-425f-bac3-93708d853988}"
|
||
AZURE_SUBSCRIPTION_ID="${AZURE_SUBSCRIPTION_ID:-45d7a360-af09-40fc-9afc-56dc475245ec}"
|
||
AZURE_RESOURCE_GROUP="${AZURE_RESOURCE_GROUP:-taiji-ai-v0}"
|
||
AZURE_DNS_ZONE="${AZURE_DNS_ZONE:-taijiagnet.com}"
|
||
fi
|
||
|
||
# =============================================================================
|
||
# 主逻辑
|
||
# =============================================================================
|
||
|
||
echo ""
|
||
echo "========================================="
|
||
echo " Agent Manager DNS权限配置"
|
||
echo "========================================="
|
||
echo ""
|
||
|
||
log_info "配置信息:"
|
||
echo " Service Principal ID: $AZURE_CLIENT_ID"
|
||
echo " Subscription ID: $AZURE_SUBSCRIPTION_ID"
|
||
echo " Resource Group: $AZURE_RESOURCE_GROUP"
|
||
echo " DNS Zone: $AZURE_DNS_ZONE"
|
||
echo ""
|
||
|
||
# 1. 检查Azure CLI
|
||
log_info "检查Azure CLI..."
|
||
if ! command -v az &> /dev/null; then
|
||
log_error "Azure CLI未安装,请先安装: https://docs.microsoft.com/cli/azure/install-azure-cli"
|
||
exit 1
|
||
fi
|
||
log_success "Azure CLI已安装"
|
||
|
||
# 2. 检查Azure登录状态
|
||
log_info "检查Azure登录状态..."
|
||
if ! az account show &> /dev/null; then
|
||
log_error "未登录Azure,请先运行: az login"
|
||
exit 1
|
||
fi
|
||
log_success "已登录Azure"
|
||
|
||
# 3. 切换到正确的subscription
|
||
log_info "切换到目标subscription..."
|
||
CURRENT_SUB=$(az account show --query id -o tsv)
|
||
if [ "$CURRENT_SUB" != "$AZURE_SUBSCRIPTION_ID" ]; then
|
||
log_warning "当前subscription ($CURRENT_SUB) 与目标不同,正在切换..."
|
||
az account set --subscription "$AZURE_SUBSCRIPTION_ID"
|
||
log_success "已切换到subscription: $AZURE_SUBSCRIPTION_ID"
|
||
else
|
||
log_success "已在正确的subscription"
|
||
fi
|
||
|
||
# 4. 验证DNS Zone存在
|
||
log_info "验证DNS Zone是否存在..."
|
||
if ! az network dns zone show \
|
||
--name "$AZURE_DNS_ZONE" \
|
||
--resource-group "$AZURE_RESOURCE_GROUP" \
|
||
--output none 2>/dev/null; then
|
||
log_error "DNS Zone '$AZURE_DNS_ZONE' 不存在于资源组 '$AZURE_RESOURCE_GROUP'"
|
||
exit 1
|
||
fi
|
||
log_success "DNS Zone存在"
|
||
|
||
# 构建DNS Zone资源ID
|
||
DNS_ZONE_ID="/subscriptions/$AZURE_SUBSCRIPTION_ID/resourceGroups/$AZURE_RESOURCE_GROUP/providers/Microsoft.Network/dnsZones/$AZURE_DNS_ZONE"
|
||
|
||
# 5. 检查当前权限
|
||
log_info "检查Service Principal当前权限..."
|
||
EXISTING_ROLES=$(az role assignment list \
|
||
--assignee "$AZURE_CLIENT_ID" \
|
||
--scope "$DNS_ZONE_ID" \
|
||
--query "[].roleDefinitionName" \
|
||
--output tsv)
|
||
|
||
if echo "$EXISTING_ROLES" | grep -q "DNS Zone Contributor"; then
|
||
log_success "Service Principal已拥有DNS Zone Contributor角色"
|
||
echo ""
|
||
echo "当前角色分配:"
|
||
az role assignment list \
|
||
--assignee "$AZURE_CLIENT_ID" \
|
||
--scope "$DNS_ZONE_ID" \
|
||
--output table
|
||
echo ""
|
||
log_info "无需重复分配权限"
|
||
exit 0
|
||
fi
|
||
|
||
# 6. 分配DNS Zone Contributor角色
|
||
log_info "分配DNS Zone Contributor角色..."
|
||
if az role assignment create \
|
||
--assignee "$AZURE_CLIENT_ID" \
|
||
--role "DNS Zone Contributor" \
|
||
--scope "$DNS_ZONE_ID" \
|
||
--output none; then
|
||
log_success "DNS Zone Contributor角色分配成功"
|
||
else
|
||
log_error "角色分配失败,请检查是否有足够的权限"
|
||
exit 1
|
||
fi
|
||
|
||
# 7. 验证权限分配
|
||
log_info "验证权限分配..."
|
||
sleep 3 # 等待权限生效
|
||
|
||
echo ""
|
||
echo "当前角色分配:"
|
||
az role assignment list \
|
||
--assignee "$AZURE_CLIENT_ID" \
|
||
--scope "$DNS_ZONE_ID" \
|
||
--output table
|
||
|
||
echo ""
|
||
log_success "✅ DNS权限配置完成!"
|
||
echo ""
|
||
log_info "Service Principal现在可以管理DNS Zone '$AZURE_DNS_ZONE' 的DNS记录"
|
||
log_info "Agent Manager可以为创建的agent自动配置DNS域名"
|
||
echo ""
|
||
|
||
# 8. 测试DNS权限(可选)
|
||
read -p "是否要测试DNS记录创建权限?(y/N) " -n 1 -r
|
||
echo
|
||
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
||
TEST_RECORD="test-dns-permission-check"
|
||
TEST_IP="1.2.3.4"
|
||
|
||
log_info "创建测试DNS记录: $TEST_RECORD.$AZURE_DNS_ZONE -> $TEST_IP"
|
||
|
||
# 使用Azure REST API测试(模拟agent-manager的行为)
|
||
log_warning "注意:此测试需要AZURE_CLIENT_SECRET,将跳过"
|
||
log_info "请在agent-manager中创建一个测试agent来验证DNS功能"
|
||
fi
|
||
|
||
echo ""
|
||
log_success "配置完成!"
|