gcloud discovery api - 没有nextPageToken的分页?

时间:2018-04-17 20:38:46

标签: python pagination google-compute-engine gcloud

我目前正在尝试列出我在Google计算项目中拥有的所有磁盘和图片:

compute = googleapiclient.discovery.build('compute','v1')
resp = compute.instances().list(project=PROJECT_NAME).execute()
items = resp["items"]
# do something with items...
while "nextPageToken" in resp:
    resp = compute.instances().list(project=PROJECT_NAME, pageToken=resp["nextPageToken"])
    items = resp["items"]
    # do something with items...

我知道这不会归还我拥有的所有图像。我查看了输出,它丢失了几十个。

我试过打印:

print(list(resp.keys()))

我只得到这些钥匙:

[u'items', u'kind', u'id', u'selfLink']

这意味着nextPageToken永远不会给我。

1 个答案:

答案 0 :(得分:0)

compute.instances.list是区域性的。您可能只获得一个区域的结果。试试gcloud中的等价物:

gcloud compute instances list --log-http 2>&1 | grep ^GET

您将看到区域列表请求,然后是每个区域的实例列表请求。 gcloud / Cloud SDK有一个区域(和区域)聚合器模块,它封装了这个模块,并在每个区域内处理pageToken。