
# 获取资源栈模板
#### 功能介绍
获取资源栈模板（GetStackTemplate）
此API用于获取资源栈最近一次部署终态使用的模板。
注：
当资源栈状态处于非终态（即以*IN_PROGRESS*结尾，详细见下方）状态时，资源栈处于转变阶段，此API获取资源栈上一次部署使用的模板。
只有当资源栈状态处于终态（即以*COMPLETE* 或*FAILED*结尾，详细见下方）时，此API获取当前最新一次部署使用的模板。CREATION_COMPLETE除外，此时资源栈没有模板，返回404，并提示模板不存在
非终态状态包括但不限于以下状态：
- 正在部署（DEPLOYMENT_IN_PROGRESS）
  
- 正在回滚（ROLLBACK_IN_PROGRESS）
  
- 正在删除（DELETION_IN_PROGRESS）
  
终态状态包括但不限于以下状态：
- 生成空资源栈完成（CREATION_COMPLETE）
  
- 部署失败（DEPLOYMENT_FAILED）
  
- 部署完成（DEPLOYMENT_COMPLETE）
  
- 回滚失败（ROLLBACK_FAILED）
  
- 回滚完成（ROLLBACK_COMPLETE）
  
- 删除失败（DELETION_FAILED）
  
如果获取成功，则以临时重定向形式返回模板下载链接（OBS Pre Signed地址，有效期为5分钟），大多数的客户端会进行自动重定向并下载模板；
如果未进行自动重定向，请参考HTTP的重定向规则获取模板下载链接，手动下载模板；
若指定 encrypt_kms_key_id 启用了模板加密功能，请确保当前账号身份拥有主密钥的 kms:dek:decrypt（解密数据密钥） 访问权限。
#### 调试
您可以在[API Explorer](https://console.huaweicloud.com/apiexplorer/#/openapi/AOS/doc?api=GetStackTemplate)中调试该接口，支持自动认证鉴权。API Explorer可以自动生成SDK代码示例，并提供SDK代码示例调试功能。
#### URI
GET /v1/{project_id}/stacks/{stack_name}/templates
表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**                                                                                                    |
   
表2Query参数 
| 参数                            | 是否必选 | 参数类型             | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
|:---|:---|:---|:---|
| stack_id                      | 否    | String           | 资源栈（stack）的唯一ID。 此ID由资源编排服务在生成资源栈的时候生成，为UUID。 由于资源栈名仅仅在同一时间下唯一，即用户允许先生成一个叫HelloWorld的资源栈，删除，再重新创建一个同名资源栈。 对于团队并行开发，用户可能希望确保，当前我操作的资源栈就是我认为的那个，而不是其他队友删除后创建的同名资源栈。因此，使用ID就可以做到强匹配。 资源编排服务保证每次创建的资源栈所对应的ID都不相同，更新不会影响ID。如果给予的stack_id和当前资源栈的ID不一致，则返回400 最小长度：**36** 最大长度：**36** |
| access_control_source_ips     | 否    | Array of strings | 允许访问资源栈模板的source ip列表，source ip应是具有CIDR表示法且带有子网掩码的IPv4地址。 最小长度：**1** 最大长度：**18** 数组长度：**1 - 8**                                                                                                                                                                                                                                                                                                                                                                                                                       |
| access_control_source_vpc_ids | 否    | Array of strings | 允许访问资源栈模板的source vpc id列表， source vpc id应仅包含小写字母、数字或中划线。 最小长度：**1** 最大长度：**36** 数组长度：**1 - 8**                                                                                                                                                                                                                                                                                                                                                                                                                        |
   
#### 请求参数
表3请求Header参数 
| 参数                | 是否必选 | 参数类型   | 描述                                                                                                                                                                                                                    |
|:---|:---|:---|:---|
| Client-Request-Id | 是    | String | 用户指定的，对于此请求的唯一ID，用于定位某个请求，推荐使用UUID 最小长度：**36** 最大长度：**128** |
   
#### 响应参数
**状态码：307**
表4响应Header参数 
| 参数       | 参数类型   | 描述                                                                |
|:---|:---|:---|
| Location | String | HTTP重定向指定头域，客户端可通过此头域重定向至新地址。其内容为模板下载链接，为OBS Pre Signed地址，有效期为5分钟 |
   
**状态码：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 | 响应消息 |
   
**状态码：429**
表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 | 响应消息 |
   
**状态码：500**
表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 | 响应消息 |
   
#### 请求示例
- 获取资源栈模板
  ```
  GET https://{endpoint}/v1/ba2b9930c977f71edaeaa3a5e96a8ff1/stacks/my_hello_world_stack/templates
  ```
  
- 获取资源栈模板，并提供资源栈id以校验是否与当前资源栈匹配
  ```
  GET https://{endpoint}/v1/ba2b9930c977f71edaeaa3a5e96a8ff1/stacks/my_hello_world_stack/templates?stack_id=ea6a4f0e-ee8a-494e-b12a-8be4a1e65af2
  ```
  
- 获取资源栈模板，并提供access_control_source_ips以控制允许访问资源模板的ip
  ```
  GET https://{endpoint}/v1/ba2b9930c977f71edaeaa3a5e96a8ff1/stacks/my_hello_world_stack/templates?access_control_source_ips=100.11.5.100/24&access_control_source_ips=100.22.5.100/24
  ```
  
- 获取资源栈模板，并提供access_control_source_vpc_ids以控制允许访问资源模板的vpc id
  ```
  GET https://{endpoint}/v1/ba2b9930c977f71edaeaa3a5e96a8ff1/stacks/my_hello_world_stack/templates?access_control_source_vpc_ids=d42a8768-ad3c-4bca-91t8-53870f3402a9&access_control_source_vpc_ids=d42a8768-ad3c-4bca-91t8-53870f3402a8
  ```
  
 
#### 响应示例
无
#### 状态码
| 状态码 | 描述          |
|:---|:---|
| 307 | 获取成功，临时重定向  |
| 400 | 用户请求非法      |
| 401 | 用户身份认证失败    |
| 403 | 用户无权限调用此API |
| 404 | 资源栈或模板不存在   |
| 429 | 请求数量过多      |
| 500 | 服务器内部错误     |
   
