我想在脚本中使用`gcloud`的输出,但格式会发生变化。我该怎么办?

时间:2016-01-04 21:56:20

标签: gcloud

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

1 个答案:

答案 0 :(得分:22)

您应该使用适用于大多数--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的输出。

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