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
}
|