1package ess
2
3import "github.com/denverdino/aliyungo/common"
4
5type LifecycleState string
6
7const (
8	Active    = LifecycleState("Active")
9	Inacitve  = LifecycleState("Inacitve")
10	Deleting  = LifecycleState("Deleting")
11	InService = LifecycleState("InService")
12	Pending   = LifecycleState("Pending")
13	Removing  = LifecycleState("Removing")
14)
15
16type CreateScalingGroupArgs struct {
17	RegionId         common.Region
18	ScalingGroupName string
19	LoadBalancerId   string
20	VpcId            string
21	VSwitchId        string
22	MaxSize          int
23	MinSize          int
24	DefaultCooldown  int
25	RemovalPolicy    common.FlattenArray
26	DBInstanceId     common.FlattenArray
27}
28
29type CreateScalingGroupResponse struct {
30	common.Response
31	ScalingGroupId string
32}
33
34// CreateScalingGroup create scaling group
35//
36// You can read doc at https://help.aliyun.com/document_detail/25936.html?spm=5176.doc25940.6.617.vm6LXF
37func (client *Client) CreateScalingGroup(args *CreateScalingGroupArgs) (resp *CreateScalingGroupResponse, err error) {
38	response := CreateScalingGroupResponse{}
39	err = client.InvokeByFlattenMethod("CreateScalingGroup", args, &response)
40
41	if err != nil {
42		return nil, err
43	}
44	return &response, nil
45}
46
47type ModifyScalingGroupArgs struct {
48	ScalingGroupId               string
49	ScalingGroupName             string
50	ActiveScalingConfigurationId string
51	MinSize                      int
52	MaxSize                      int
53	DefaultCooldown              int
54	RemovalPolicy                common.FlattenArray
55}
56
57type ModifyScalingGroupResponse struct {
58	common.Response
59}
60
61// ModifyScalingGroup modify scaling group
62//
63// You can read doc at https://help.aliyun.com/document_detail/25937.html?spm=5176.doc25936.6.618.iwDcXT
64func (client *Client) ModifyScalingGroup(args *ModifyScalingGroupArgs) (resp *ModifyScalingGroupResponse, err error) {
65	response := ModifyScalingGroupResponse{}
66	err = client.InvokeByFlattenMethod("ModifyScalingGroup", args, &response)
67
68	if err != nil {
69		return nil, err
70	}
71	return &response, nil
72}
73
74type DescribeScalingGroupsArgs struct {
75	RegionId         common.Region
76	ScalingGroupId   common.FlattenArray
77	ScalingGroupName common.FlattenArray
78	common.Pagination
79}
80
81type DescribeInstancesResponse struct {
82	common.Response
83	common.PaginationResult
84	ScalingGroups struct {
85		ScalingGroup []ScalingGroupItemType
86	}
87}
88
89type ScalingGroupItemType struct {
90	ScalingGroupId               string
91	ScalingGroupName             string
92	ActiveScalingConfigurationId string
93	RegionId                     string
94	LoadBalancerId               string
95	VSwitchId                    string
96	CreationTime                 string
97	LifecycleState               LifecycleState
98	MinSize                      int
99	MaxSize                      int
100	DefaultCooldown              int
101	TotalCapacity                int
102	ActiveCapacity               int
103	PendingCapacity              int
104	RemovingCapacity             int
105	RemovalPolicies              RemovalPolicySetType
106	DBInstanceIds                DBInstanceIdSetType
107}
108
109type RemovalPolicySetType struct {
110	RemovalPolicy []string
111}
112
113type DBInstanceIdSetType struct {
114	DBInstanceId []string
115}
116
117// DescribeScalingGroups describes scaling groups
118//
119// You can read doc at https://help.aliyun.com/document_detail/25938.html?spm=5176.doc25937.6.619.sUUOT7
120func (client *Client) DescribeScalingGroups(args *DescribeScalingGroupsArgs) (groups []ScalingGroupItemType, pagination *common.PaginationResult, err error) {
121	args.Validate()
122	response := DescribeInstancesResponse{}
123
124	err = client.InvokeByFlattenMethod("DescribeScalingGroups", args, &response)
125
126	if err == nil {
127		return response.ScalingGroups.ScalingGroup, &response.PaginationResult, nil
128	}
129
130	return nil, nil, err
131}
132
133type DescribeScalingInstancesArgs struct {
134	RegionId               common.Region
135	ScalingGroupId         string
136	ScalingConfigurationId string
137	HealthStatus           string
138	CreationType           string
139	LifecycleState         LifecycleState
140	InstanceId             common.FlattenArray
141	common.Pagination
142}
143
144type DescribeScalingInstancesResponse struct {
145	common.Response
146	common.PaginationResult
147	ScalingInstances struct {
148		ScalingInstance []ScalingInstanceItemType
149	}
150}
151
152type ScalingInstanceItemType struct {
153	InstanceId             string
154	ScalingGroupId         string
155	ScalingConfigurationId string
156	HealthStatus           string
157	CreationTime           string
158	CreationType           string
159	LifecycleState         LifecycleState
160}
161
162// DescribeScalingInstances describes scaling instances
163//
164// You can read doc at https://help.aliyun.com/document_detail/25942.html?spm=5176.doc25941.6.623.2xA0Uj
165func (client *Client) DescribeScalingInstances(args *DescribeScalingInstancesArgs) (instances []ScalingInstanceItemType, pagination *common.PaginationResult, err error) {
166	args.Validate()
167	response := DescribeScalingInstancesResponse{}
168
169	err = client.InvokeByFlattenMethod("DescribeScalingInstances", args, &response)
170
171	if err == nil {
172		return response.ScalingInstances.ScalingInstance, &response.PaginationResult, nil
173	}
174
175	return nil, nil, err
176}
177
178type EnableScalingGroupArgs struct {
179	ScalingGroupId               string
180	ActiveScalingConfigurationId string
181	InstanceId                   common.FlattenArray
182}
183
184type EnableScalingGroupResponse struct {
185	common.Response
186}
187
188// EnableScalingGroup enable scaling group
189//
190// You can read doc at https://help.aliyun.com/document_detail/25939.html?spm=5176.doc25938.6.620.JiJhkx
191func (client *Client) EnableScalingGroup(args *EnableScalingGroupArgs) (resp *EnableScalingGroupResponse, err error) {
192	response := EnableScalingGroupResponse{}
193	err = client.InvokeByFlattenMethod("EnableScalingGroup", args, &response)
194
195	if err != nil {
196		return nil, err
197	}
198	return &response, nil
199}
200
201type DisableScalingGroupArgs struct {
202	ScalingGroupId string
203}
204
205type DisableScalingGroupResponse struct {
206	common.Response
207}
208
209// DisableScalingGroup disable scaling group
210//
211// You can read doc at https://help.aliyun.com/document_detail/25940.html?spm=5176.doc25939.6.621.M8GuuY
212func (client *Client) DisableScalingGroup(args *DisableScalingGroupArgs) (resp *DisableScalingGroupResponse, err error) {
213	response := DisableScalingGroupResponse{}
214	err = client.InvokeByFlattenMethod("DisableScalingGroup", args, &response)
215
216	if err != nil {
217		return nil, err
218	}
219	return &response, nil
220}
221
222type DeleteScalingGroupArgs struct {
223	ScalingGroupId string
224	ForceDelete    bool
225}
226
227type DeleteScalingGroupResponse struct {
228	common.Response
229}
230
231// DeleteScalingGroup delete scaling group
232//
233// You can read doc at https://help.aliyun.com/document_detail/25941.html?spm=5176.doc25940.6.622.mRBCuw
234func (client *Client) DeleteScalingGroup(args *DeleteScalingGroupArgs) (resp *DeleteScalingGroupResponse, err error) {
235	response := DeleteScalingGroupResponse{}
236	err = client.InvokeByFlattenMethod("DeleteScalingGroup", args, &response)
237
238	if err != nil {
239		return nil, err
240	}
241	return &response, nil
242}
243
244type AttachInstancesArgs struct {
245	ScalingGroupId string
246	InstanceId     common.FlattenArray
247}
248
249type AttachInstancesResponse struct {
250	common.Response
251	ScalingActivityId string
252}
253
254// AttachInstances attach instances to scaling group
255//
256// You can read doc at https://help.aliyun.com/document_detail/25954.html?spm=5176.product25855.6.633.y5gmzX
257func (client *Client) AttachInstances(args *AttachInstancesArgs) (resp *AttachInstancesResponse, err error) {
258	response := AttachInstancesResponse{}
259	err = client.InvokeByFlattenMethod("AttachInstances", args, &response)
260
261	if err != nil {
262		return nil, err
263	}
264	return &response, nil
265}
266
267// RemoveInstances detach instances from scaling group
268//
269// You can read doc at https://help.aliyun.com/document_detail/25955.html?spm=5176.doc25954.6.634.GtpzuJ
270func (client *Client) RemoveInstances(args *AttachInstancesArgs) (resp *AttachInstancesResponse, err error) {
271	response := AttachInstancesResponse{}
272	err = client.InvokeByFlattenMethod("RemoveInstances", args, &response)
273
274	if err != nil {
275		return nil, err
276	}
277	return &response, nil
278}