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
相关产品推荐
相关产品推荐

