更新时间:2024-08-20 GMT+08:00

指定结果的输出格式

命令中使用“--cli-query”传入JMESPath表达式,对结果执行JMESPath查询,方便提炼原返回结果中的关键信息;“--cli-output”指定响应数据的输出格式;“--cli-output-num”指定当使用table格式输出时,是否打印行号。

输出顺序

使用“--cli-query”指定的JMESPath表达式不同,输出的结果中各参数的排列顺序可能不同。部分表达式的输出结果不会带有输出数据的属性名(即参数的key值),故用户需对输出数据的顺序有所把握,以便于数据处理。不同类型的JMESPath表达式,输出结果的顺序如下表所示:

表1 不同JMESPath表达式的数据输出顺序

JMESPath表达式类型

JMESPath表达式示例

json/table格式输出时,是否带有属性名(即参数的key值)

tsv格式输出时,是否带有属性名(即参数的key值)

输出数据的顺序

示例

表达式指定至对象层级

--cli-query="items[0]"

以该对象各属性名的字典顺序,输出其对应的值

示例1

表达式指定至对象的属性层级,且未对属性名重命名

--cli-query="items[0].items[0].[spec.flavor,metadata.uid]"

以JMESPath表达式中指定各属性名的顺序,输出其对应的值

示例2

表达式指定至对象的属性层级

,且对属性名进行了重命名

--cli-query="items[0].{Flavor:spec.flavor,ClusterID:metadata.uid}"

以其重命名后的各属性名的字典顺序,输出其对应的值

示例3

以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时:
    将以json格式输出结果,如下:
    hcloud configure list --cli-output=json --cli-query="profiles[].{Name:name,Mode:mode,Ak:accessKeyId,SK:secretAccessKey}"
    [
      {
        "Ak": "8NV****IOV",
        "Mode": "AKSK",
        "Name": "test",
        "SK": "****"
      },
      {
        "Ak": "H9N****MXW",
        "Mode": "AKSK",
        "Name": "default",
        "SK": "****"
      }
    ]
  • 当“--cli-output”的取值为table时:

    将以table格式输出结果,如下:

    当指定“--cli-output”的取值为table,可以同时使用“--cli-output-num”指定是否打印行号:

  • 当“--cli-output”的取值为tsv时:

    将以tsv格式输出结果,如下:

    tsv输出格式返回制表符和换行分隔的数据值,不包含额外的符号,方便将输出结果用于其他命令。因tsv的输出结果中不包含数据表头,故用户在使用时需把握不同类型的JMESPath表达式输出数据的顺序,防止数据用于其他命令时出现混乱,详情请参考不同类型JMESPath表达式的数据输出顺序

    使用tsv格式输出,若jMESPath表达式中指定了多个属性名,且未对属性名重命名,则当其中某个或多个属性名被单独用“[]”括起来时,该属性将在输出时被换行至新的一行输出,如下:

    在上图的示例中,指定输出属性为:name,mode,accessKeyId,secretAccessKey。且其中的name被指定以新的一行输出。按照属性被指定时的顺序,第一行输出的分别为mode,accessKeyId,secretAccessKey的值,第二行输出的是name值。

点此了解关于“--cli-query”,“--cli-output”,“--cli-output-num”使用时的其他注意事项。