
# 执行执行计划
#### 功能介绍
执行执行计划（ApplyExecutionPlan）
此API用于执行一个执行计划
- 当执行请求接受后，执行计划状态将变为*APPLY_IN_PROGRESS*，后台会进行异步处理。
  
- 当执行结束后，执行计划状态将变为*APPLIED*。
  
- 用户可以调用GetStackMetadata查询资源栈的状态（status）来跟踪资源栈部署情况以及确认本次执行结果是否成功。
  
- 执行执行计划时，用户将模板中定义的资源删除（包括Import定义的资源），会触发实际资源的删除。
  
如果不希望通过执行计划进行部署操作，也可以选择调用DeployStack进行直接部署
关于执行计划的过期失效：
1. 如果指定资源栈下有多个执行计划，则在执行某个执行计划后（无论结果是否成功），剩余所有的执行计划将过期失效；
   
2. 如果调用ApplyExecutionPlan时，指定的执行计划已经过期失效，则返回403
   
如果资源栈状态处于非终态（即以*IN_PROGRESS*结尾，详细见下方）状态时，则不允许执行执行计划，并返回403。非终态状态包括但不限于以下状态：
- 正在部署（DEPLOYMENT_IN_PROGRESS）
  
- 正在删除（DELETION_IN_PROGRESS）
  
- 正在回滚（ROLLBACK_IN_PROGRESS）
  
 
#### 调试
您可以在[API Explorer](https://console.huaweicloud.com/apiexplorer/#/openapi/AOS/doc?api=ApplyExecutionPlan)中调试该接口，支持自动认证鉴权。API Explorer可以自动生成SDK代码示例，并提供SDK代码示例调试功能。
#### URI
POST /v1/{project_id}/stacks/{stack_name}/execution-plans/{execution_plan_name}
表1路径参数 
| 参数                  | 是否必选 | 参数类型   | 描述                                                                                                                                                                                                                                                                                                                                                                     |
|:---|:---|:---|:---|
| project_id          | 是    | String | 项目ID，可以从调用API处获取，也可以从控制台获取。 [项目ID获取方式](https://support.huaweicloud.com/api-ticket/ticket_api_20002.html) 最小长度：**3** 最大长度：**64** |
| stack_name          | 是    | String | 资源栈的名称。此名字在domain_id+区域+project_id下应唯一，可以使用中文、大小写英文、数字、下划线、中划线。首字符需为中文或者英文，区分大小写。 最小长度：**1** 最大长度：**128**                                                                                                    |
| execution_plan_name | 是    | String | 执行计划的名称。此名字在domain_id+区域+project_id+stack_id下应唯一，可以使用中文、大小写英文、数字、下划线、中划线。首字符需为中文或者英文，区分大小写。 最小长度：**1** 最大长度：**128**                                                                                          |
   
#### 请求参数
表2请求Header参数 
| 参数                | 是否必选 | 参数类型   | 描述                                                                                                                                                                                                                    |
|:---|:---|:---|:---|
| Client-Request-Id | 是    | String | 用户指定的，对于此请求的唯一ID，用于定位某个请求，推荐使用UUID 最小长度：**36** 最大长度：**128** |
   
表3请求Body参数 
| 参数                | 是否必选 | 参数类型   | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
|:---|:---|:---|:---|
| execution_plan_id | 否    | String | 执行计划（execution_plan）的唯一ID。 此Id由资源编排服务在生成执行计划的时候生成，为UUID。 由于执行计划名仅仅在同一时间下唯一，即用户允许先生成一个叫HelloWorld的执行计划，删除，再重新创建一个同名执行计划。 对于团队并行开发，用户可能希望确保，当前我操作的执行计划就是我认为的那个，而不是其他队友删除后创建的同名执行计划。因此，使用ID就可以做到强匹配。 资源编排服务保证每次创建的执行计划所对应的ID都不相同，更新不会影响ID。如果给予的execution_plan_id和当前执行计划的ID不一致，则返回400 **注意：** - 创建执行计划后，资源编排服务持久化请求并立即返回，客户端不等待请求最终处理完成，用户无法实时感知请求处理结果   - 资源编排服务最终会将异步部署请求排队，在服务端空闲的情况下逐个处理。用户最大等待时长为1小时    最小长度：**36** 最大长度：**36** |
| stack_id          | 否    | String | 资源栈（stack）的唯一ID。 此Id由资源编排服务在生成资源栈的时候生成，为UUID。 由于资源栈名仅仅在同一时间下唯一，即用户允许先生成一个叫HelloWorld的资源栈，删除，再重新创建一个同名资源栈。 对于团队并行开发，用户可能希望确保，当前我操作的资源栈就是我认为的那个，而不是其他队友删除后创建的同名资源栈。因此，使用ID就可以做到强匹配。 资源编排服务保证每次创建的资源栈所对应的ID都不相同，更新不会影响ID。如果给予的stack_id和当前资源栈的ID不一致，则返回400 最小长度：**36** 最大长度：**36**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
   
#### 响应参数
**状态码：202**
表4响应Body参数 
| 参数            | 参数类型   | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
|:---|:---|:---|
| deployment_id | String | 标识部署的唯一ID，此ID由资源编排服务在触发部署、回滚等操作时生成，为UUID。 接受请求，进行异步处理。可以调用GetStackMetadata来获取异步请求的部署状态 **注意：** - 部署资源栈后，资源编排服务持久化请求并立即返回，客户端不等待请求最终处理完成，用户无法实时感知请求处理结果   - 资源编排服务最终会将异步部署请求排队，在服务端空闲的情况下逐个处理。用户最大等待时长为6小时    |
   
**状态码：400**
表5响应Body参数 
| 参数                            | 参数类型                                                                                                   | 描述                                                                                                                                                                                    |
|:---|:---|:---|
| error_code                    | String                                                                                                 | 响应码 最小长度：**11** 最大长度：**11** |
| error_msg                     | String                                                                                                 | 响应消息                                                                                                                                                                                  |
| encoded_authorization_message | String                                                                                                 | 包含有关未经授权请求的信息。                                                                                                                                                                        |
| details                       | Array of [Detail] objects | 权限拒绝时服务返回的详细错误信息。                                                                                                                                                                     |
   
 表6Detail 
| 参数         | 参数类型   | 描述   |
|:---|:---|:---|
| error_code | String | 响应码  |
| error_msg  | String | 响应消息 |
   
**状态码：401**
表7响应Body参数 
| 参数                            | 参数类型                                                                                                     | 描述                                                                                                                                                                                    |
|:---|:---|:---|
| error_code                    | String                                                                                                   | 响应码 最小长度：**11** 最大长度：**11** |
| error_msg                     | String                                                                                                   | 响应消息                                                                                                                                                                                  |
| encoded_authorization_message | String                                                                                                   | 包含有关未经授权请求的信息。                                                                                                                                                                        |
| details                       | Array of [Detail] objects | 权限拒绝时服务返回的详细错误信息。                                                                                                                                                                     |
   
 表8Detail 
| 参数         | 参数类型   | 描述   |
|:---|:---|:---|
| error_code | String | 响应码  |
| error_msg  | String | 响应消息 |
   
**状态码：403**
表9响应Body参数 
| 参数                            | 参数类型                                                                                                     | 描述                                                                                                                                                                                    |
|:---|:---|:---|
| error_code                    | String                                                                                                   | 响应码 最小长度：**11** 最大长度：**11** |
| error_msg                     | String                                                                                                   | 响应消息                                                                                                                                                                                  |
| encoded_authorization_message | String                                                                                                   | 包含有关未经授权请求的信息。                                                                                                                                                                        |
| details                       | Array of [Detail] objects | 权限拒绝时服务返回的详细错误信息。                                                                                                                                                                     |
   
 表10Detail 
| 参数         | 参数类型   | 描述   |
|:---|:---|:---|
| error_code | String | 响应码  |
| error_msg  | String | 响应消息 |
   
**状态码：404**
表11响应Body参数 
| 参数                            | 参数类型                                                                                                     | 描述                                                                                                                                                                                    |
|:---|:---|:---|
| error_code                    | String                                                                                                   | 响应码 最小长度：**11** 最大长度：**11** |
| error_msg                     | String                                                                                                   | 响应消息                                                                                                                                                                                  |
| encoded_authorization_message | String                                                                                                   | 包含有关未经授权请求的信息。                                                                                                                                                                        |
| details                       | Array of [Detail] objects | 权限拒绝时服务返回的详细错误信息。                                                                                                                                                                     |
   
 表12Detail 
| 参数         | 参数类型   | 描述   |
|:---|:---|:---|
| error_code | String | 响应码  |
| error_msg  | String | 响应消息 |
   
**状态码：409**
表13响应Body参数 
| 参数                            | 参数类型                                                                                                     | 描述                                                                                                                                                                                    |
|:---|:---|:---|
| error_code                    | String                                                                                                   | 响应码 最小长度：**11** 最大长度：**11** |
| error_msg                     | String                                                                                                   | 响应消息                                                                                                                                                                                  |
| encoded_authorization_message | String                                                                                                   | 包含有关未经授权请求的信息。                                                                                                                                                                        |
| details                       | Array of [Detail] objects | 权限拒绝时服务返回的详细错误信息。                                                                                                                                                                     |
   
 表14Detail 
| 参数         | 参数类型   | 描述   |
|:---|:---|:---|
| error_code | String | 响应码  |
| error_msg  | String | 响应消息 |
   
**状态码：429**
表15响应Body参数 
| 参数                            | 参数类型                                                                                                     | 描述                                                                                                                                                                                    |
|:---|:---|:---|
| error_code                    | String                                                                                                   | 响应码 最小长度：**11** 最大长度：**11** |
| error_msg                     | String                                                                                                   | 响应消息                                                                                                                                                                                  |
| encoded_authorization_message | String                                                                                                   | 包含有关未经授权请求的信息。                                                                                                                                                                        |
| details                       | Array of [Detail] objects | 权限拒绝时服务返回的详细错误信息。                                                                                                                                                                     |
   
 表16Detail 
| 参数         | 参数类型   | 描述   |
|:---|:---|:---|
| error_code | String | 响应码  |
| error_msg  | String | 响应消息 |
   
**状态码：500**
表17响应Body参数 
| 参数                            | 参数类型                                                                                                     | 描述                                                                                                                                                                                    |
|:---|:---|:---|
| error_code                    | String                                                                                                   | 响应码 最小长度：**11** 最大长度：**11** |
| error_msg                     | String                                                                                                   | 响应消息                                                                                                                                                                                  |
| encoded_authorization_message | String                                                                                                   | 包含有关未经授权请求的信息。                                                                                                                                                                        |
| details                       | Array of [Detail] objects | 权限拒绝时服务返回的详细错误信息。                                                                                                                                                                     |
   
 表18Detail 
| 参数         | 参数类型   | 描述   |
|:---|:---|:---|
| error_code | String | 响应码  |
| error_msg  | String | 响应消息 |
   
#### 请求示例
- 执行指定资源栈下的执行计划
  ```
  POST https://{endpoint}/v1/ba2b9930c977f71edaeaa3a5e96a8ff1/stacks/my_hello_world_stack/execution-plans/my_first_execution_plan
  ```
  
- 执行指定资源栈下的执行计划，并提供资源栈id以校验是否与当前资源栈匹配
  ```
  POST https://{endpoint}/v1/ba2b9930c977f71edaeaa3a5e96a8ff1/stacks/my_hello_world_stack/execution-plans/my_first_execution_plan
  {
    "stack_id" : "f689e9fd-97e7-4185-bd8a-7d5f708d45d7"
  }
  ```
  
- 执行指定资源栈下的执行计划，并提供执行计划id以校验是否与当前执行计划匹配
  ```
  POST https://{endpoint}/v1/ba2b9930c977f71edaeaa3a5e96a8ff1/stacks/my_hello_world_stack/execution-plans/my_first_execution_plan
  {
    "execution_plan_id" : "fb5e781e-a27d-46e2-9954-242753857a9f"
  }
  ```
  
- 执行指定资源栈下的执行计划，并提供资源栈id和执行计划id以校验是否与当前资源栈匹配以及是否与当前执行计划匹配
  ```
  POST https://{endpoint}/v1/ba2b9930c977f71edaeaa3a5e96a8ff1/stacks/my_hello_world_stack/execution-plans/my_first_execution_plan
  {
    "stack_id" : "f689e9fd-97e7-4185-bd8a-7d5f708d45d7",
    "execution_plan_id" : "fb5e781e-a27d-46e2-9954-242753857a9f"
  }
  ```
  
 
#### 响应示例
**状态码：202**
请求接受，异步处理
```
{
  "deployment_id" : "07e21c3e-d33c-4513-9d0f-e9e673817772"
}
```
#### 状态码
| 状态码 | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
|:---|:---|
| 202 | 请求接受，异步处理                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| 400 | 用户请求非法                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| 401 | 用户身份认证失败                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| 403 | 1. 用户无权限调用此API   2. 资源栈状态非法   3. 执行计划已过期失效    |
| 404 | 1. 资源栈不存在   2. 执行计划不存在                                                                                                                                                                                                                                                                                                              |
| 409 | 执行冲突，另一个请求正在操作此执行计划                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| 429 | 请求数量过多                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| 500 | 服务器内部错误                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
   
