Updated on 2025-09-11 GMT+08:00

Creating a Template

Function

CreateTemplate

This API creates a template and generates its first version.

  • The request must contain either template_uri or template_body. The former is the OBS link of the template content, and the latter is the template content.

  • Template names are unique at one specific time, so you can create a template named HelloWorld and another template with the same name after deleting the first one.

  • When a template is created, the template version V1 is automatically generated.

  • The template has at least one version.

URI

POST /v1/{project_id}/templates

Table 1 Path Parameters

Parameter

Mandatory

Type

Description

project_id

Yes

String

Project ID. It can be obtained by calling an API or from the console.

Obtaining a Project ID

Request Parameters

Table 2 Request header parameters

Parameter

Mandatory

Type

Description

Client-Request-Id

Yes

String

Unique request ID. It is specified by a user and is used to locate a request. UUID is recommended.

Table 3 Request body parameters

Parameter

Mandatory

Type

Description

version_description

No

String

Description of a template version. It can be used by users to identify their own template versions.

template_body

No

String

HCL template. It describes the resources used in the template. You can specify either template_body or template_uri, but not both.

template_uri

No

String

OBS link of an HCL template. The template describes the target status of a resource.

The corresponding file must be a pure .tf file or a .zip package.

A pure .tf file must end with .tf or .tf.json and comply with the HCL syntax.

Currently, only the .zip package is supported. The file name extension must be .zip. The decompressed files cannot contain .tfvars files.

You can specify either template_body or template_uri, but not both.

template_name

Yes

String

Name of a template. The name is unique within its domain (domain_id) and region. Chinese characters, letters, digits, underscores (_), and hyphens (-) are allowed. It is case-sensitive and must start with a Chinese character or a letter.

template_description

No

String

Template description. It can be used by users to identify their own templates.

Response Parameters

Status code: 200

Table 4 Response body parameters

Parameter

Type

Description

template_id

String

Unique template ID. It is randomly generated by the template service.

version_id

String

Template version ID.

Status code: 400

Table 5 Response body parameters

Parameter

Type

Description

error_code

String

Error code.

error_msg

String

Error message.

encoded_authorization_message

String

The message contains information about unauthorized requests.

details

Array of Detail objects

Detailed error messages returned by service when permission is denied.

Table 6 Detail

Parameter

Type

Description

error_code

String

Response code.

error_msg

String

Response message.

Status code: 401

Table 7 Response body parameters

Parameter

Type

Description

error_code

String

Error code.

error_msg

String

Error message.

encoded_authorization_message

String

The message contains information about unauthorized requests.

details

Array of Detail objects

Detailed error messages returned by service when permission is denied.

Table 8 Detail

Parameter

Type

Description

error_code

String

Response code.

error_msg

String

Response message.

Status code: 403

Table 9 Response body parameters

Parameter

Type

Description

error_code

String

Error code.

error_msg

String

Error message.

encoded_authorization_message

String

The message contains information about unauthorized requests.

details

Array of Detail objects

Detailed error messages returned by service when permission is denied.

Table 10 Detail

Parameter

Type

Description

error_code

String

Response code.

error_msg

String

Response message.

Status code: 409

Table 11 Response body parameters

Parameter

Type

Description

error_code

String

Error code.

error_msg

String

Error message.

encoded_authorization_message

String

The message contains information about unauthorized requests.

details

Array of Detail objects

Detailed error messages returned by service when permission is denied.

Table 12 Detail

Parameter

Type

Description

error_code

String

Response code.

error_msg

String

Response message.

Status code: 429

Table 13 Response body parameters

Parameter

Type

Description

error_code

String

Error code.

error_msg

String

Error message.

encoded_authorization_message

String

The message contains information about unauthorized requests.

details

Array of Detail objects

Detailed error messages returned by service when permission is denied.

Table 14 Detail

Parameter

Type

Description

error_code

String

Response code.

error_msg

String

Response message.

Status code: 500

Table 15 Response body parameters

Parameter

Type

Description

error_code

String

Error code.

error_msg

String

Error message.

encoded_authorization_message

String

The message contains information about unauthorized requests.

details

Array of Detail objects

Detailed error messages returned by service when permission is denied.

Table 16 Detail

Parameter

Type

Description

error_code

String

Response code.

error_msg

String

Response message.

Example Requests

  • Create a template by passing the Terraform template through template_body

    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}"
    }
  • Create a template by referencing the template file stored in Huawei Cloud OBS through template_uri

    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"
    }

Example Responses

Status code: 200

Template created.

{
  "template_id" : "69f8d5ea-eaa4-4a3b-a96d-bae9230e97c8",
  "version_id" : "V1"
}

Status Codes

Status Code

Description

200

Template created.

400

Invalid request.

401

Authentication failed.

403

The user does not have the permission to call this API.

409

Creation requests conflict. A template with the same name already exists.

429

Too frequent requests.

500

Internal server error.