我在脚本中使用命令gcloud compute instances list,但担心确切的输出格式不是静态的。我该怎么办?

最佳答案

您应该使用大多数--format命令可用的gcloud标志。

例如,如果您想获得与当前格式(截至撰写本答案时)完全相同的输出,则可以运行:

$ gcloud compute instances list --format="table(
    name,
    zone.basename(),
    machineType.basename(),
    scheduling.preemptible.yesno(yes=true, no=''),
    networkInterfaces[0].networkIP:label=INTERNAL_IP,
    networkInterfaces[0].accessConfigs[0].natIP:label=EXTERNAL_IP,
    status
)"


即使命令的默认输出发生了变化,此命令的输出也不会在版本之间更改(除非格式化的资源已更改;这应该很少)。1在命令中显示资源的默认格式尚在进行中。2

您还可以为机器可读的输出指定类似YAML或JSON的格式:

$ gcloud compute instances list --format=yaml
$ gcloud compute instances list --format=json


请注意,此输出包含的信息比此命令的缺省输出中提供的信息多得多。这是构造自定义格式时必须使用的信息。

CSV是另一种格式选项。与table一样,它也需要一个投影-有关如何打印每一行的规范。3

$ gcloud compute instances list --format="csv(name,zone,status)"
name,zone,status
example-instance,us-central1-f,RUNNING
...


有关gcloud格式化功能的更多信息,请参见gcloud topic formatsgcloud topic projections的输出。




您可以通过运行gcloud compute instances list --format=flattened来查看所有可能的字段。
对于某些命令,例如gcloud beta test android locales list,您可以传递--verbosity=INFO标志并查找INFO: Display format
这是因为CSV数据无法像JSON或YAML一样嵌套,并且正在打印的数据结构可能会嵌套。

10-07 16:10
查看更多