
# 创建模板
#### 功能介绍
创建模板（CreateTemplate）
此API用于创建一个带有版本的模板
- 请求中必须包括template_uri或是template_body。前者为模板内容obs链接，后者为模板内容
  
- 模板管理名仅仅在同一时间下唯一，即用户允许先生成一个叫HelloWorld的模板，删除，再重新创建一个同名模板
  
- 模板创建时，会自动生成模板版本号为V1的模板版本
  
- 模板必须存在一个或多个模板版本，即不存在没有模板版本的模板
  
 
#### 调试
您可以在[API Explorer](https://console.huaweicloud.com/apiexplorer/#/openapi/AOS/doc?api=CreateTemplate)中调试该接口，支持自动认证鉴权。API Explorer可以自动生成SDK代码示例，并提供SDK代码示例调试功能。
#### URI
POST /v1/{project_id}/templates
表1路径参数 
| 参数         | 是否必选 | 参数类型   | 描述                                                                                                                                                                                                                                                                                                                                                                     |
|:---|:---|:---|:---|
| project_id | 是    | String | 项目ID，可以从调用API处获取，也可以从控制台获取。 [项目ID获取方式](https://support.huaweicloud.com/api-ticket/ticket_api_20002.html) 最小长度：**3** 最大长度：**64** |
   
#### 请求参数
表2请求Header参数 
| 参数                | 是否必选 | 参数类型   | 描述                                                                                                                                                                                                                    |
|:---|:---|:---|:---|
| Client-Request-Id | 是    | String | 用户指定的，对于此请求的唯一ID，用于定位某个请求，推荐使用UUID 最小长度：**36** 最大长度：**128** |
   
表3请求Body参数 
| 参数                   | 是否必选 | 参数类型   | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
|:---|:---|:---|:---|
| version_description  | 否    | String | 模板版本的描述。可用于客户识别自己的模板版本 最小长度：**0** 最大长度：**1024**                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| template_body        | 否    | String | HCL模板，描述了模板中使用的资源 template_body 和 template_uri 有且仅有一个存在 最小长度：**0** 最大长度：**1572864**                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| template_uri         | 否    | String | HCL模板的obs链接，该模板描述了资源的目标状态 对应的文件应该是纯tf文件或zip压缩包 纯tf文件需要以*.tf* 或者*.tf.json*结尾，并遵守hcl语法 压缩包目前只支持zip格式，文件需要以".zip"结尾。解压后的文件不得包含".tfvars"文件 template_body 和 template_uri 有且仅有一个存在 最小长度：**0** 最大长度：**2048** |
| template_name        | 是    | String | 模板（Template）的名字。此名字在domain_id+region下应唯一，可以使用中文、大小写英文、数字、下划线、中划线。首字符需为中文或者英文，区分大小写。 最小长度：**1** 最大长度：**128**                                                                                                                                                                                                                                                                                                                                                                                                               |
| template_description | 否    | String | 模板的描述。可用于客户识别自己的模板 最小长度：**0** 最大长度：**1024**                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
   
#### 响应参数
**状态码：200**
表4响应Body参数 
| 参数          | 参数类型   | 描述                                                                                                                                                                                                  |
|:---|:---|:---|
| template_id | String | 模板的唯一ID，由模板服务随机生成 最小长度：**36** 最大长度：**36** |
| version_id  | String | 模板模板版本ID 最小长度：**2** 最大长度：**11**           |
   
**状态码：400**
表5响应Body参数 
| 参数                            | 参数类型                                                                                                   | 描述                |
|:---|:---|:---|
| error_code                    | String                                                                                                 | 错误码               |
| 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                                                                                                   | 错误码               |
| 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                                                                                                   | 错误码               |
| error_msg                     | String                                                                                                   | 错误描述              |
| encoded_authorization_message | String                                                                                                   | 包含有关未经授权请求的信息。    |
| details                       | Array of [Detail] objects | 权限拒绝时服务返回的详细错误信息。 |
   
 表10Detail 
| 参数         | 参数类型   | 描述   |
|:---|:---|:---|
| error_code | String | 响应码  |
| error_msg  | String | 响应消息 |
   
**状态码：409**
表11响应Body参数 
| 参数                            | 参数类型                                                                                                     | 描述                |
|:---|:---|:---|
| error_code                    | String                                                                                                   | 错误码               |
| 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                                                                                                   | 错误码               |
| 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                                                                                                   | 错误码               |
| error_msg                     | String                                                                                                   | 错误描述              |
| encoded_authorization_message | String                                                                                                   | 包含有关未经授权请求的信息。    |
| details                       | Array of [Detail] objects | 权限拒绝时服务返回的详细错误信息。 |
   
 表16Detail 
| 参数         | 参数类型   | 描述   |
|:---|:---|:---|
| error_code | String | 响应码  |
| error_msg  | String | 响应消息 |
   
#### 请求示例
- 通过template_body传入Terraform模板创建模板
  ```
  POST https://{endpoint}/v1/c364070ab35041ddae68cf8b4839b60f/templates
  {
    "template_name" : "huaweicloud_vpc_template",
    "template_body" : "terraform {\n  required_providers {\n    huaweicloud = {\n      source = \"huawei.com/provider/huaweicloud\"\n      version = \"1.41.0\"\n    }\n  }\n}\n\nprovider \"huaweicloud\" {\n  insecure = true\n  cloud = \"{cloud_name}\"\n  region = \"{region}\"\n  endpoints = {\n    iam = \"{iam_endpoint}\"\n  }\n}\n\nresource \"huaweicloud_vpc\" \"vpc\" {\n  cidr = \"172.16.0.0/16\"\n  name = \"my_vpc\"\n}"
  }
  ```
  
- 通过template_uri引用华为云OBS存储的模板文件创建模板
  ```
  POST https://{endpoint}/v1/c364070ab35041ddae68cf8b4839b60f/templates
  {
    "template_name" : "huaweicloud_vpc_template_obs",
    "template_uri" : "https://{bucket_name}.{region}.myhuaweicloud.com/terraform-templates/vpc-base.tf"
  }
  ```
  
 
#### 响应示例
**状态码：200**
创建模板成功
```
{
  "template_id" : "69f8d5ea-eaa4-4a3b-a96d-bae9230e97c8",
  "version_id" : "V1"
}
```
#### 状态码
| 状态码 | 描述             |
|:---|:---|
| 200 | 创建模板成功         |
| 400 | 用户请求非法         |
| 401 | 用户身份认证失败       |
| 403 | 用户无权限调用此API    |
| 409 | 创建冲突，同名的模板已经存在 |
| 429 | 请求数量过多         |
| 500 | 服务器内部错误        |
   
