Install
openclaw skills install @thcjp/azure-cli-toolkitopenclaw skills install @thcjp/azure-cli-toolkit| 认证方式 | 适用场景 | 命令 |
|---|---|---|
| 服务主体 | CI/CD、自动化脚本 | az login --service-principal |
| 托管身份 | Azure 资源内部调用 | az login --identity |
| 令牌认证 | 无状态流水线 | az login --service-principal --password-stdin |
# 服务主体认证(自动化场景)
az login --service-principal \
--username $AZURE_CLIENT_ID \
--password $AZURE_CLIENT_SECRET \
--tenant $AZURE_TENANT_ID
# 托管身份认证(虚拟机内部)
az login --identity
# 令牌认证(CI/CD)
echo "$AZURE_ACCESS_TOKEN" | az login --service-principal \
-u $AZURE_CLIENT_ID --password-stdin --tenant $AZURE_TENANT_ID
输出: 返回自动化认证方式的执行结果,包含操作状态和输出数据。
# 批量删除资源组下所有虚拟机
az vm list -g myRG -d --query "[].id" -o tsv | xargs az vm delete --ids --yes
# 批量停止所有运行中的虚拟机
az vm list -d --query "[?powerState=='VM running'].id" -o tsv | xargs az vm stop --ids
# 按标签批量筛选资源
az resource list --tag env=production --query "[].id" -o tsv
输入: 用户提供批量资源操作所需的指令和必要参数。 输出: 返回批量资源操作的执行结果,包含操作状态和输出数据。
批量资源操作操作,处理输入数据并返回结果批量资源操作 选项#!/bin/bash
set -e # 出错即退出
# 创建资源组
az group create -g prod-rg -l eastus
# 创建虚拟机并获取 ID
VM_ID=$(az vm create \
-g prod-rg \
-n prod-vm \
--image UbuntuLTS \
--query id \
--output tsv)
echo "Created VM: $VM_ID"
# 验证状态
az vm show --ids "$VM_ID" --query provisioningState
# 配置网络安全组
az network nsg create -g prod-rg -n prod-nsg
az network nsg rule create -g prod-rg --nsg-name prod-nsg \
-n allow-ssh --priority 1000 \
--source-address-prefixes '*' \
--destination-port-ranges 22 \
--access Allow --protocol Tcp
输入: 用户提供自动化部署脚本所需的指令和必要参数。 处理: 按照skill规范执行自动化部署脚本操作,遵循单一意图原则。
自动化部署脚本操作,处理输入数据并返回结果自动化部署脚本 选项# 列出所有订阅
az account list --query "[].{name:name, id:id, state:state}" -o table
# 跨订阅操作
for sub in $(az account list --query "[].id" -o tsv); do
az account set --subscription $sub
echo "=== 订阅: $(az account show --query name -o tsv) ==="
az vm list -o table
done
输入: 用户提供多订阅管理所需的指令和必要参数。 处理: 按照skill规范执行多订阅管理操作,遵循单一意图原则。 输出: 返回多订阅管理的执行结果,包含操作状态和输出数据。
多订阅管理操作,处理输入数据并返回结果多订阅管理 选项# 查看订阅费用(本月)
az consumption usage list \
--top 10 \
--query "[].{service:instanceName, cost:pretaxCost}" \
-o table
# 识别未使用的资源
az resource list --query "[?tags.env=='dev']" -o table
# 查看虚拟机实际使用率
az monitor metrics list \
--resource $(az vm show -g myRG -n myVM --query id -o tsv) \
--metric "Percentage CPU" \
--interval PT1H -o table
输入: 用户提供成本分析与优化所需的指令和必要参数。 处理: 按照skill规范执行成本分析与优化操作,遵循单一意图原则。 输出: 返回成本分析与优化的执行结果,包含操作状态和输出数据。
# 查看策略分配
az policy assignment list -o table
# 合规状态检查
az policy state list --query "[?complianceState=='NonCompliant']" -o table
# 安全基线扫描
az security assessment list -o table
输入: 用户提供策略合规审计所需的指令和必要参数。 输出: 返回策略合规审计的执行结果,包含操作状态和输出数据。
本skill还覆盖以下能力场景: 企业级、云管理、支持批量操作、多订阅管理与成本、优化分析、面向企业团队的高、云平台管理工具、在免费版基础上扩、展自动化、批量操作与成本治、理能力、核心能力、服务主体与托管身、批量资源操作与脚、本化部署、多订阅跨租户统一、成本分析与资源优、化建议、策略合规审计与安、全基线检查。这些能力在上述核心功能中均有对应处理逻辑。
通过脚本化方式部署完整的生产环境。
#!/bin/bash
set -e
ENV=${1:-dev}
RG="app-${ENV}-rg"
LOCATION="eastus"
# 1. 创建资源组
az group create -g $RG -l $LOCATION
# 2. 部署应用服务
az deployment group create \
-g $RG \
--template-file infra/main.bicep \
--parameters env=$ENV location=$LOCATION
# 3. 配置监控
az monitor log-analytics workspace create \
-g $RG -n "logs-${ENV}" -l $LOCATION
# 4. 输出部署结果
echo "部署完成: $ENV 环境"
az resource list -g $RG --query "[].{name:name, type:type}" -o table
统一管理开发、测试、生产三个环境的资源状态。
# 批量查询所有环境资源
for env in dev test prod; do
echo "=== 环境: $env ==="
az resource list -g "app-${env}-rg" \
--query "[].{name:name, type:type, location:location}" \
-o table
done
# 批量启停(夜间自动关停开发环境)
az vm list -g app-dev-rg --query "[].id" -o tsv | \
xargs az vm deallocate --ids
识别闲置资源并清理,优化云成本。
# 查找未附加的磁盘
az disk list --query "[?diskState=='Unattached']" -o table
# 查找停止超过 7 天的虚拟机
az vm list -d --query "[?powerState!='VM running']" -o table
# 批量删除未使用的存储容器
az storage container list \
--account-name mystorage \
--query "[?properties.leaseStatus=='unlocked'].name" -o tsv | \
xargs -I {} az storage container delete \
--account-name mystorage -n {}
# 创建服务主体
az ad sp create-for-rbac --name my-automation-sp
# 示例
# {
# "appId": "详情见说明xx-详情见说明x-详情见说明x",
# "password": "详情见说明xx-详情见说明x-详情见说明x",
# "tenant": "详情见说明xx-详情见说明x-详情见说明x"
# }
# 配置环境变量
export AZURE_CLIENT_ID="<appId>"
export AZURE_CLIENT_SECRET="<password>"
export AZURE_TENANT_ID="<租户ID>"
mkdir -p .azure-toolkit/{scripts,templates,reports}
cat > .azure-toolkit/config.json << 'EOF'
{
"edition": "pro",
"default_location": "eastus",
"environments": ["dev", "test", "prod"],
"auto_shutdown": {
"dev": "22:00",
"test": "20:00"
},
"cost_alert_threshold": 1000
}
EOF
# 执行部署脚本
./.azure-toolkit/scripts/deploy.sh prod
-analytics: 命令参数,用于指定操作选项--subscription: 命令参数,用于指定操作选项--protocol: 命令参数,用于指定操作选项--resource: 命令参数,用于指定操作选项--template-file: 命令参数,用于指定操作选项--priority: 命令参数,用于指定操作选项-dev-rg: 命令参数,用于指定操作选项-client-secret: 命令参数,用于指定操作选项--username: 命令参数,用于指定操作选项-vm: 命令参数,用于指定操作选项-client-id: 命令参数,用于指定操作选项-resource-id: 命令参数,用于指定操作选项--yes: 命令参数,用于指定操作选项-nsg: 命令参数,用于指定操作选项--account-name: 命令参数,用于指定操作选项--access: 命令参数,用于指定操作选项--tenant: 命令参数,用于指定操作选项--vault-name: 命令参数,用于指定操作选项-tenant-id: 命令参数,用于指定操作选项--image: 命令参数,用于指定操作选项-scan: 命令参数,用于指定操作选项--output: 命令参数,用于指定操作选项-subscription-id: 命令参数,用于指定操作选项--query: 命令参数,用于指定操作选项--metric: 命令参数,用于指定操作选项-I: 命令参数,用于指定操作选项--top: 命令参数,用于指定操作选项--interval: 命令参数,用于指定操作选项--source-address-prefixes: 命令参数,用于指定操作选项--nsg-name: 命令参数,用于指定操作选项-ssh: 命令参数,用于指定操作选项-automation-sp: 命令参数,用于指定操作选项--destination-port-ranges: 命令参数,用于指定操作选项--parameters: 命令参数,用于指定操作选项--ids: 命令参数,用于指定操作选项-I: 命令参数,用于指定操作选项-I: 命令参数,用于指定操作选项| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| content | string | 是 | 相关说明 |
| content | string | 否 | 相关说明, 默认: 全部维度 |
| strict_level | string | 否 | 审查严格度, 可选: strict/normal/loose, 默认: normal |
{
"success": true,
"data": {
"overall_grade": "A",
"total_score": 92,
"max_score": 100,
"summary": "处理完成",
"details": [
{
"item": "代码风格",
"status": "pass",
"score": 95,
"comment": "符合规范"
},
{
"item": "安全合规",
"status": "warn",
"score": 80,
"comment": "符合规范"
}
],
"improvements": [
{
"priority": "high",
"suggestion": "建议优化",
"expected_gain": "+5分"
},
{
"priority": "medium",
"suggestion": "建议优化",
"expected_gain": "+3分"
}
]
},
"error": null
}
| 错误场景 | 原因 | 处理方式 |
|---|---|---|
| 待审查内容为空 | 用户未提供内容 | 提示用户提供待审查的代码 |
| 内容格式不识别 | 传入不支持的内容格式 | 列出支持的格式, 建议转换后执行ping命令测试网络连通性,检查防火墙和代理设置连接后重新执行命令 |
| 检查项超出范围 | 传入了不存在的检查维度 | 列出可用检查维度, 使用默认全部检查 |
| 审查超时 | 内容过长导致处理超时 | 建议分段审查, 每段不超过5000字 |
| 其他异常 | 内部处理异常 | 检查输入后执行ping命令测试网络连通性,检查防火墙和代理设置连接后重新执行命令 |
| 依赖项 | 类型 | 是否必需 | 获取方式 |
|---|---|---|---|
| Azure CLI | CLI 工具 | 必需 | brew / apt / choco 安装 |
| Azure 订阅 | 云服务 | 必需 | azure.com 注册 |
| 服务主体 | 认证 | 自动化必需 | az ad sp create-for-rbac |
| jq | CLI 工具 | 推荐 | 系统包管理器 |
| xargs | CLI 工具 | 批量操作必需 | 系统自带 |
| LLM API | API | 必需 | 由 Agent 内置 LLM 提供 |
自动化场景需配置服务主体凭据:
export AZURE_CLIENT_ID="your-client-id"
export AZURE_CLIENT_SECRET="your-client-secret"
export AZURE_TENANT_ID="your-tenant-id"
export AZURE_SUBSCRIPTION_ID="your-subscription-id"
建议使用 Azure KeyVault 管理敏感凭据:
# 从 KeyVault 获取密钥(推荐)
az keyvault secret show --vault-name myVault -n azure-client-secret \
--query value -o tsv
az 命令,支持脚本化批量操作与 CI/CD 集成输入:
{
"content": "示例内容",
"strict_level": "normal"
}
输出:
评级: B级(良好) - 总分: 85/100
检查详情:
- 代码风格: 通过(95分) - 检查通过
- 安全合规: 警告(75分) - 检查通过
- 无障碍性: 通过(85分) - 检查通过
改进建议:
1. [高优先级] 建议优化
2. [中优先级] 建议优化
输入:
{
"content": "示例内容",
"strict_level": "strict"
}
输出:
评级: C级(及格) - 总分: 70/100
检查详情:
- 代码风格: 通过(90分) - 检查通过
- 安全合规: 不通过(50分) - 检查通过
- 无障碍性: 警告(70分) - 检查通过
改进建议:
1. [高优先级] 建议优化
2. [高优先级] 建议优化
3. [低优先级] 建议优化
输入:
{
"content": "示例内容"
}
输出:
评级: D级(不及格) - 总分: 45/100
检查详情:
- 代码风格: 不通过(40分) - 检查通过
- 安全合规: 不通过(30分) - 检查通过
- 无障碍性: 通过(65分) - 检查通过
改进建议:
1. [紧急] 建议优化
2. [高优先级] 建议优化
完全兼容。专业版使用相同的 az 命令语法,免费版的所有命令在专业版中可直接使用。
# 重置服务主体密码
az ad sp credential reset --name <appId> --password <new-password>
使用 CI/CD 平台的密钥管理功能(如 Azure KeyVault、GitHub Secrets),不要在代码中硬编码凭据。
专业版支持软删除恢复:
# 恢复已删除的资源
az resource recover --ids <deleted-resource-id>
成本数据通常有 8-24 小时延迟,建议结合监控指标做实时预估。
建议每周执行一次全量扫描,新资源部署后立即扫描:
az policy state trigger-scan
| 错误场景 | 原因 | 处理方式 |
|---|---|---|
| LLM响应超时或无响应 | 网络延迟或模型负载过高 | 执行ping命令测试网络连通性,检查防火墙和代理设置连接,执行ping命令测试网络连通性,检查防火墙和代理设置连接后重新执行命令请求;确认Agent平台LLM服务正常 |
| 输入内容格式不正确 | 用户输入不符合skill预期格式 | 检查输入是否符合skill使用说明中的格式要求,参考示例章节 |
| 执行结果与预期不符 | 指令描述不够明确或上下文不足 | 提供更详细的指令描述,补充必要的上下文信息 |
| 命令执行失败 | 运行环境不满足要求或权限不足 | 确认运行环境符合依赖说明中的要求;检查命令权限设置 |