1package emr
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// CreateClusterTemplate invokes the emr.CreateClusterTemplate API synchronously
24func (client *Client) CreateClusterTemplate(request *CreateClusterTemplateRequest) (response *CreateClusterTemplateResponse, err error) {
25	response = CreateCreateClusterTemplateResponse()
26	err = client.DoAction(request, response)
27	return
28}
29
30// CreateClusterTemplateWithChan invokes the emr.CreateClusterTemplate API asynchronously
31func (client *Client) CreateClusterTemplateWithChan(request *CreateClusterTemplateRequest) (<-chan *CreateClusterTemplateResponse, <-chan error) {
32	responseChan := make(chan *CreateClusterTemplateResponse, 1)
33	errChan := make(chan error, 1)
34	err := client.AddAsyncTask(func() {
35		defer close(responseChan)
36		defer close(errChan)
37		response, err := client.CreateClusterTemplate(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// CreateClusterTemplateWithCallback invokes the emr.CreateClusterTemplate API asynchronously
53func (client *Client) CreateClusterTemplateWithCallback(request *CreateClusterTemplateRequest, callback func(response *CreateClusterTemplateResponse, err error)) <-chan int {
54	result := make(chan int, 1)
55	err := client.AddAsyncTask(func() {
56		var response *CreateClusterTemplateResponse
57		var err error
58		defer close(result)
59		response, err = client.CreateClusterTemplate(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// CreateClusterTemplateRequest is the request struct for api CreateClusterTemplate
72type CreateClusterTemplateRequest struct {
73	*requests.RpcRequest
74	ResourceOwnerId        requests.Integer                        `position:"Query" name:"ResourceOwnerId"`
75	LogPath                string                                  `position:"Query" name:"LogPath"`
76	MasterPwd              string                                  `position:"Query" name:"MasterPwd"`
77	Configurations         string                                  `position:"Query" name:"Configurations"`
78	SshEnable              requests.Boolean                        `position:"Query" name:"SshEnable"`
79	KeyPairName            string                                  `position:"Query" name:"KeyPairName"`
80	MetaStoreType          string                                  `position:"Query" name:"MetaStoreType"`
81	SecurityGroupName      string                                  `position:"Query" name:"SecurityGroupName"`
82	MachineType            string                                  `position:"Query" name:"MachineType"`
83	ResourceGroupId        string                                  `position:"Query" name:"ResourceGroupId"`
84	BootstrapAction        *[]CreateClusterTemplateBootstrapAction `position:"Query" name:"BootstrapAction"  type:"Repeated"`
85	MetaStoreConf          string                                  `position:"Query" name:"MetaStoreConf"`
86	EmrVer                 string                                  `position:"Query" name:"EmrVer"`
87	Tag                    *[]CreateClusterTemplateTag             `position:"Query" name:"Tag"  type:"Repeated"`
88	IsOpenPublicIp         requests.Boolean                        `position:"Query" name:"IsOpenPublicIp"`
89	Period                 requests.Integer                        `position:"Query" name:"Period"`
90	InstanceGeneration     string                                  `position:"Query" name:"InstanceGeneration"`
91	VSwitchId              string                                  `position:"Query" name:"VSwitchId"`
92	ClusterType            string                                  `position:"Query" name:"ClusterType"`
93	AutoRenew              requests.Boolean                        `position:"Query" name:"AutoRenew"`
94	OptionSoftWareList     *[]string                               `position:"Query" name:"OptionSoftWareList"  type:"Repeated"`
95	NetType                string                                  `position:"Query" name:"NetType"`
96	ZoneId                 string                                  `position:"Query" name:"ZoneId"`
97	UseCustomHiveMetaDb    requests.Boolean                        `position:"Query" name:"UseCustomHiveMetaDb"`
98	InitCustomHiveMetaDb   requests.Boolean                        `position:"Query" name:"InitCustomHiveMetaDb"`
99	IoOptimized            requests.Boolean                        `position:"Query" name:"IoOptimized"`
100	SecurityGroupId        string                                  `position:"Query" name:"SecurityGroupId"`
101	EasEnable              requests.Boolean                        `position:"Query" name:"EasEnable"`
102	DepositType            string                                  `position:"Query" name:"DepositType"`
103	UseLocalMetaDb         requests.Boolean                        `position:"Query" name:"UseLocalMetaDb"`
104	TemplateName           string                                  `position:"Query" name:"TemplateName"`
105	UserDefinedEmrEcsRole  string                                  `position:"Query" name:"UserDefinedEmrEcsRole"`
106	VpcId                  string                                  `position:"Query" name:"VpcId"`
107	HostGroup              *[]CreateClusterTemplateHostGroup       `position:"Query" name:"HostGroup"  type:"Repeated"`
108	Config                 *[]CreateClusterTemplateConfig          `position:"Query" name:"Config"  type:"Repeated"`
109	HighAvailabilityEnable requests.Boolean                        `position:"Query" name:"HighAvailabilityEnable"`
110}
111
112// CreateClusterTemplateBootstrapAction is a repeated param struct in CreateClusterTemplateRequest
113type CreateClusterTemplateBootstrapAction struct {
114	Path                  string `name:"Path"`
115	ExecutionTarget       string `name:"ExecutionTarget"`
116	ExecutionMoment       string `name:"ExecutionMoment"`
117	Arg                   string `name:"Arg"`
118	Name                  string `name:"Name"`
119	ExecutionFailStrategy string `name:"ExecutionFailStrategy"`
120}
121
122// CreateClusterTemplateTag is a repeated param struct in CreateClusterTemplateRequest
123type CreateClusterTemplateTag struct {
124	Value string `name:"Value"`
125	Key   string `name:"Key"`
126}
127
128// CreateClusterTemplateHostGroup is a repeated param struct in CreateClusterTemplateRequest
129type CreateClusterTemplateHostGroup struct {
130	Period             string `name:"Period"`
131	SysDiskCapacity    string `name:"SysDiskCapacity"`
132	DiskCapacity       string `name:"DiskCapacity"`
133	SysDiskType        string `name:"SysDiskType"`
134	ClusterId          string `name:"ClusterId"`
135	DiskType           string `name:"DiskType"`
136	HostGroupName      string `name:"HostGroupName"`
137	VSwitchId          string `name:"VSwitchId"`
138	DiskCount          string `name:"DiskCount"`
139	AutoRenew          string `name:"AutoRenew"`
140	HostGroupId        string `name:"HostGroupId"`
141	NodeCount          string `name:"NodeCount"`
142	InstanceType       string `name:"InstanceType"`
143	Comment            string `name:"Comment"`
144	ChargeType         string `name:"ChargeType"`
145	MultiInstanceTypes string `name:"MultiInstanceTypes"`
146	CreateType         string `name:"CreateType"`
147	HostGroupType      string `name:"HostGroupType"`
148}
149
150// CreateClusterTemplateConfig is a repeated param struct in CreateClusterTemplateRequest
151type CreateClusterTemplateConfig struct {
152	ConfigKey   string `name:"ConfigKey"`
153	FileName    string `name:"FileName"`
154	Encrypt     string `name:"Encrypt"`
155	Replace     string `name:"Replace"`
156	ConfigValue string `name:"ConfigValue"`
157	ServiceName string `name:"ServiceName"`
158}
159
160// CreateClusterTemplateResponse is the response struct for api CreateClusterTemplate
161type CreateClusterTemplateResponse struct {
162	*responses.BaseResponse
163	RequestId         string `json:"RequestId" xml:"RequestId"`
164	ClusterTemplateId string `json:"ClusterTemplateId" xml:"ClusterTemplateId"`
165}
166
167// CreateCreateClusterTemplateRequest creates a request to invoke CreateClusterTemplate API
168func CreateCreateClusterTemplateRequest() (request *CreateClusterTemplateRequest) {
169	request = &CreateClusterTemplateRequest{
170		RpcRequest: &requests.RpcRequest{},
171	}
172	request.InitWithApiInfo("Emr", "2016-04-08", "CreateClusterTemplate", "emr", "openAPI")
173	request.Method = requests.POST
174	return
175}
176
177// CreateCreateClusterTemplateResponse creates a response to parse from CreateClusterTemplate response
178func CreateCreateClusterTemplateResponse() (response *CreateClusterTemplateResponse) {
179	response = &CreateClusterTemplateResponse{
180		BaseResponse: &responses.BaseResponse{},
181	}
182	return
183}
184