165 lines
4.0 KiB
Go
165 lines
4.0 KiB
Go
|
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
|
||
|
}
|