File: zones.go

package info (click to toggle)
golang-github-denverdino-aliyungo 0.0~git20180921.13fa8aa-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye
  • size: 1,824 kB
  • sloc: xml: 1,359; makefile: 3
file content (158 lines) | stat: -rw-r--r-- 4,582 bytes parent folder | download | duplicates (3)
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
}