You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Az CLI中JMESPATH跨列表查询及容器应用修订版脚本问题

Az CLI + JMESPATH 列表匹配与Container App修订版筛选方案

1. 通用场景:判断列表项是否存在于另一列表

JMESPATH的contains()函数是核心工具,语法为contains(目标列表, 待检查值),返回布尔结果true/false。结合Az CLI的--query参数,可直接筛选符合条件的条目。

示例:从容器应用修订版列表中,筛选name字段存在于指定列表的项:

# 筛选名称在["rev-00001", "rev-00003"]中的修订版
az containerapp revision list -n my-app -g my-rg --query "[?contains(['rev-00001','rev-00003'], name)]"

2. 流水线场景:筛选无标签且活跃的Container App修订版

针对你遇到的无标签修订版持续活跃的异常,可按以下步骤编写Bash脚本:

步骤1:获取活跃修订版列表(修正语法并格式化输出)

先修正原命令的语法错误(缺少闭合引号),用tsv格式输出纯文本,方便后续处理:

# 获取活跃修订版名称,输出为每行一个名称的纯文本格式
activeRevisionList=$(az containerapp revision list -n my-containerapp -g my-resourcegroup --query "[].name" -o tsv)

步骤2:将纯文本列表转为JMESPATH可识别的数组格式

把TSV格式的列表转换为JMESPATH能解析的数组字符串:

# 将每行名称转为双引号包裹的逗号分隔字符串,再套上数组括号
jmespathActiveList="[$(echo "$activeRevisionList" | awk '{printf "\"%s\",", $0}' | sed 's/,$//')]"

步骤3:查询符合条件的目标修订版

结合contains()判断revisionName是否在活跃列表,同时过滤label == null的项:

# 筛选出需要停用的修订版名称
targetRevisions=$(az containerapp ingress traffic show --name aca-orc-preprod-weu -g rg-orc-preprod-weu \
  --query "trafficRoutes[?contains($jmespathActiveList, revisionName) && label == null].revisionName" -o tsv)

步骤4:批量停用目标修订版

循环遍历结果,执行停用命令:

# 逐个停用符合条件的修订版
for rev in $targetRevisions; do
  az containerapp revision deactivate -n aca-orc-preprod-weu -g rg-orc-preprod-weu --revision "$rev"
done

内容的提问来源于stack exchange,提问作者jamessouthall

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 08:33:34