指定结果的输出格式
命令中使用“--cli-query”传入JMESPath表达式,对结果执行JMESPath查询,方便提炼原返回结果中的关键信息;“--cli-output”指定响应数据的输出格式;“--cli-output-num”指定当使用table格式输出时,是否打印行号。
输出顺序
使用“--cli-query”指定的JMESPath表达式不同,输出的结果中各参数的排列顺序可能不同。部分表达式的输出结果不会带有输出数据的属性名(即参数的key值),故用户需对输出数据的顺序有所把握,以便于数据处理。不同类型的JMESPath表达式,输出结果的顺序如下表所示:
JMESPath表达式类型 |
JMESPath表达式示例 |
json/table格式输出时,是否带有属性名(即参数的key值) |
tsv格式输出时,是否带有属性名(即参数的key值) |
输出数据的顺序 |
示例 |
---|---|---|---|---|---|
表达式指定至对象层级 |
--cli-query="items[0]" |
是 |
否 |
以该对象各属性名的字典顺序,输出其对应的值 |
|
表达式指定至对象的属性层级,且未对属性名重命名 |
--cli-query="items[0].items[0].[spec.flavor,metadata.uid]" |
否 |
否 |
以JMESPath表达式中指定各属性名的顺序,输出其对应的值 |
|
表达式指定至对象的属性层级 ,且对属性名进行了重命名 |
--cli-query="items[0].{Flavor:spec.flavor,ClusterID:metadata.uid}" |
是 |
否 |
以其重命名后的各属性名的字典顺序,输出其对应的值 |
以json输出格式为例,示范不同JMESPath表达式的数据输出顺序:
- 示例1:
指定至对象层级,KooCLI会以该对象各属性名的字典顺序,输出其对应的值。在此示例中指定至对象"items[0]",该对象中各属性按字典顺序排序后为:apiVersion,kind,metadata,spec,status。因此输出结果如下:
hcloud CCE ListClusters --cli-region="ap-southeast-1" --type="VirtualMachine" --project_id="0dd8cb****************19b5a84546" --cli-query="items[0]" { "apiVersion": "v3", "kind": "Cluster", "metadata": { "creationTimestamp": "2022-05-13 08:51:58.252509 +0000 UTC", "labels": { "FeatureGates": "elbv3," }, "name": "github-*****-****", "uid": "f288****-****-****-****-****ac101534", "updateTimestamp": "2022-05-13 09:10:06.395875 +0000 UTC" }, "spec": { "authentication": { "authenticatingProxy": {}, "mode": "rbac" }, "az": "multi_az", "billingMode": 0, "category": "CCE", "containerNetwork": { "cidr": "10.*.*.*/**", "mode": "vpc-router" }, "eniNetwork": {}, "extendParam": { "alpha.cce/fixPoolMask": "25", "kubernetes.io/cpuManagerPolicy": "", "upgradefrom": "" }, "flavor": "cce.s2.small", "hostNetwork": { "SecurityGroup": "653e****-****-****-****-****6a23eb7e", "subnet": "d5df****-****-****-****-****4955c724", "vpc": "c865****-****-****-****-****efe7e8d8" }, "kubeProxyMode": "iptables", "kubernetesSvcIpRange": "10.***.*.*/**", "masters": [ { "availabilityZone": "ap-southeast-1b" }, { "availabilityZone": "ap-southeast-1a" } ], "supportIstio": true, "type": "VirtualMachine", "version": "v1.19.10-r0" }, "status": { "endpoints": [ { "type": "Internal", "url": "https://192.***.*.***:5443" }, { "type": "External", "url": "https://121.**.**.***:5443" } ], "phase": "Available" } }
- 示例2:
指定至对象的属性层级,且未对属性名重命名,KooCLI会以指定各属性名的顺序,输出其对应的值。在此示例中指定至对象"items[0]"的两个对象属性的子属性,表达式"items[0].[spec.flavor,metadata.uid]"中先指定了其spec对象属性的flavor属性,再指定了其metadata对象属性的uid属性,因此输出结果中,先输出spec.flavor的值,再输出metadata.uid的值,结果如下:
hcloud CCE ListClusters --cli-region="ap-southeast-1" --type="VirtualMachine" --project_id="0dd8cb****************19b5a84546" --cli-query="items[0].[spec.flavor,metadata.uid]" [ "cce.s2.small", "f288****-****-****-****-****ac101534" ]
- 示例3:
指定至对象的属性层级,且对属性名进行了重命名,KooCLI会以重命名后的各属性名的字典顺序,输出其对应的值。在此示例中指定至对象"items[0]"的两个对象属性的子属性,表达式"items[0].{Flavor:spec.flavor,ClusterID:metadata.uid}"中,将spec对象属性的flavor属性重命名为Flavor,将metadata对象属性的uid属性重命名为ClusterID。按字典顺序排序其重命名后的属性为:ClusterID,Flavor。因此输出结果如下:
hcloud CCE ListClusters --cli-region="ap-southeast-1" --type="VirtualMachine" --project_id="0dd8cb****************19b5a84546" --cli-query="items[0].{Flavor:spec.flavor,ClusterID:metadata.uid}" { "ClusterID": "f288****-****-****-****-****ac101534", "Flavor": "cce.s2.small" }
输出格式
使用“--cli-output”指定输出格式,“--cli-output”的取值可以为json,table,tsv其中之一。
- 当“--cli-output”的取值为json时:
- 当“--cli-output”的取值为table时:
当指定“--cli-output”的取值为table,可以同时使用“--cli-output-num”指定是否打印行号:
- 当“--cli-output”的取值为tsv时:
tsv输出格式返回制表符和换行分隔的数据值,不包含额外的符号,方便将输出结果用于其他命令。因tsv的输出结果中不包含数据表头,故用户在使用时需把握不同类型的JMESPath表达式输出数据的顺序,防止数据用于其他命令时出现混乱,详情请参考不同类型JMESPath表达式的数据输出顺序。
使用tsv格式输出,若jMESPath表达式中指定了多个属性名,且未对属性名重命名,则当其中某个或多个属性名被单独用“[]”括起来时,该属性将在输出时被换行至新的一行输出,如下:
在上图的示例中,指定输出属性为:name,mode,accessKeyId,secretAccessKey。且其中的name被指定以新的一行输出。按照属性被指定时的顺序,第一行输出的分别为mode,accessKeyId,secretAccessKey的值,第二行输出的是name值。
可点此了解关于“--cli-query”,“--cli-output”,“--cli-output-num”使用时的其他注意事项。