Updated on 2026-01-28 GMT+08:00

Creating a Template

Function

This API is used to create a template.

Calling Method

For details, see Calling APIs.

Authorization Information

Each account has all the permissions required to call all APIs, but IAM users must be assigned the required permissions.

  • If you are using role/policy-based authorization, see Permissions Policies and Supported Actions for details on the required permissions.
  • If you are using identity policy-based authorization, the following identity policy-based permissions are required.

    Action

    Access Level

    Resource Type (*: required)

    Condition Key

    Alias

    Dependencies

    sms:template:create

    Write

    template *

    -

    sms:server:migrationServer

    -

URI

POST /v3/vm/templates

Request Parameters

Table 1 Request header parameters

Parameter

Mandatory

Type

Description

X-Auth-Token

Yes

String

User token.

The token can be obtained by calling the IAM API for obtaining a user token. The value of X-Subject-Token in the response header is the user token.

Minimum: 1

Maximum: 16384

Table 2 Request body parameters

Parameter

Mandatory

Type

Description

template

Yes

TemplateRequest object

The template information.

Table 3 TemplateRequest

Parameter

Mandatory

Type

Description

name

Yes

String

The template name.

Only Chinese characters, underscores (_), hyphens (-), digits, and uppercase and lowercase letters are allowed.

Minimum: 1

Maximum: 64

is_template

No

Boolean

Indicates whether the template is general. If the template is associated with a task, the template is not a general template.

region

No

String

The region.

Minimum: 0

Maximum: 255

projectid

No

String

The project ID.

Minimum: 0

Maximum: 255

target_server_name

No

String

The name of the target server.

Minimum: 0

Maximum: 255

availability_zone

No

String

The availability zone.

Minimum: 0

Maximum: 255

volumetype

No

String

Template name.

The value can contain only letters, digits, underscores (_), and hyphens (-).

Minimum: 0

Maximum: 255

flavor

No

String

The server flavor.

Minimum: 0

Maximum: 65535

vpc

No

VpcObject object

The VPC information.

nics

No

Array of Nics objects

The NIC information. Multiple NICs are supported. To let the system automatically add a NIC, configure only one NIC entry and set the ID to autoCreate.

Array Length: 0 - 65535

security_groups

No

Array of SgObject objects

The security group information. Multiple security groups are supported. To let the system automatically create a security group, configure only one security group record and set the ID to autoCreate.

Array Length: 0 - 65535

publicip

No

PublicIp object

The public IP address.

disk

No

Array of TemplateDisk objects

The disk information.

Array Length: 0 - 65535

data_volume_type

No

String

Disk type of the data disk.

Its value comes from EVS.

Common types include SAS (serial attached SCSI), SSD (solid-state drive), and SATA (serial ATA). For details, see the description of the volume_type field in the response parameters in section "Querying Details About a Single EVS Disk" in the EIP API document.

Minimum: 0

Maximum: 255

target_password

No

String

The target server password.

Minimum: 0

Maximum: 1024

image_id

No

String

The ID of the image used to create target servers.

Minimum: 0

Maximum: 255

Table 4 VpcObject

Parameter

Mandatory

Type

Description

id

No

String

The VPC ID. To let the system automatically create a VPC, set this parameter to autoCreate.

Minimum: 1

Maximum: 255

name

No

String

The VPC name.

Minimum: 1

Maximum: 255

cidr

No

String

The VPC CIDR block. The default value is 192.168.0.0/16.

Minimum: 1

Maximum: 255

Table 5 Nics

Parameter

Mandatory

Type

Description

id

Yes

String

The subnet ID. To let the system automatically create a subnet, set this parameter to autoCreate.

Minimum: 0

Maximum: 255

name

Yes

String

The subnet name.

Minimum: 0

Maximum: 255

cidr

Yes

String

The subnet gateway/mask.

Minimum: 0

Maximum: 255

ip

No

String

The server IP address. If this parameter is not specified, the system will automatically assign an IP address.

Minimum: 0

Maximum: 255

Table 6 SgObject

Parameter

Mandatory

Type

Description

id

Yes

String

Security group ID.

Minimum: 0

Maximum: 255

name

Yes

String

Security group name.

Minimum: 0

Maximum: 255

Table 7 PublicIp

Parameter

Mandatory

Type

Description

type

Yes

String

The EIP type. The default value is 5_bgp.

For details about the type, see the description of the type field in Response Message in section "Querying an EIP" of the EIP API reference.

Minimum: 0

Maximum: 255

bandwidth_size

Yes

Integer

The bandwidth size, in Mbit/s.

The minimum increment for bandwidth adjustment varies depending on the bandwidth range.

The minimum increment is 1 Mbit/s if the allowed bandwidth does not exceed 300 Mbit/s. The minimum increment is 50 Mbit/s if the allowed bandwidth ranges from 300 Mbit/s to 1,000 Mbit/s. The minimum increment is 500 Mbit/s if the allowed bandwidth exceeds 1,000 Mbit/s.

Minimum: 1

Maximum: 2000

bandwidth_share_type

No

String

Bandwidth sharing type (long text, non-enumerated data, from EIP)

For details about the type, see the description of the bandwidth_share_type field in Response Message in section "Querying an EIP" of the EIP API reference.

Minimum: 0

Maximum: 255

Table 8 TemplateDisk

Parameter

Mandatory

Type

Description

id

No

Long

The disk ID.

Minimum: 0

Maximum: 9223372036854775807

index

Yes

Integer

The disk serial number, starting from 0.

Minimum: 0

Maximum: 2147483647

name

Yes

String

The disk name.

Minimum: 0

Maximum: 255

disktype

Yes

String

Disk type, which is the same as the volumetype field. Its value comes from EVS.

For details, see the description of the volume_type field in the response parameters in the section "Querying Details About a Single EVS Disk" in the EIP API document.

Minimum: 0

Maximum: 255

size

Yes

Long

The disk size in GB.

Minimum: 0

Maximum: 9223372036854775807

device_use

No

String

The disk function.

Minimum: 0

Maximum: 255

Response Parameters

Status code: 200

Table 9 Response body parameters

Parameter

Type

Description

id

String

The ID of the newly created template returned by SMS.

Minimum: 0

Maximum: 255

Status code: 403

Table 10 Response body parameters

Parameter

Type

Description

error_code

String

The error code.

Minimum: 0

Maximum: 255

error_msg

String

The error message.

Minimum: 0

Maximum: 255

encoded_authorization_message

String

The encrypted authorization information.

Minimum: 0

Maximum: 65535

error_param

Array of strings

Error parameters.

Minimum: 0

Maximum: 65535

Array Length: 1 - 20

details

Array of details objects

The error details.

Array Length: 1 - 20

Table 11 details

Parameter

Type

Description

error_code

String

The SMS error code.

Minimum: 0

Maximum: 65535

error_msg

String

The SMS error message.

Minimum: 0

Maximum: 65535

Example Requests

  • This example creates a migration task template. The template name is xxxx, the region information is region, and the project ID is 00924d0ad2df4f21ac476dd9f3288xxx.

    POST https://{endpoint}/v3/vm/templates
    
    {
      "template" : {
        "name" : "",
        "is_template" : false,
        "region" : "region",
        "target_server_name" : "abcd",
        "availability_zone" : "availability_zone",
        "projectid" : "xxxxxxxxxxxxxxxxxxxxxxxx00000001",
        "volumetype" : "",
        "image_id" : "",
        "vpc" : {
          "id" : "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx0001",
          "name" : "sms-1566979232(192.168.0.0/16)"
        },
        "security_groups" : [ {
          "id" : "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx0001",
          "name" : "kubernetes.io-default-sg (Inbound: udp/1-65535; tcp/22,1-65535,3389; Outbound: --)"
        } ],
        "nics" : [ {
          "id" : "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx0001",
          "name" : "sms-1566979244(192.168.0.0/16)",
          "cidr" : "192.168.0.0/16",
          "ip" : ""
        } ],
        "flavor" : "s2.medium.2",
        "publicip" : {
          "type" : "5_bgp",
          "bandwidth_size" : 5,
          "bandwidth_share_type" : "PER"
        },
        "disk" : [ {
          "index" : 0,
          "name" : "system",
          "disktype" : "",
          "size" : 40
        } ]
      }
    }
  • This example creates a template directly.

    POST https://{endpoint}/v3/vm/templates
    
    {
      "template" : {
        "name" : "xxxx",
        "is_template" : true,
        "region" : "region",
        "target_server_name" : "ggg-win16-t",
        "availability_zone" : "availability_zone",
        "projectid" : "xxxxxxxxxxxxxxxxxxxxxxxx00000001",
        "target_password" : "********",
        "flavor" : "c3.medium.2",
        "vpc" : {
          "id" : "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx0001",
          "name" : "Migrate-SSd-1",
          "cidr" : "192.168.0.0/16"
        },
        "nics" : [ {
          "id" : "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx0001",
          "name" : "Migrate-SSd-35",
          "cidr" : "192.168.0.0/16",
          "ip" : ""
        } ],
        "security_groups" : [ {
          "id" : "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx0001",
          "name" : "Migrate-dddd"
        } ],
        "disk" : [ {
          "id" : "0",
          "index" : 0,
          "name" : "Disk 0",
          "disktype" : "SATA",
          "size" : 40,
          "device_use" : "BOOT"
        } ],
        "volumetype" : "SATA",
        "publicip" : {
          "type" : "5_g-vm",
          "bandwidth_size" : 10,
          "bandwidth_share_type" : "PER"
        }
      }
    }

Example Responses

Status code: 200

The template was created.

{
  "id" : "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx0001"
}

Status code: 403

Authentication failed.

{
  "error_code" : "SMS.9004",
  "error_msg" : "The current account does not have the permission to execute policy. You do not have permission to perform action XXX on resource XXX.",
  "encoded_authorization_message" : "XXXXXX",
  "error_param" : [ "You do not have permission to perform action XXX on resource XXX." ],
  "details" : [ {
    "error_code" : "SMS.9004",
    "error_msg" : "You do not have permission to perform action XXX on resource XXX."
  } ]
}

SDK Sample Code

The SDK sample code is as follows.

  • This example creates a migration task template. The template name is xxxx, the region information is region, and the project ID is 00924d0ad2df4f21ac476dd9f3288xxx.

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    package com.huaweicloud.sdk.test;
    
    import com.huaweicloud.sdk.core.auth.ICredential;
    import com.huaweicloud.sdk.core.auth.GlobalCredentials;
    import com.huaweicloud.sdk.core.exception.ConnectionException;
    import com.huaweicloud.sdk.core.exception.RequestTimeoutException;
    import com.huaweicloud.sdk.core.exception.ServiceResponseException;
    import com.huaweicloud.sdk.sms.v3.region.SmsRegion;
    import com.huaweicloud.sdk.sms.v3.*;
    import com.huaweicloud.sdk.sms.v3.model.*;
    
    import java.util.List;
    import java.util.ArrayList;
    
    public class CreateTemplateSolution {
    
        public static void main(String[] args) {
            // The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
            // In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
            String ak = System.getenv("CLOUD_SDK_AK");
            String sk = System.getenv("CLOUD_SDK_SK");
    
            ICredential auth = new GlobalCredentials()
                    .withAk(ak)
                    .withSk(sk);
    
            SmsClient client = SmsClient.newBuilder()
                    .withCredential(auth)
                    .withRegion(SmsRegion.valueOf("<YOUR REGION>"))
                    .build();
            CreateTemplateRequest request = new CreateTemplateRequest();
            CreateTemplateReq body = new CreateTemplateReq();
            List<TemplateDisk> listTemplateDisk = new ArrayList<>();
            listTemplateDisk.add(
                new TemplateDisk()
                    .withIndex(0)
                    .withName("system")
                    .withDisktype("")
                    .withSize(40L)
            );
            PublicIp publicipTemplate = new PublicIp();
            publicipTemplate.withType("5_bgp")
                .withBandwidthSize(5)
                .withBandwidthShareType("PER");
            List<SgObject> listTemplateSecurityGroups = new ArrayList<>();
            listTemplateSecurityGroups.add(
                new SgObject()
                    .withId("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx0001")
                    .withName("kubernetes.io-default-sg (Inbound: udp/1-65535; tcp/22,1-65535,3389; Outbound: --)")
            );
            List<Nics> listTemplateNics = new ArrayList<>();
            listTemplateNics.add(
                new Nics()
                    .withId("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx0001")
                    .withName("sms-1566979244(192.168.0.0/16)")
                    .withCidr("192.168.0.0/16")
                    .withIp("")
            );
            VpcObject vpcTemplate = new VpcObject();
            vpcTemplate.withId("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx0001")
                .withName("sms-1566979232(192.168.0.0/16)");
            TemplateRequest templatebody = new TemplateRequest();
            templatebody.withName("")
                .withIsTemplate(false)
                .withRegion("region")
                .withProjectid("xxxxxxxxxxxxxxxxxxxxxxxx00000001")
                .withTargetServerName("abcd")
                .withAvailabilityZone("availability_zone")
                .withVolumetype(TemplateRequest.VolumetypeEnum.fromValue(""))
                .withFlavor("s2.medium.2")
                .withVpc(vpcTemplate)
                .withNics(listTemplateNics)
                .withSecurityGroups(listTemplateSecurityGroups)
                .withPublicip(publicipTemplate)
                .withDisk(listTemplateDisk)
                .withImageId("");
            body.withTemplate(templatebody);
            request.withBody(body);
            try {
                CreateTemplateResponse response = client.createTemplate(request);
                System.out.println(response.toString());
            } catch (ConnectionException e) {
                e.printStackTrace();
            } catch (RequestTimeoutException e) {
                e.printStackTrace();
            } catch (ServiceResponseException e) {
                e.printStackTrace();
                System.out.println(e.getHttpStatusCode());
                System.out.println(e.getRequestId());
                System.out.println(e.getErrorCode());
                System.out.println(e.getErrorMsg());
            }
        }
    }
    
  • This example creates a template directly.

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    package com.huaweicloud.sdk.test;
    
    import com.huaweicloud.sdk.core.auth.ICredential;
    import com.huaweicloud.sdk.core.auth.GlobalCredentials;
    import com.huaweicloud.sdk.core.exception.ConnectionException;
    import com.huaweicloud.sdk.core.exception.RequestTimeoutException;
    import com.huaweicloud.sdk.core.exception.ServiceResponseException;
    import com.huaweicloud.sdk.sms.v3.region.SmsRegion;
    import com.huaweicloud.sdk.sms.v3.*;
    import com.huaweicloud.sdk.sms.v3.model.*;
    
    import java.util.List;
    import java.util.ArrayList;
    
    public class CreateTemplateSolution {
    
        public static void main(String[] args) {
            // The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
            // In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
            String ak = System.getenv("CLOUD_SDK_AK");
            String sk = System.getenv("CLOUD_SDK_SK");
    
            ICredential auth = new GlobalCredentials()
                    .withAk(ak)
                    .withSk(sk);
    
            SmsClient client = SmsClient.newBuilder()
                    .withCredential(auth)
                    .withRegion(SmsRegion.valueOf("<YOUR REGION>"))
                    .build();
            CreateTemplateRequest request = new CreateTemplateRequest();
            CreateTemplateReq body = new CreateTemplateReq();
            List<TemplateDisk> listTemplateDisk = new ArrayList<>();
            listTemplateDisk.add(
                new TemplateDisk()
                    .withId(0L)
                    .withIndex(0)
                    .withName("Disk 0")
                    .withDisktype("SATA")
                    .withSize(40L)
                    .withDeviceUse("BOOT")
            );
            PublicIp publicipTemplate = new PublicIp();
            publicipTemplate.withType("5_g-vm")
                .withBandwidthSize(10)
                .withBandwidthShareType("PER");
            List<SgObject> listTemplateSecurityGroups = new ArrayList<>();
            listTemplateSecurityGroups.add(
                new SgObject()
                    .withId("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx0001")
                    .withName("Migrate-dddd")
            );
            List<Nics> listTemplateNics = new ArrayList<>();
            listTemplateNics.add(
                new Nics()
                    .withId("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx0001")
                    .withName("Migrate-SSd-35")
                    .withCidr("192.168.0.0/16")
                    .withIp("")
            );
            VpcObject vpcTemplate = new VpcObject();
            vpcTemplate.withId("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx0001")
                .withName("Migrate-SSd-1")
                .withCidr("192.168.0.0/16");
            TemplateRequest templatebody = new TemplateRequest();
            templatebody.withName("xxxx")
                .withIsTemplate(true)
                .withRegion("region")
                .withProjectid("xxxxxxxxxxxxxxxxxxxxxxxx00000001")
                .withTargetServerName("ggg-win16-t")
                .withAvailabilityZone("availability_zone")
                .withVolumetype(TemplateRequest.VolumetypeEnum.fromValue("SATA"))
                .withFlavor("c3.medium.2")
                .withVpc(vpcTemplate)
                .withNics(listTemplateNics)
                .withSecurityGroups(listTemplateSecurityGroups)
                .withPublicip(publicipTemplate)
                .withDisk(listTemplateDisk)
                .withTargetPassword("********");
            body.withTemplate(templatebody);
            request.withBody(body);
            try {
                CreateTemplateResponse response = client.createTemplate(request);
                System.out.println(response.toString());
            } catch (ConnectionException e) {
                e.printStackTrace();
            } catch (RequestTimeoutException e) {
                e.printStackTrace();
            } catch (ServiceResponseException e) {
                e.printStackTrace();
                System.out.println(e.getHttpStatusCode());
                System.out.println(e.getRequestId());
                System.out.println(e.getErrorCode());
                System.out.println(e.getErrorMsg());
            }
        }
    }
    
  • This example creates a migration task template. The template name is xxxx, the region information is region, and the project ID is 00924d0ad2df4f21ac476dd9f3288xxx.

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    # coding: utf-8
    
    import os
    from huaweicloudsdkcore.auth.credentials import GlobalCredentials
    from huaweicloudsdksms.v3.region.sms_region import SmsRegion
    from huaweicloudsdkcore.exceptions import exceptions
    from huaweicloudsdksms.v3 import *
    
    if __name__ == "__main__":
        # The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
        # In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
        ak = os.environ["CLOUD_SDK_AK"]
        sk = os.environ["CLOUD_SDK_SK"]
    
        credentials = GlobalCredentials(ak, sk)
    
        client = SmsClient.new_builder() \
            .with_credentials(credentials) \
            .with_region(SmsRegion.value_of("<YOUR REGION>")) \
            .build()
    
        try:
            request = CreateTemplateRequest()
            listDiskTemplate = [
                TemplateDisk(
                    index=0,
                    name="system",
                    disktype="",
                    size=40
                )
            ]
            publicipTemplate = PublicIp(
                type="5_bgp",
                bandwidth_size=5,
                bandwidth_share_type="PER"
            )
            listSecurityGroupsTemplate = [
                SgObject(
                    id="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx0001",
                    name="kubernetes.io-default-sg (Inbound: udp/1-65535; tcp/22,1-65535,3389; Outbound: --)"
                )
            ]
            listNicsTemplate = [
                Nics(
                    id="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx0001",
                    name="sms-1566979244(192.168.0.0/16)",
                    cidr="192.168.0.0/16",
                    ip=""
                )
            ]
            vpcTemplate = VpcObject(
                id="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx0001",
                name="sms-1566979232(192.168.0.0/16)"
            )
            templatebody = TemplateRequest(
                name="",
                is_template=False,
                region="region",
                projectid="xxxxxxxxxxxxxxxxxxxxxxxx00000001",
                target_server_name="abcd",
                availability_zone="availability_zone",
                volumetype="",
                flavor="s2.medium.2",
                vpc=vpcTemplate,
                nics=listNicsTemplate,
                security_groups=listSecurityGroupsTemplate,
                publicip=publicipTemplate,
                disk=listDiskTemplate,
                image_id=""
            )
            request.body = CreateTemplateReq(
                template=templatebody
            )
            response = client.create_template(request)
            print(response)
        except exceptions.ClientRequestException as e:
            print(e.status_code)
            print(e.request_id)
            print(e.error_code)
            print(e.error_msg)
    
  • This example creates a template directly.

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    # coding: utf-8
    
    import os
    from huaweicloudsdkcore.auth.credentials import GlobalCredentials
    from huaweicloudsdksms.v3.region.sms_region import SmsRegion
    from huaweicloudsdkcore.exceptions import exceptions
    from huaweicloudsdksms.v3 import *
    
    if __name__ == "__main__":
        # The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
        # In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
        ak = os.environ["CLOUD_SDK_AK"]
        sk = os.environ["CLOUD_SDK_SK"]
    
        credentials = GlobalCredentials(ak, sk)
    
        client = SmsClient.new_builder() \
            .with_credentials(credentials) \
            .with_region(SmsRegion.value_of("<YOUR REGION>")) \
            .build()
    
        try:
            request = CreateTemplateRequest()
            listDiskTemplate = [
                TemplateDisk(
                    id=0,
                    index=0,
                    name="Disk 0",
                    disktype="SATA",
                    size=40,
                    device_use="BOOT"
                )
            ]
            publicipTemplate = PublicIp(
                type="5_g-vm",
                bandwidth_size=10,
                bandwidth_share_type="PER"
            )
            listSecurityGroupsTemplate = [
                SgObject(
                    id="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx0001",
                    name="Migrate-dddd"
                )
            ]
            listNicsTemplate = [
                Nics(
                    id="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx0001",
                    name="Migrate-SSd-35",
                    cidr="192.168.0.0/16",
                    ip=""
                )
            ]
            vpcTemplate = VpcObject(
                id="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx0001",
                name="Migrate-SSd-1",
                cidr="192.168.0.0/16"
            )
            templatebody = TemplateRequest(
                name="xxxx",
                is_template=True,
                region="region",
                projectid="xxxxxxxxxxxxxxxxxxxxxxxx00000001",
                target_server_name="ggg-win16-t",
                availability_zone="availability_zone",
                volumetype="SATA",
                flavor="c3.medium.2",
                vpc=vpcTemplate,
                nics=listNicsTemplate,
                security_groups=listSecurityGroupsTemplate,
                publicip=publicipTemplate,
                disk=listDiskTemplate,
                target_password="********"
            )
            request.body = CreateTemplateReq(
                template=templatebody
            )
            response = client.create_template(request)
            print(response)
        except exceptions.ClientRequestException as e:
            print(e.status_code)
            print(e.request_id)
            print(e.error_code)
            print(e.error_msg)
    
  • This example creates a migration task template. The template name is xxxx, the region information is region, and the project ID is 00924d0ad2df4f21ac476dd9f3288xxx.

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    package main
    
    import (
    	"fmt"
    	"github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth/global"
        sms "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/sms/v3"
    	"github.com/huaweicloud/huaweicloud-sdk-go-v3/services/sms/v3/model"
        region "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/sms/v3/region"
    )
    
    func main() {
        // The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
        // In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
        ak := os.Getenv("CLOUD_SDK_AK")
        sk := os.Getenv("CLOUD_SDK_SK")
    
        auth := global.NewCredentialsBuilder().
            WithAk(ak).
            WithSk(sk).
            Build()
    
        client := sms.NewSmsClient(
            sms.SmsClientBuilder().
                WithRegion(region.ValueOf("<YOUR REGION>")).
                WithCredential(auth).
                Build())
    
        request := &model.CreateTemplateRequest{}
    	var listDiskTemplate = []model.TemplateDisk{
            {
                Index: int32(0),
                Name: "system",
                Disktype: "",
                Size: int64(40),
            },
        }
    	bandwidthShareTypePublicip:= "PER"
    	publicipTemplate := &model.PublicIp{
    		Type: "5_bgp",
    		BandwidthSize: int32(5),
    		BandwidthShareType: &bandwidthShareTypePublicip,
    	}
    	var listSecurityGroupsTemplate = []model.SgObject{
            {
                Id: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx0001",
                Name: "kubernetes.io-default-sg (Inbound: udp/1-65535; tcp/22,1-65535,3389; Outbound: --)",
            },
        }
    	ipNics:= ""
    	var listNicsTemplate = []model.Nics{
            {
                Id: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx0001",
                Name: "sms-1566979244(192.168.0.0/16)",
                Cidr: "192.168.0.0/16",
                Ip: &ipNics,
            },
        }
    	vpcTemplate := &model.VpcObject{
    		Id: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx0001",
    		Name: "sms-1566979232(192.168.0.0/16)",
    	}
    	targetServerNameTemplate:= "abcd"
    	availabilityZoneTemplate:= "availability_zone"
    	volumetypeTemplate:= model.GetTemplateRequestVolumetypeEnum().EMPTY
    	flavorTemplate:= "s2.medium.2"
    	imageIdTemplate:= ""
    	templatebody := &model.TemplateRequest{
    		Name: "",
    		IsTemplate: false,
    		Region: "region",
    		Projectid: "xxxxxxxxxxxxxxxxxxxxxxxx00000001",
    		TargetServerName: &targetServerNameTemplate,
    		AvailabilityZone: &availabilityZoneTemplate,
    		Volumetype: &volumetypeTemplate,
    		Flavor: &flavorTemplate,
    		Vpc: vpcTemplate,
    		Nics: &listNicsTemplate,
    		SecurityGroups: &listSecurityGroupsTemplate,
    		Publicip: publicipTemplate,
    		Disk: &listDiskTemplate,
    		ImageId: &imageIdTemplate,
    	}
    	request.Body = &model.CreateTemplateReq{
    		Template: templatebody,
    	}
    	response, err := client.CreateTemplate(request)
    	if err == nil {
            fmt.Printf("%+v\n", response)
        } else {
            fmt.Println(err)
        }
    }
    
  • This example creates a template directly.

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    package main
    
    import (
    	"fmt"
    	"github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth/global"
        sms "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/sms/v3"
    	"github.com/huaweicloud/huaweicloud-sdk-go-v3/services/sms/v3/model"
        region "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/sms/v3/region"
    )
    
    func main() {
        // The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
        // In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
        ak := os.Getenv("CLOUD_SDK_AK")
        sk := os.Getenv("CLOUD_SDK_SK")
    
        auth := global.NewCredentialsBuilder().
            WithAk(ak).
            WithSk(sk).
            Build()
    
        client := sms.NewSmsClient(
            sms.SmsClientBuilder().
                WithRegion(region.ValueOf("<YOUR REGION>")).
                WithCredential(auth).
                Build())
    
        request := &model.CreateTemplateRequest{}
    	idDisk:= int64(0)
    	deviceUseDisk:= "BOOT"
    	var listDiskTemplate = []model.TemplateDisk{
            {
                Id: &idDisk,
                Index: int32(0),
                Name: "Disk 0",
                Disktype: "SATA",
                Size: int64(40),
                DeviceUse: &deviceUseDisk,
            },
        }
    	bandwidthShareTypePublicip:= "PER"
    	publicipTemplate := &model.PublicIp{
    		Type: "5_g-vm",
    		BandwidthSize: int32(10),
    		BandwidthShareType: &bandwidthShareTypePublicip,
    	}
    	var listSecurityGroupsTemplate = []model.SgObject{
            {
                Id: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx0001",
                Name: "Migrate-dddd",
            },
        }
    	ipNics:= ""
    	var listNicsTemplate = []model.Nics{
            {
                Id: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx0001",
                Name: "Migrate-SSd-35",
                Cidr: "192.168.0.0/16",
                Ip: &ipNics,
            },
        }
    	cidrVpc:= "192.168.0.0/16"
    	vpcTemplate := &model.VpcObject{
    		Id: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx0001",
    		Name: "Migrate-SSd-1",
    		Cidr: &cidrVpc,
    	}
    	targetServerNameTemplate:= "ggg-win16-t"
    	availabilityZoneTemplate:= "availability_zone"
    	volumetypeTemplate:= model.GetTemplateRequestVolumetypeEnum().SATA
    	flavorTemplate:= "c3.medium.2"
    	targetPasswordTemplate:= "********"
    	templatebody := &model.TemplateRequest{
    		Name: "xxxx",
    		IsTemplate: true,
    		Region: "region",
    		Projectid: "xxxxxxxxxxxxxxxxxxxxxxxx00000001",
    		TargetServerName: &targetServerNameTemplate,
    		AvailabilityZone: &availabilityZoneTemplate,
    		Volumetype: &volumetypeTemplate,
    		Flavor: &flavorTemplate,
    		Vpc: vpcTemplate,
    		Nics: &listNicsTemplate,
    		SecurityGroups: &listSecurityGroupsTemplate,
    		Publicip: publicipTemplate,
    		Disk: &listDiskTemplate,
    		TargetPassword: &targetPasswordTemplate,
    	}
    	request.Body = &model.CreateTemplateReq{
    		Template: templatebody,
    	}
    	response, err := client.CreateTemplate(request)
    	if err == nil {
            fmt.Printf("%+v\n", response)
        } else {
            fmt.Println(err)
        }
    }
    

For SDK sample code of more programming languages, see the Sample Code tab in API Explorer. SDK sample code can be automatically generated.

Status Codes

Status Code

Description

200

The template was created.

403

Authentication failed.

Error Codes

See Error Codes.