我正在使用云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
-字段。list
和get
方法使用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_response
和insert_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执行的任何操作。
有关详细信息,请参阅此链接。