1package ecs
2
3//Licensed under the Apache License, Version 2.0 (the "License");
4//you may not use this file except in compliance with the License.
5//You may obtain a copy of the License at
6//
7//http://www.apache.org/licenses/LICENSE-2.0
8//
9//Unless required by applicable law or agreed to in writing, software
10//distributed under the License is distributed on an "AS IS" BASIS,
11//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12//See the License for the specific language governing permissions and
13//limitations under the License.
14//
15// Code generated by Alibaba Cloud SDK Code Generator.
16// Changes may cause incorrect behavior and will be lost if the code is regenerated.
17
18import (
19	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
20	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/responses"
21)
22
23// CreateInstance invokes the ecs.CreateInstance API synchronously
24func (client *Client) CreateInstance(request *CreateInstanceRequest) (response *CreateInstanceResponse, err error) {
25	response = CreateCreateInstanceResponse()
26	err = client.DoAction(request, response)
27	return
28}
29
30// CreateInstanceWithChan invokes the ecs.CreateInstance API asynchronously
31func (client *Client) CreateInstanceWithChan(request *CreateInstanceRequest) (<-chan *CreateInstanceResponse, <-chan error) {
32	responseChan := make(chan *CreateInstanceResponse, 1)
33	errChan := make(chan error, 1)
34	err := client.AddAsyncTask(func() {
35		defer close(responseChan)
36		defer close(errChan)
37		response, err := client.CreateInstance(request)
38		if err != nil {
39			errChan <- err
40		} else {
41			responseChan <- response
42		}
43	})
44	if err != nil {
45		errChan <- err
46		close(responseChan)
47		close(errChan)
48	}
49	return responseChan, errChan
50}
51
52// CreateInstanceWithCallback invokes the ecs.CreateInstance API asynchronously
53func (client *Client) CreateInstanceWithCallback(request *CreateInstanceRequest, callback func(response *CreateInstanceResponse, err error)) <-chan int {
54	result := make(chan int, 1)
55	err := client.AddAsyncTask(func() {
56		var response *CreateInstanceResponse
57		var err error
58		defer close(result)
59		response, err = client.CreateInstance(request)
60		callback(response, err)
61		result <- 1
62	})
63	if err != nil {
64		defer close(result)
65		callback(nil, err)
66		result <- 0
67	}
68	return result
69}
70
71// CreateInstanceRequest is the request struct for api CreateInstance
72type CreateInstanceRequest struct {
73	*requests.RpcRequest
74	ResourceOwnerId                 requests.Integer          `position:"Query" name:"ResourceOwnerId"`
75	HpcClusterId                    string                    `position:"Query" name:"HpcClusterId"`
76	HttpPutResponseHopLimit         requests.Integer          `position:"Query" name:"HttpPutResponseHopLimit"`
77	SecurityEnhancementStrategy     string                    `position:"Query" name:"SecurityEnhancementStrategy"`
78	KeyPairName                     string                    `position:"Query" name:"KeyPairName"`
79	SpotPriceLimit                  requests.Float            `position:"Query" name:"SpotPriceLimit"`
80	DeletionProtection              requests.Boolean          `position:"Query" name:"DeletionProtection"`
81	ResourceGroupId                 string                    `position:"Query" name:"ResourceGroupId"`
82	PrivatePoolOptionsMatchCriteria string                    `position:"Query" name:"PrivatePoolOptions.MatchCriteria"`
83	HostName                        string                    `position:"Query" name:"HostName"`
84	Password                        string                    `position:"Query" name:"Password"`
85	DeploymentSetGroupNo            requests.Integer          `position:"Query" name:"DeploymentSetGroupNo"`
86	StorageSetPartitionNumber       requests.Integer          `position:"Query" name:"StorageSetPartitionNumber"`
87	Tag                             *[]CreateInstanceTag      `position:"Query" name:"Tag"  type:"Repeated"`
88	PrivatePoolOptionsId            string                    `position:"Query" name:"PrivatePoolOptions.Id"`
89	AutoRenewPeriod                 requests.Integer          `position:"Query" name:"AutoRenewPeriod"`
90	NodeControllerId                string                    `position:"Query" name:"NodeControllerId"`
91	Period                          requests.Integer          `position:"Query" name:"Period"`
92	DryRun                          requests.Boolean          `position:"Query" name:"DryRun"`
93	OwnerId                         requests.Integer          `position:"Query" name:"OwnerId"`
94	CapacityReservationPreference   string                    `position:"Query" name:"CapacityReservationPreference"`
95	VSwitchId                       string                    `position:"Query" name:"VSwitchId"`
96	PrivateIpAddress                string                    `position:"Query" name:"PrivateIpAddress"`
97	SpotStrategy                    string                    `position:"Query" name:"SpotStrategy"`
98	PeriodUnit                      string                    `position:"Query" name:"PeriodUnit"`
99	InstanceName                    string                    `position:"Query" name:"InstanceName"`
100	AutoRenew                       requests.Boolean          `position:"Query" name:"AutoRenew"`
101	InternetChargeType              string                    `position:"Query" name:"InternetChargeType"`
102	ZoneId                          string                    `position:"Query" name:"ZoneId"`
103	InternetMaxBandwidthIn          requests.Integer          `position:"Query" name:"InternetMaxBandwidthIn"`
104	UseAdditionalService            requests.Boolean          `position:"Query" name:"UseAdditionalService"`
105	Affinity                        string                    `position:"Query" name:"Affinity"`
106	ImageId                         string                    `position:"Query" name:"ImageId"`
107	ClientToken                     string                    `position:"Query" name:"ClientToken"`
108	VlanId                          string                    `position:"Query" name:"VlanId"`
109	SpotInterruptionBehavior        string                    `position:"Query" name:"SpotInterruptionBehavior"`
110	IoOptimized                     string                    `position:"Query" name:"IoOptimized"`
111	SecurityGroupId                 string                    `position:"Query" name:"SecurityGroupId"`
112	InternetMaxBandwidthOut         requests.Integer          `position:"Query" name:"InternetMaxBandwidthOut"`
113	HibernationOptionsConfigured    requests.Boolean          `position:"Query" name:"HibernationOptions.Configured"`
114	Description                     string                    `position:"Query" name:"Description"`
115	SystemDiskCategory              string                    `position:"Query" name:"SystemDisk.Category"`
116	CapacityReservationId           string                    `position:"Query" name:"CapacityReservationId"`
117	SystemDiskPerformanceLevel      string                    `position:"Query" name:"SystemDisk.PerformanceLevel"`
118	UserData                        string                    `position:"Query" name:"UserData"`
119	PasswordInherit                 requests.Boolean          `position:"Query" name:"PasswordInherit"`
120	HttpEndpoint                    string                    `position:"Query" name:"HttpEndpoint"`
121	InstanceType                    string                    `position:"Query" name:"InstanceType"`
122	Arn                             *[]CreateInstanceArn      `position:"Query" name:"Arn"  type:"Repeated"`
123	InstanceChargeType              string                    `position:"Query" name:"InstanceChargeType"`
124	DeploymentSetId                 string                    `position:"Query" name:"DeploymentSetId"`
125	InnerIpAddress                  string                    `position:"Query" name:"InnerIpAddress"`
126	ResourceOwnerAccount            string                    `position:"Query" name:"ResourceOwnerAccount"`
127	OwnerAccount                    string                    `position:"Query" name:"OwnerAccount"`
128	Tenancy                         string                    `position:"Query" name:"Tenancy"`
129	SystemDiskDiskName              string                    `position:"Query" name:"SystemDisk.DiskName"`
130	RamRoleName                     string                    `position:"Query" name:"RamRoleName"`
131	DedicatedHostId                 string                    `position:"Query" name:"DedicatedHostId"`
132	ClusterId                       string                    `position:"Query" name:"ClusterId"`
133	CreditSpecification             string                    `position:"Query" name:"CreditSpecification"`
134	SpotDuration                    requests.Integer          `position:"Query" name:"SpotDuration"`
135	DataDisk                        *[]CreateInstanceDataDisk `position:"Query" name:"DataDisk"  type:"Repeated"`
136	StorageSetId                    string                    `position:"Query" name:"StorageSetId"`
137	SystemDiskSize                  requests.Integer          `position:"Query" name:"SystemDisk.Size"`
138	ImageFamily                     string                    `position:"Query" name:"ImageFamily"`
139	HttpTokens                      string                    `position:"Query" name:"HttpTokens"`
140	SystemDiskDescription           string                    `position:"Query" name:"SystemDisk.Description"`
141}
142
143// CreateInstanceTag is a repeated param struct in CreateInstanceRequest
144type CreateInstanceTag struct {
145	Value string `name:"value"`
146	Key   string `name:"Key"`
147}
148
149// CreateInstanceArn is a repeated param struct in CreateInstanceRequest
150type CreateInstanceArn struct {
151	Rolearn       string `name:"Rolearn"`
152	RoleType      string `name:"RoleType"`
153	AssumeRoleFor string `name:"AssumeRoleFor"`
154}
155
156// CreateInstanceDataDisk is a repeated param struct in CreateInstanceRequest
157type CreateInstanceDataDisk struct {
158	DiskName           string `name:"DiskName"`
159	SnapshotId         string `name:"SnapshotId"`
160	Size               string `name:"Size"`
161	Encrypted          string `name:"Encrypted"`
162	PerformanceLevel   string `name:"PerformanceLevel"`
163	EncryptAlgorithm   string `name:"EncryptAlgorithm"`
164	Description        string `name:"Description"`
165	Category           string `name:"Category"`
166	KMSKeyId           string `name:"KMSKeyId"`
167	Device             string `name:"Device"`
168	DeleteWithInstance string `name:"DeleteWithInstance"`
169}
170
171// CreateInstanceResponse is the response struct for api CreateInstance
172type CreateInstanceResponse struct {
173	*responses.BaseResponse
174	RequestId  string  `json:"RequestId" xml:"RequestId"`
175	InstanceId string  `json:"InstanceId" xml:"InstanceId"`
176	OrderId    string  `json:"OrderId" xml:"OrderId"`
177	TradePrice float64 `json:"TradePrice" xml:"TradePrice"`
178}
179
180// CreateCreateInstanceRequest creates a request to invoke CreateInstance API
181func CreateCreateInstanceRequest() (request *CreateInstanceRequest) {
182	request = &CreateInstanceRequest{
183		RpcRequest: &requests.RpcRequest{},
184	}
185	request.InitWithApiInfo("Ecs", "2014-05-26", "CreateInstance", "ecs", "openAPI")
186	request.Method = requests.POST
187	return
188}
189
190// CreateCreateInstanceResponse creates a response to parse from CreateInstance response
191func CreateCreateInstanceResponse() (response *CreateInstanceResponse) {
192	response = &CreateInstanceResponse{
193		BaseResponse: &responses.BaseResponse{},
194	}
195	return
196}
197