用于批量元数据更新的 gcloud 命令

Gil*_*pie 0 bash xargs gcloud

我正在尝试编写一个 gcloud 命令,对计算引擎实例进行批量元数据更新。

通常我可以通过管道传输gcloud compute instances listxargs gcloud compute instances add-metadata. 但是,这会受到阻碍,因为由于某些无法解释的原因,即使计算实例名称似乎是全局唯一的,也add-metadata需要实例名称区域。因此,现在我被迫尝试将两条数据(名称和区域)传输到 add-metadata 命令。如果我不提供两者,我会得到:

ERROR: (gcloud.compute.instances.add-metadata) Underspecified resource [worker-1]. Specify the [--zone] flag.
Run Code Online (Sandbox Code Playgroud)

我准备放弃 bash/xargs 咒语并切换到 python,但我想我应该先检查这里。

我有这个命令:

gcloud compute instances list \
        --filter="name~'worker' AND zone~'us-central1'" \
        --format 'value(name,zone)'
Run Code Online (Sandbox Code Playgroud)

它返回类似:

worker-1    us-central1-c
worker-2    us-central1-c
worker-3    us-central1-c
worker-4    us-central1-c
Run Code Online (Sandbox Code Playgroud)

然后我需要将它们通过管道传输到如下命令中:

gcloud compute instances add-metadata --zone=[zone goes here] --metadata myvalue=true [instance name goes here]
Run Code Online (Sandbox Code Playgroud)

但事实证明,单独使用 xargs 是很棘手/烦人的。有没有更好或更简单的方法来完成我正在尝试的事情?