如何使用 Python "Cloud SQL Admin API"获取新创建的备份的 ID?



我正在使用云SQL管理API备份运行实例编写脚本,该实例具有以下方法:

1. delete(project=*, instance=*, id=*)
2. get(project=*, instance=*, id=*)
3. insert(project=*, instance=*, body=*)
4. list(project=*, instance=*, maxResults=None, pageToken=None) 
5. list_next(previous_request=*, previous_response=*)

以下是API的链接:https://developers.google.com/resources/api-libraries/documentation/sqladmin/v1beta4/python/latest/sqladmin_v1beta4.backupRuns.html

我在API中发现奇怪的是insert()方法,当我们插入/创建一个新的备份调用API的这个方法时,它返回以下响应:

{'insertTime': '2018-12-26T06:48:35.675Z',
'kind': 'sql#operation',
'name': 'some-random-string,
'operationType': 'BACKUP_VOLUME',
'selfLink': 'https://www.googleapis.com/sql/v1beta4/projects/project-name/operations/some-random-string',
'status': 'PENDING',
'targetId': 'cloud-instance-name',
'targetLink': 'https://www.googleapis.com/sql/v1beta4/projects/project-name/instances/cloud-instance-name',
'targetProject': 'project-name',
'user': 'some-user@project.iam.gserviceaccount.com'}

这看起来像是一个异步调用,其中状态在几秒钟后从PENDING更改为SUCCESSFUL。现在,如果我想继续检查实例,直到其状态为SUCCESSFUL,我将需要新建实例的_id_(调用get()方法)

我唯一能弄清楚的方法是调用list()方法,用上面响应的insertTime检查列表项的enqueuedTime并获取id,然后调用get()方法获取状态。这对我来说就像是一次黑客攻击,有没有更好的方法来观察状态,直到成功

我发现这个API也令人困惑。insert方法返回一个sql#operation对象,它有一个GUID类型的id-字段。listget方法使用sql#backupRun对象,并且它们具有数据类型为long的id。我还没有找到绘制这些地图的方法。

您可以使用description字段来标识您的备份Run。这不是最佳的,但可能对你有用。在插入方法主体参数的description字段中指定一个唯一值。然后,您可以使用描述筛选列表方法结果,除了enqueuedTime之外,还可以筛选type='ON_DEMAND'。列表结果按时间倒序排列,因此您应该在列表的开头找到正确的项目。

insert方法的文档中有一个id参数body参数,但设置它会引发错误。API仍处于测试阶段。希望这个API成熟和变化,这样我们就可以从插入链接到获得。

Google API将每个请求都视为一个操作,可以从googleapiclient.discovery构建的服务的操作()中检索。例如:

from googleapiclient import discovery
service = discovery.build('sqladmin', 'v1beta4')
#Just insert a backup for an SQL instance or any other operation
insert_response = service.backupRuns().insert(project=<project-id>,instance=<instance-id>, body={}).execute()
#Get the opepration to check the status
insert_operation = service.operations().get(project=<project-id>,operation=insert_response['name']).execute()

insert_opertation可用于检查操作的当前状态。

以下是insert_responseinsert_operation的外观:

print(insert_response)
{'insertTime': '2019-01-08T13:04:31.941Z',                                                                                                                              
'kind': 'sql#operation',                                                                                                                                               
'name': '<unique-name-of-the-operation>',                                                                                                                        
'operationType': 'BACKUP_VOLUME',                                                                                                                                      
'selfLink': 'https://www.googleapis.com/sql/v1beta4/projects/<project-id>/operations/<unique-name-of-the-operation>',                                                
'startTime': '2019-01-08T13:04:32.052Z',                                                                                                                               
'status': 'RUNNING',                                                                                                                                                   
'targetId': '<instance-name>',                                                                                                                                   
'targetLink': 'https://www.googleapis.com/sql/v1beta4/projects/<project-id>/instances/<instance-name>',                                                              
'targetProject': '<project-id>',                                                                                                                                           
'user': '<user>'}
print(insert_operation)
{'endTime': '2018-12-26T13:07:08.746Z',
'enqueuedTime': '2018-12-26T13:06:33.563Z',
'id': '<operation-id>',
'instance': '<instance-name>',
'kind': 'sql#backupRun',
'selfLink': 'https://www.googleapis.com/sql/v1beta4/projects/<project-id>/instances/<instance-name>/backupRuns/<operation-id>',
'startTime': '2018-12-26T13:06:33.563Z',
'status': 'SUCCESSFUL',
'type': 'ON_DEMAND',
'windowStartTime': '2018-12-26T13:06:33.563Z'}

CCD_ 16可用于获得使用在响应中返回CCD_ 17的API执行的任何操作。

有关详细信息,请参阅此链接。

相关内容

  • 没有找到相关文章

最新更新