forked from denverdino/aliyungo
-
Notifications
You must be signed in to change notification settings - Fork 0
/
zones.go
103 lines (85 loc) · 3.26 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
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
}