2018-04-30 15:47:39 +00:00
|
|
|
|
// API on Network
|
|
|
|
|
|
|
|
|
|
package ecs
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"time"
|
|
|
|
|
|
|
|
|
|
"github.com/denverdino/aliyungo/common"
|
|
|
|
|
"github.com/denverdino/aliyungo/util"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
type AllocatePublicIpAddressArgs struct {
|
|
|
|
|
InstanceId string
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type AllocatePublicIpAddressResponse struct {
|
|
|
|
|
common.Response
|
|
|
|
|
|
|
|
|
|
IpAddress string
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// AllocatePublicIpAddress allocates Public Ip Address
|
|
|
|
|
//
|
|
|
|
|
// You can read doc at http://docs.aliyun.com/#/pub/ecs/open-api/network&allocatepublicipaddress
|
|
|
|
|
func (client *Client) AllocatePublicIpAddress(instanceId string) (ipAddress string, err error) {
|
|
|
|
|
args := AllocatePublicIpAddressArgs{
|
|
|
|
|
InstanceId: instanceId,
|
|
|
|
|
}
|
|
|
|
|
response := AllocatePublicIpAddressResponse{}
|
|
|
|
|
err = client.Invoke("AllocatePublicIpAddress", &args, &response)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return "", err
|
|
|
|
|
}
|
|
|
|
|
return response.IpAddress, nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type ModifyInstanceNetworkSpec struct {
|
|
|
|
|
InstanceId string
|
2020-05-30 14:29:47 +00:00
|
|
|
|
InternetMaxBandwidthOut *int
|
|
|
|
|
InternetMaxBandwidthIn *int
|
|
|
|
|
NetworkChargeType common.InternetChargeType
|
2018-04-30 15:47:39 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type ModifyInstanceNetworkSpecResponse struct {
|
|
|
|
|
common.Response
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// ModifyInstanceNetworkSpec modifies instance network spec
|
|
|
|
|
//
|
|
|
|
|
// You can read doc at http://docs.aliyun.com/#/pub/ecs/open-api/network&modifyinstancenetworkspec
|
|
|
|
|
func (client *Client) ModifyInstanceNetworkSpec(args *ModifyInstanceNetworkSpec) error {
|
|
|
|
|
|
|
|
|
|
response := ModifyInstanceNetworkSpecResponse{}
|
|
|
|
|
return client.Invoke("ModifyInstanceNetworkSpec", args, &response)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type AllocateEipAddressArgs struct {
|
|
|
|
|
RegionId common.Region
|
|
|
|
|
Bandwidth int
|
|
|
|
|
InternetChargeType common.InternetChargeType
|
2020-05-30 14:29:47 +00:00
|
|
|
|
ISP string
|
2018-04-30 15:47:39 +00:00
|
|
|
|
ClientToken string
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type AllocateEipAddressResponse struct {
|
|
|
|
|
common.Response
|
|
|
|
|
EipAddress string
|
|
|
|
|
AllocationId string
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// AllocateEipAddress allocates Eip Address
|
|
|
|
|
//
|
|
|
|
|
// You can read doc at http://docs.aliyun.com/#/pub/ecs/open-api/network&allocateeipaddress
|
|
|
|
|
func (client *Client) AllocateEipAddress(args *AllocateEipAddressArgs) (EipAddress string, AllocationId string, err error) {
|
|
|
|
|
if args.Bandwidth == 0 {
|
|
|
|
|
args.Bandwidth = 5
|
|
|
|
|
}
|
|
|
|
|
response := AllocateEipAddressResponse{}
|
|
|
|
|
err = client.Invoke("AllocateEipAddress", args, &response)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return "", "", err
|
|
|
|
|
}
|
|
|
|
|
return response.EipAddress, response.AllocationId, nil
|
|
|
|
|
}
|
|
|
|
|
|
2020-05-30 14:29:47 +00:00
|
|
|
|
type EipInstanceType string
|
|
|
|
|
|
|
|
|
|
const (
|
|
|
|
|
EcsInstance = "EcsInstance"
|
|
|
|
|
SlbInstance = "SlbInstance"
|
|
|
|
|
Nat = "Nat"
|
|
|
|
|
HaVip = "HaVip"
|
|
|
|
|
)
|
|
|
|
|
|
2018-04-30 15:47:39 +00:00
|
|
|
|
type AssociateEipAddressArgs struct {
|
|
|
|
|
AllocationId string
|
|
|
|
|
InstanceId string
|
2020-05-30 14:29:47 +00:00
|
|
|
|
InstanceType EipInstanceType
|
2018-04-30 15:47:39 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type AssociateEipAddressResponse struct {
|
|
|
|
|
common.Response
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// AssociateEipAddress associates EIP address to VM instance
|
|
|
|
|
//
|
|
|
|
|
// You can read doc at http://docs.aliyun.com/#/pub/ecs/open-api/network&associateeipaddress
|
|
|
|
|
func (client *Client) AssociateEipAddress(allocationId string, instanceId string) error {
|
|
|
|
|
args := AssociateEipAddressArgs{
|
|
|
|
|
AllocationId: allocationId,
|
|
|
|
|
InstanceId: instanceId,
|
|
|
|
|
}
|
|
|
|
|
response := ModifyInstanceNetworkSpecResponse{}
|
|
|
|
|
return client.Invoke("AssociateEipAddress", &args, &response)
|
|
|
|
|
}
|
|
|
|
|
|
2020-05-30 14:29:47 +00:00
|
|
|
|
func (client *Client) NewAssociateEipAddress(args *AssociateEipAddressArgs) error {
|
|
|
|
|
response := ModifyInstanceNetworkSpecResponse{}
|
|
|
|
|
return client.Invoke("AssociateEipAddress", args, &response)
|
|
|
|
|
}
|
|
|
|
|
|
2018-04-30 15:47:39 +00:00
|
|
|
|
// Status of disks
|
|
|
|
|
type EipStatus string
|
|
|
|
|
|
|
|
|
|
const (
|
|
|
|
|
EipStatusAssociating = EipStatus("Associating")
|
|
|
|
|
EipStatusUnassociating = EipStatus("Unassociating")
|
|
|
|
|
EipStatusInUse = EipStatus("InUse")
|
|
|
|
|
EipStatusAvailable = EipStatus("Available")
|
|
|
|
|
)
|
|
|
|
|
|
2020-05-30 14:29:47 +00:00
|
|
|
|
type AssociatedInstanceType string
|
|
|
|
|
|
|
|
|
|
const (
|
|
|
|
|
AssociatedInstanceTypeEcsInstance = AssociatedInstanceType("EcsInstance")
|
|
|
|
|
AssociatedInstanceTypeSlbInstance = AssociatedInstanceType("SlbInstance")
|
|
|
|
|
AssociatedInstanceTypeNat = AssociatedInstanceType("Nat")
|
|
|
|
|
AssociatedInstanceTypeHaVip = AssociatedInstanceType("HaVip")
|
|
|
|
|
)
|
|
|
|
|
|
2018-04-30 15:47:39 +00:00
|
|
|
|
type DescribeEipAddressesArgs struct {
|
2020-05-30 14:29:47 +00:00
|
|
|
|
RegionId common.Region
|
|
|
|
|
Status EipStatus //enum Associating | Unassociating | InUse | Available
|
|
|
|
|
EipAddress string
|
|
|
|
|
AllocationId string
|
|
|
|
|
AssociatedInstanceType AssociatedInstanceType //enum EcsInstance | SlbInstance | Nat | HaVip
|
|
|
|
|
AssociatedInstanceId string //绑定的资源的Id。 这是一个过滤器性质的参数,若不指定,则表示不适用该条件对结果进行过滤。 如果要使用该过滤器,必须同时使用AssociatedInstanceType。若InstanceType为EcsInstance,则此处填写ECS实例Id。若InstanceType为SlbInstance,则此处填写VPC类型的私网SLB 的实例ID。若InstanceType为Nat,则此处填写NAT 的实例ID。。若InstanceType为HaVip,则此处填写HaVipId。
|
2018-04-30 15:47:39 +00:00
|
|
|
|
common.Pagination
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
|
// You can read doc at http://docs.aliyun.com/#/pub/ecs/open-api/datatype&eipaddresssettype
|
|
|
|
|
type EipAddressSetType struct {
|
|
|
|
|
RegionId common.Region
|
|
|
|
|
IpAddress string
|
|
|
|
|
AllocationId string
|
|
|
|
|
Status EipStatus
|
|
|
|
|
InstanceId string
|
2020-05-30 14:29:47 +00:00
|
|
|
|
InstanceType string
|
2018-04-30 15:47:39 +00:00
|
|
|
|
Bandwidth string // Why string
|
|
|
|
|
InternetChargeType common.InternetChargeType
|
|
|
|
|
OperationLocks OperationLocksType
|
|
|
|
|
AllocationTime util.ISO6801Time
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type DescribeEipAddressesResponse struct {
|
|
|
|
|
common.Response
|
|
|
|
|
common.PaginationResult
|
|
|
|
|
EipAddresses struct {
|
|
|
|
|
EipAddress []EipAddressSetType
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// DescribeInstanceStatus describes instance status
|
|
|
|
|
//
|
|
|
|
|
// You can read doc at http://docs.aliyun.com/#/pub/ecs/open-api/network&describeeipaddresses
|
|
|
|
|
func (client *Client) DescribeEipAddresses(args *DescribeEipAddressesArgs) (eipAddresses []EipAddressSetType, pagination *common.PaginationResult, err error) {
|
|
|
|
|
response, err := client.DescribeEipAddressesWithRaw(args)
|
|
|
|
|
if err == nil {
|
|
|
|
|
return response.EipAddresses.EipAddress, &response.PaginationResult, nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return nil, nil, err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (client *Client) DescribeEipAddressesWithRaw(args *DescribeEipAddressesArgs) (response *DescribeEipAddressesResponse, err error) {
|
|
|
|
|
args.Validate()
|
|
|
|
|
response = &DescribeEipAddressesResponse{}
|
|
|
|
|
|
|
|
|
|
err = client.Invoke("DescribeEipAddresses", args, response)
|
|
|
|
|
|
|
|
|
|
if err == nil {
|
|
|
|
|
return response, nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type ModifyEipAddressAttributeArgs struct {
|
|
|
|
|
AllocationId string
|
|
|
|
|
Bandwidth int
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type ModifyEipAddressAttributeResponse struct {
|
|
|
|
|
common.Response
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// ModifyEipAddressAttribute Modifies EIP attribute
|
|
|
|
|
//
|
|
|
|
|
// You can read doc at http://docs.aliyun.com/#/pub/ecs/open-api/network&modifyeipaddressattribute
|
|
|
|
|
func (client *Client) ModifyEipAddressAttribute(allocationId string, bandwidth int) error {
|
|
|
|
|
args := ModifyEipAddressAttributeArgs{
|
|
|
|
|
AllocationId: allocationId,
|
|
|
|
|
Bandwidth: bandwidth,
|
|
|
|
|
}
|
|
|
|
|
response := ModifyEipAddressAttributeResponse{}
|
|
|
|
|
return client.Invoke("ModifyEipAddressAttribute", &args, &response)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type UnallocateEipAddressArgs struct {
|
|
|
|
|
AllocationId string
|
|
|
|
|
InstanceId string
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type UnallocateEipAddressResponse struct {
|
|
|
|
|
common.Response
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// UnassociateEipAddress unallocates Eip Address from instance
|
|
|
|
|
//
|
|
|
|
|
// You can read doc at http://docs.aliyun.com/#/pub/ecs/open-api/network&unassociateeipaddress
|
|
|
|
|
func (client *Client) UnassociateEipAddress(allocationId string, instanceId string) error {
|
|
|
|
|
args := UnallocateEipAddressArgs{
|
|
|
|
|
AllocationId: allocationId,
|
|
|
|
|
InstanceId: instanceId,
|
|
|
|
|
}
|
|
|
|
|
response := UnallocateEipAddressResponse{}
|
|
|
|
|
return client.Invoke("UnassociateEipAddress", &args, &response)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type ReleaseEipAddressArgs struct {
|
|
|
|
|
AllocationId string
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type ReleaseEipAddressResponse struct {
|
|
|
|
|
common.Response
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// ReleaseEipAddress releases Eip address
|
|
|
|
|
//
|
|
|
|
|
// You can read doc at http://docs.aliyun.com/#/pub/ecs/open-api/network&releaseeipaddress
|
|
|
|
|
func (client *Client) ReleaseEipAddress(allocationId string) error {
|
|
|
|
|
args := ReleaseEipAddressArgs{
|
|
|
|
|
AllocationId: allocationId,
|
|
|
|
|
}
|
|
|
|
|
response := ReleaseEipAddressResponse{}
|
|
|
|
|
return client.Invoke("ReleaseEipAddress", &args, &response)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// WaitForVSwitchAvailable waits for VSwitch to given status
|
|
|
|
|
func (client *Client) WaitForEip(regionId common.Region, allocationId string, status EipStatus, timeout int) error {
|
|
|
|
|
if timeout <= 0 {
|
|
|
|
|
timeout = DefaultTimeout
|
|
|
|
|
}
|
|
|
|
|
args := DescribeEipAddressesArgs{
|
|
|
|
|
RegionId: regionId,
|
|
|
|
|
AllocationId: allocationId,
|
|
|
|
|
}
|
|
|
|
|
for {
|
|
|
|
|
eips, _, err := client.DescribeEipAddresses(&args)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
if len(eips) == 0 {
|
|
|
|
|
return common.GetClientErrorFromString("Not found")
|
|
|
|
|
}
|
|
|
|
|
if eips[0].Status == status {
|
|
|
|
|
break
|
|
|
|
|
}
|
|
|
|
|
timeout = timeout - DefaultWaitForInterval
|
|
|
|
|
if timeout <= 0 {
|
|
|
|
|
return common.GetClientErrorFromString("Timeout")
|
|
|
|
|
}
|
|
|
|
|
time.Sleep(DefaultWaitForInterval * time.Second)
|
|
|
|
|
}
|
|
|
|
|
return nil
|
|
|
|
|
}
|