forked from denverdino/aliyungo
/
zones.go
158 lines (132 loc) · 4.47 KB
/
zones.go
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
package ecs
import (
"github.com/denverdino/aliyungo/common"
)
type ResourceType string
const (
ResourceTypeInstance = ResourceType("Instance")
ResourceTypeDisk = ResourceType("Disk")
ResourceTypeVSwitch = ResourceType("VSwitch")
ResourceTypeIOOptimizedInstance = ResourceType("IoOptimized")
)
// The sub-item of the type AvailableResourcesType
type SupportedResourceType string
const (
SupportedInstanceType = SupportedResourceType("supportedInstanceType")
SupportedInstanceTypeFamily = SupportedResourceType("supportedInstanceTypeFamily")
SupportedInstanceGeneration = SupportedResourceType("supportedInstanceGeneration")
SupportedSystemDiskCategory = SupportedResourceType("supportedSystemDiskCategory")
SupportedDataDiskCategory = SupportedResourceType("supportedDataDiskCategory")
SupportedNetworkCategory = SupportedResourceType("supportedNetworkCategory")
)
//
// You can read doc at https://help.aliyun.com/document_detail/25670.html?spm=5176.doc25640.2.1.J24zQt
type ResourcesInfoType struct {
ResourcesInfo []AvailableResourcesType
}
// Because the sub-item of AvailableResourcesType starts with supported and golang struct cann't refer them, this uses map to parse ResourcesInfo
type AvailableResourcesType struct {
IoOptimized bool
NetworkTypes map[SupportedResourceType][]string
InstanceGenerations map[SupportedResourceType][]string
InstanceTypeFamilies map[SupportedResourceType][]string
InstanceTypes map[SupportedResourceType][]string
SystemDiskCategories map[SupportedResourceType][]DiskCategory
DataDiskCategories map[SupportedResourceType][]DiskCategory
}
type DescribeZonesArgs struct {
RegionId common.Region
}
//
// You can read doc at http://docs.aliyun.com/#/pub/ecs/open-api/datatype&availableresourcecreationtype
type AvailableResourceCreationType struct {
ResourceTypes []ResourceType //enum for Instance, Disk, VSwitch
}
//
// You can read doc at http://docs.aliyun.com/#/pub/ecs/open-api/datatype&availablediskcategoriestype
type AvailableDiskCategoriesType struct {
DiskCategories []DiskCategory //enum for cloud, ephemeral, ephemeral_ssd
}
type AvailableInstanceTypesType struct {
InstanceTypes []string
}
//
// You can read doc at http://docs.aliyun.com/#/pub/ecs/open-api/datatype&zonetype
type ZoneType struct {
ZoneId string
LocalName string
AvailableResources ResourcesInfoType
AvailableInstanceTypes AvailableInstanceTypesType
AvailableResourceCreation AvailableResourceCreationType
AvailableDiskCategories AvailableDiskCategoriesType
}
type DescribeZonesResponse struct {
common.Response
Zones struct {
Zone []ZoneType
}
}
// DescribeZones describes zones
func (client *Client) DescribeZones(regionId common.Region) (zones []ZoneType, err error) {
response, err := client.DescribeZonesWithRaw(regionId)
if err == nil {
return response.Zones.Zone, nil
}
return []ZoneType{}, err
}
func (client *Client) DescribeZonesWithRaw(regionId common.Region) (response *DescribeZonesResponse, err error) {
args := DescribeZonesArgs{
RegionId: regionId,
}
response = &DescribeZonesResponse{}
err = client.Invoke("DescribeZones", &args, response)
if err == nil {
return response, nil
}
return nil, err
}
type DescribeAvailableResourceArgs struct {
RegionId string
DestinationResource string
ZoneId string
InstanceChargeType string
SpotStrategy string
IoOptimized string
InstanceType string
SystemDiskCategory string
DataDiskCategory string
NetworkCategory string
}
type DescribeAvailableResourceResponse struct {
common.Response
AvailableZones struct {
AvailableZone []AvailableZoneType
}
}
type AvailableZoneType struct {
RegionId string
ZoneId string
Status string
AvailableResources struct {
AvailableResource []NewAvailableResourcesType
}
}
type NewAvailableResourcesType struct {
Type string
SupportedResources struct {
SupportedResource []SupportedResourcesType
}
}
type SupportedResourcesType struct {
Value string
Status string
Min string
Max string
Unit string
}
// https://www.alibabacloud.com/help/doc-detail/66186.htm
func (client *Client) DescribeAvailableResource(args *DescribeAvailableResourceArgs) (response *DescribeAvailableResourceResponse, err error) {
response = &DescribeAvailableResourceResponse{}
err = client.Invoke("DescribeAvailableResource", args, response)
return response, err
}