格式化 gcloud compute instances 列表以获取单个元数据值

Format gcloud compute instances list to get single metadata value

作为某些 GCP 管理自动化的一部分,我正在尝试 运行 gcloud compute instances list 命令 return 一些实例属性,其中一个是单个元数据 属性.我在文档中找不到如何 return 只有一个元数据 属性.

根据文档,我认为这是正确的,但我没有得到任何元数据属性 returned...

gcloud compute instances list --filter="name~^my-machine.*-type" --zones=zone1,zone2,zone3 --format="json(name,metadata.items.MY_VALUE)"

如何 return 单个元数据值?

Eesh...这显而易见;-)

KEY=...

gcloud compute instances list \
--project=${PROJECT} \
--format="value(metadata.items.extract("${KEY}"))"

extract

我不确定它为什么有效。

就我而言:

gcloud compute instances list \
--project=${PROJECT} \
--format="value(metadata.items)"

产量:

{'key': 'gce-container-declaration', 'value': "..."};
{'key': 'google-logging-enabled', 'value': 'true'}

NOTE a semi-colon separated list of JSON objects

所以,metadata.items 似乎是 JSON 个对象的列表 {"key": $KEY, "value": $VALUE},我认为这就是为什么你不能使用某些东西遍历这些值的原因...... metadata.items.key["google-logging-enabled"] 或类似的。

当我最初使用 YAML 时,这并不明显,我认为,即使 YAML 看起来很扁平,但项目是嵌入的并且 --format=yaml 正在做一些聪明的事情:

gcloud compute instances list \
--project=${PROJECT} \
--format="yaml(metadata.items)"
---
metadata:
  items:
  - key: gce-container-declaration
    value: |-
      ...
  - key: google-logging-enabled
    value: 'true'

但是:

gcloud compute instances list \
--project=${PROJECT} \
--format="value(metadata.items.extract("gce-container-declaration"))"

产量:

spec:
  containers:
    - name: instance-1
      image: ...
      stdin: false
      tty: false
  restartPolicy: Always