Files
agent_management/scripts/setup_dns_permissions.sh
zhanggangyong 8cb166fb58 feat: 新增外部工具 API 及回调功能(计费)
主要更新:
- 新增 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 集成外部工具路由
2026-01-29 12:00:16 +00:00

193 lines
6.3 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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 "配置完成!"