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 159 160 161 162 163 164
|
package ecs
import (
"time"
"github.com/denverdino/aliyungo/common"
"github.com/denverdino/aliyungo/util"
)
type CreateVSwitchArgs struct {
ZoneId string
CidrBlock string
VpcId string
VSwitchName string
Description string
ClientToken string
}
type CreateVSwitchResponse struct {
common.Response
VSwitchId string
}
// CreateVSwitch creates Virtual Switch
//
// You can read doc at http://docs.aliyun.com/#/pub/ecs/open-api/vswitch&createvswitch
func (client *Client) CreateVSwitch(args *CreateVSwitchArgs) (vswitchId string, err error) {
response := CreateVSwitchResponse{}
err = client.Invoke("CreateVSwitch", args, &response)
if err != nil {
return "", err
}
return response.VSwitchId, err
}
type DeleteVSwitchArgs struct {
VSwitchId string
}
type DeleteVSwitchResponse struct {
common.Response
}
// DeleteVSwitch deletes Virtual Switch
//
// You can read doc at http://docs.aliyun.com/#/pub/ecs/open-api/vswitch&deletevswitch
func (client *Client) DeleteVSwitch(VSwitchId string) error {
args := DeleteVSwitchArgs{
VSwitchId: VSwitchId,
}
response := DeleteVSwitchResponse{}
return client.Invoke("DeleteVSwitch", &args, &response)
}
type DescribeVSwitchesArgs struct {
RegionId common.Region
VpcId string
VSwitchId string
ZoneId string
common.Pagination
}
type VSwitchStatus string
const (
VSwitchStatusPending = VSwitchStatus("Pending")
VSwitchStatusAvailable = VSwitchStatus("Available")
)
//
// You can read doc at http://docs.aliyun.com/#/pub/ecs/open-api/datatype&vswitchsettype
type VSwitchSetType struct {
VSwitchId string
VpcId string
Status VSwitchStatus // enum Pending | Available
CidrBlock string
ZoneId string
AvailableIpAddressCount int
Description string
VSwitchName string
IsDefault bool
CreationTime util.ISO6801Time
}
type DescribeVSwitchesResponse struct {
common.Response
common.PaginationResult
VSwitches struct {
VSwitch []VSwitchSetType
}
}
// DescribeVSwitches describes Virtual Switches
//
// You can read doc at http://docs.aliyun.com/#/pub/ecs/open-api/vswitch&describevswitches
func (client *Client) DescribeVSwitches(args *DescribeVSwitchesArgs) (vswitches []VSwitchSetType, pagination *common.PaginationResult, err error) {
args.Validate()
response, err := client.DescribeVSwitchesWithRaw(args)
if err == nil {
return response.VSwitches.VSwitch, &response.PaginationResult, nil
}
return nil, nil, err
}
func (client *Client) DescribeVSwitchesWithRaw(args *DescribeVSwitchesArgs) (response *DescribeVSwitchesResponse, err error) {
args.Validate()
response = &DescribeVSwitchesResponse{}
err = client.Invoke("DescribeVSwitches", args, &response)
if err == nil {
return response, nil
}
return nil, err
}
type ModifyVSwitchAttributeArgs struct {
VSwitchId string
VSwitchName string
Description string
}
type ModifyVSwitchAttributeResponse struct {
common.Response
}
// ModifyVSwitchAttribute modifies attribute of Virtual Private Cloud
//
// You can read doc at http://docs.aliyun.com/#/pub/ecs/open-api/vswitch&modifyvswitchattribute
func (client *Client) ModifyVSwitchAttribute(args *ModifyVSwitchAttributeArgs) error {
response := ModifyVSwitchAttributeResponse{}
return client.Invoke("ModifyVSwitchAttribute", args, &response)
}
// WaitForVSwitchAvailable waits for VSwitch to given status
func (client *Client) WaitForVSwitchAvailable(vpcId string, vswitchId string, timeout int) error {
if timeout <= 0 {
timeout = DefaultTimeout
}
args := DescribeVSwitchesArgs{
VpcId: vpcId,
VSwitchId: vswitchId,
}
for {
vswitches, _, err := client.DescribeVSwitches(&args)
if err != nil {
return err
}
if len(vswitches) == 0 {
return common.GetClientErrorFromString("Not found")
}
if vswitches[0].Status == VSwitchStatusAvailable {
break
}
timeout = timeout - DefaultWaitForInterval
if timeout <= 0 {
return common.GetClientErrorFromString("Timeout")
}
time.Sleep(DefaultWaitForInterval * time.Second)
}
return nil
}
|