谷歌API获取快照使用过滤器



我写了以下代码,这些代码向我返回快照列表,该列表具有特定字符串,但不会返回大小为0的快照,

https://cloud.google.com/compute/docs/reference/rest/v1/snapshots/list

this  API have following attributes:
  • project_id
  • 过滤器

我正在尝试基于正则表达式放置一些过滤器匹配所有名称中有"无形快照"的快照。

def snapshotlist():  
query = "name eq <string>.*"  
snaplist = compute.snapshots().list(project=project,filter=query).execute()  
snaplist = ast.literal_eval(json.dumps(snaplist))  
for snap in snaplist['items']:  
print(snap['name'])

上面的代码不返回大小为0的快照,有没有办法获得所有快照,不管大小是多少?

从快照文档中,对于可选参数的filter属性:

表达式必须指定字段名、比较运算符和要用于筛选的值。该值必须是字符串、数字或布尔值比较运算符必须是=!=><

虽然这意味着您无法执行与使用驱动器API类似的查询,例如q: "name contains 'some string'",但Snapshots#list方法似乎仍然支持通配符匹配。如果您无法成功编写适当的正则表达式,那么解决方案是收集Snapshot整个列表,然后使用您的语言的字符串和正则表达式方法来过滤输出。

def get_matching_snapshots(projectId: str, query='',
fields='id,nextPageToken,warning,items(id,name,description)'):
snaplist = []
params = {project: projectId,
filter: query,
fields: fields}
# Collect all pages of results
request = compute.snapshots().list(**params)
while request:
response = request.execute()
if 'items' in response:
snaplist.extend(response['items'])
if 'warning' in response:
pprint(response['warning'])
request = compute.snapshots().list_next(request, response)
return snaplist
# Use 'filter' parameter to restrict on server side:
name_fragment = "some required part of the name"
q = f'name = "{name_fragment}.*"'
pprint(get_matching_snapshots("some project id", q))
# get all, then apply restrictions after retrieval:
all_snapshots = get_matching_snapshots("some project id")
matches = []
rgx = re.compile('some regex')
for snap in all_snapshots:
# use rgx.match with the relevant snap property
...

您可能会发现查阅Compute API的Python文档或使用Python客户端的API Explorer:是有益的

  • snapshots()PyDoc
  • snapshots().list()Python API资源管理器

最新更新