问题描述
我试图列出与我的帐户关联的所有项目下存在的所有VM,包括其操作系统以及我可以找到的任何其他标签。我已经有了项目列表,所以我正在使用的是:
for project in project_df["project_id"]:
subprocess.run(["gcloud config set project {}".format(project)],shell=True)
cp = subprocess.run(["gcloud compute instances os-inventory list-instances"],shell=True)
print(cp)
这确实有效,但是我得到的唯一标签是:
NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS
如何获取VM的操作系统?还有更多标签吗?我尝试使用:
GET https://compute.googleapis.com/compute/v1/projects/{project}/aggregated/instances,但没有成功,因为我无法使用requests
或urllib
。
我还缺少sdk或其他gcloud命令提供的其他python库吗?
谢谢
解决方法
您可以使用--format
flag来转换输出。
有无限可能,包括:
gcloud compute instances list \
--project=${PROJECT} \
--format="value(name,status,zone,id,kind)"
gcloud compute instances list \
--project=${PROJECT} \
--format="json"
gcloud compute instances list \
--project=${PROJECT} \
--format="yaml"
但是,最好使用Compute API而不是使用Python内部的shell为您运行命令。
gcloud
CLI的基础是Compute API,直接使用它可以为您带来好处,即可以使用Python数据类型直接配置它并接收结果。
有关基本示例,请参见Google文档中的Python example。
,根据@DazWilkin的回答,适用于我的情况的是:
我运行了gcloud compute instances list --format=flattened
,向我显示了很多(如果不是全部)可能的标签。然后,我发现当您运行gcloud compute instances list
时没有出现的内容,然后运行以下命令来获取我想要的内容:
gcloud compute instances list --format="csv(name,labels.compute_machine_type,canIpForward,labels.os,creationTimestamp,status)" > compute_info.csv
通过这种方式,我还避免使用compute API。