JQ簡介
JQ 是一個強大的命令列工具,用於處理 JSON 資料。它允許使用者以簡潔、高效的方式過濾、轉換和處理 JSON 檔案或輸入資料流中的資料。JQ 以其易讀的文法和強大的功能,在處理 JSON 資料時特別有用。本文將介紹在模板中如何通過Outputs的ValueSelector解析任務輸出,相關文法請查看任務說明文檔。
JQ官網:https://jqlang.github.io/jq/manual/
JQ線上測試網站:https://jqplay.org/
基礎用法
通過 JQ 過濾指定欄位
FormatVersion: OOS-2019-06-01
Tasks:
- Name: describeInstances
Action: ACS::ExecuteAPI
Properties:
Service: ECS
API: DescribeInstances #API文檔:https://www.alibabacloud.com/help/zh/ecs/developer-reference/api-ecs-2014-05-26-describeinstances
Parameters:
RegionId: cn-hangzhou
Outputs:
instanceIds:
Type: List # 過濾出所有執行個體ID
ValueSelector: Instances.Instance[].InstanceId
instanceId:
Type: String # 過濾出單個執行個體ID
ValueSelector: Instances.Instance[].InstanceId
instanceNames:
Type: List # 過濾出所有執行個體名稱
ValueSelector: Instances.Instance[].InstanceName
instanceIdByCpu:
Type: String # 過濾出所有執行個體ID並按Cpu排序
ValueSelector: .Instances.Instance | sort_by(.Cpu) |.[].InstanceId
instanceIdByCreationTime:
Type: String # 過濾出所有執行個體ID並按CreationTime排序
ValueSelector: .Instances.Instance | sort_by(.CreationTime) |.[].InstanceId通過 JQ 過濾指定格式的 JSON
- Name: queryDisks
Action: 'ACS::ExecuteAPI'
Properties:
Service: ECS
API: DescribeDisks #API文檔:https://www.alibabacloud.com/help/zh/ecs/developer-reference/api-ecs-2014-05-26-describedisks
Parameters:
RegionId: cn-hangzhou
Outputs:
dataDisks:
Type: Json #過濾出資料盤資訊
ValueSelector: '.Disks.Disk|map( select(.Type == "data")|{"Category":(.Category),"Device": (.Device),"Size":(.Size),"DiskName":(.DiskName),"PerformanceLevel":(.PerformanceLevel)})'
systemDisk:
Type: Json #過濾出系統硬碟資訊
ValueSelector: '.Disks.Disk|map( select(.Type == "system")|{"Category":(.Category),"Device": (.Device),"Size":(.Size),"DiskName":(.DiskName),"PerformanceLevel":(.PerformanceLevel)})'進階用法
替換JSON中的Key
FormatVersion: OOS-2019-06-01
Tasks:
- Name: describeInstances
Action: ACS::ExecuteAPI
Properties:
Service: ECS
API: DescribeInstances #API文檔:https://www.alibabacloud.com/help/zh/ecs/developer-reference/api-ecs-2014-05-26-describeinstances
Parameters:
RegionId: cn-hangzhou
Outputs:
tags:
Type: List # 過濾出非 acs 開頭的 Tags 並把 TagKey 替換為 Key
ValueSelector: '.Instances.Instance[].Tags.Tag | map(select( .TagKey | test("^(?!acs).*"))) | .[] | {"Key": .TagKey, "Value": .TagValue}'按指定字元拼接字串
FormatVersion: OOS-2019-06-01
Tasks:
- Name: describeInstances
Action: ACS::ExecuteAPI
Properties:
Service: ECS
API: DescribeInstances #API文檔:https://www.alibabacloud.com/help/zh/ecs/developer-reference/api-ecs-2014-05-26-describeinstances
Parameters:
RegionId: cn-hangzhou
Outputs:
newInstanceName:
Type: List # 過濾出目標欄位並用指定字串拼接
ValueSelector: '.Instances.Instance[]|[.InstanceName,.InstanceId,.EipAddress.AllocationId]|.[1],(.|join(":"))'多個列表合并
FormatVersion: OOS-2019-06-01
Tasks:
- Name: describeInstances
Action: ACS::ExecuteAPI
Properties:
Service: ECS
API: DescribeInstances #API文檔:https://www.alibabacloud.com/help/zh/ecs/developer-reference/api-ecs-2014-05-26-describeinstances
Parameters:
RegionId: cn-hangzhou
Outputs:
newInstanceName:
Type: List # 過濾出目標欄位併合併到同一個List輸出
ValueSelector: '.Instances.Instance[] | .VpcAttributes.PrivateIpAddress.IpAddress + .InnerIpAddress.IpAddress + .PublicIpAddress.IpAddress'通過比較日期過濾出目標欄位
FormatVersion: OOS-2019-06-01
Tasks:
- Name: describeReservedInstances
Action: ACS::ExecuteAPI
Properties:
Service: ECS
API: DescribeReservedInstances # API文檔:https://www.alibabacloud.com/help/zh/ecs/developer-reference/api-ecs-2014-05-26-describereservedinstances
Parameters:
RegionId: cn-hangzho
Outputs:
reservedInstanceIds:
Type: List #通過到期時間過濾出目標欄位
ValueSelector: '.ReservedInstances.ReservedInstance[] | select(.ExpiredTime[0:11] == "{{ACS::CurrentDate}}") | .ReservedInstanceId'