packer-cn/vendor/github.com/denverdino/aliyungo/ecs/vswitches.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
}