当您向 Deployment Manager 发出 API 请求时,Deployment Manager 会向其他 API 发出相应请求。 Google Cloud 例如,当您创建包含 Compute Engine 实例的部署时,Deployment Manager 会向 Compute Engine API 发送 instances.insert
请求。
创建、更新或删除部署,或者使用可能需要几分钟或更长时间才能完成的其他 API 方法时,发送到 Deployment Manager 的 API 请求会返回长时间运行的操作。
本页介绍了使用 Deployment Manager API 管理长时间运行的操作的准则。
准备工作
- 如果要使用本指南中的命令行示例,请安装 “gcloud” 命令行工具。
- 如果希望使用本指南中的 API 示例,请设置 API 访问权限。
可能会启动长时间运行的操作的方法包括:
insert
操作,例如deployments.insert()
、typeProviders.insert()
等。update
操作,例如deployments.update()
。delete
操作,例如deployments.delete()
。
在这些请求中,响应是操作资源,如下例所示:
{
"kind": "deploymentmanager#operation",
"id": "7123423453456654321", # generated ID
"name": "operation-11233234311678-587af2c0xyz9c-0987fa54-baccd59f", # generated name
"operationType": "insert",
"targetLink": "https://www.googleapis.com/deploymentmanager/v2/projects/example-project/global/deployments/wordpress-1",
"targetId": "5123321654456321123",
"status": "DONE", # possible values: RUNNING, PENDING, DONE
"user": "example@example.com",
"progress": 100,
"insertTime": "2019-04-29T11:08:32.190-07:00",
"startTime": "2019-04-29T11:08:32.200-07:00",
"endTime": "2019-04-29T11:09:38.176-07:00",
"selfLink": "https://www.googleapis.com/deploymentmanager/v2/projects/example-project/global/operations/operation-11233234311678-587af2c0xyz9c-0987fa54-baccd59f"
}
获取操作状态
如需检查操作的状态,请使用操作的 name
字段发出 operations.get()
请求,然后检查操作的 status
或 progress
。
当 status
为 DONE
、progress
为 100
且 error
对象为空时,表示部署已完成,资源可以使用了。
如果操作期间出现错误,这些错误会以以下格式列在 error
对象中:
"error": {
"errors": [
{
"code": "error code" # string,
"location": "location of the error" # string,
"message": "error message" # string
},
...
]
}
我们建议的最佳实践是,使用指数退避算法轮询操作状态。例如,在 5 秒后发出第一个请求,在 10 秒后发出下一个请求,在 20 秒后发出第三个请求,以此类推。我们建议将最大回退时间设置为几分钟。达到最大退避时间后,您无需继续增加退避时间。