open-nomad/vendor/github.com/denverdino/aliyungo/ecs/eni.go
Seth Hoenig 435c0d9fc8 deps: Switch to Go modules for dependency management
This PR switches the Nomad repository from using govendor to Go modules
for managing dependencies. Aspects of the Nomad workflow remain pretty
much the same. The usual Makefile targets should continue to work as
they always did. The API submodule simply defers to the parent Nomad
version on the repository, keeping the semantics of API versioning that
currently exists.
2020-06-02 14:30:36 -05:00

184 lines
5.5 KiB
Go

package ecs
import (
"fmt"
"time"
"github.com/denverdino/aliyungo/common"
)
type CreateNetworkInterfaceArgs struct {
RegionId common.Region
VSwitchId string
PrimaryIpAddress string // optional
SecurityGroupId string
NetworkInterfaceName string // optional
Description string // optional
ClientToken string // optional
}
type CreateNetworkInterfaceResponse struct {
common.Response
NetworkInterfaceId string
}
type DeleteNetworkInterfaceArgs struct {
RegionId common.Region
NetworkInterfaceId string
}
type DeleteNetworkInterfaceResponse struct {
common.Response
}
type DescribeNetworkInterfacesArgs struct {
RegionId common.Region
VSwitchId string
PrimaryIpAddress string
SecurityGroupId string
NetworkInterfaceName string
Type string
InstanceId string
NetworkInterfaceId []string `query:"list"`
PageNumber int
PageSize int
}
type NetworkInterfaceType struct {
NetworkInterfaceId string
NetworkInterfaceName string
PrimaryIpAddress string
MacAddress string
Status string
PrivateIpAddress string
}
type DescribeNetworkInterfacesResponse struct {
common.Response
NetworkInterfaceSets struct {
NetworkInterfaceSet []NetworkInterfaceType
}
TotalCount int
PageNumber int
PageSize int
}
type AttachNetworkInterfaceArgs struct {
RegionId common.Region
NetworkInterfaceId string
InstanceId string
}
type AttachNetworkInterfaceResponse common.Response
type DetachNetworkInterfaceArgs AttachNetworkInterfaceArgs
type DetachNetworkInterfaceResponse common.Response
type ModifyNetworkInterfaceAttributeArgs struct {
RegionId common.Region
NetworkInterfaceId string
SecurityGroupId []string
NetworkInterfaceName string
Description string
}
type ModifyNetworkInterfaceAttributeResponse common.Response
type UnassignPrivateIpAddressesArgs struct {
RegionId common.Region
NetworkInterfaceId string
PrivateIpAddress []string `query:"list"`
}
type UnassignPrivateIpAddressesResponse common.Response
type AssignPrivateIpAddressesArgs struct {
RegionId common.Region
NetworkInterfaceId string
PrivateIpAddress []string `query:"list"` // optional
SecondaryPrivateIpAddressCount int // optional
}
type AssignPrivateIpAddressesResponse common.Response
func (client *Client) CreateNetworkInterface(args *CreateNetworkInterfaceArgs) (resp *CreateNetworkInterfaceResponse, err error) {
resp = &CreateNetworkInterfaceResponse{}
err = client.Invoke("CreateNetworkInterface", args, resp)
return resp, err
}
func (client *Client) DeleteNetworkInterface(args *DeleteNetworkInterfaceArgs) (resp *DeleteNetworkInterfaceResponse, err error) {
resp = &DeleteNetworkInterfaceResponse{}
err = client.Invoke("DeleteNetworkInterface", args, resp)
return resp, err
}
func (client *Client) DescribeNetworkInterfaces(args *DescribeNetworkInterfacesArgs) (resp *DescribeNetworkInterfacesResponse, err error) {
resp = &DescribeNetworkInterfacesResponse{}
err = client.Invoke("DescribeNetworkInterfaces", args, resp)
return resp, err
}
func (client *Client) AttachNetworkInterface(args *AttachNetworkInterfaceArgs) error {
resp := &AttachNetworkInterfaceResponse{}
err := client.Invoke("AttachNetworkInterface", args, resp)
return err
}
func (client *Client) DetachNetworkInterface(args *DetachNetworkInterfaceArgs) (resp *DetachNetworkInterfaceResponse, err error) {
resp = &DetachNetworkInterfaceResponse{}
err = client.Invoke("DetachNetworkInterface", args, resp)
return resp, err
}
func (client *Client) ModifyNetworkInterfaceAttribute(args *ModifyNetworkInterfaceAttributeArgs) (resp *ModifyNetworkInterfaceAttributeResponse, err error) {
resp = &ModifyNetworkInterfaceAttributeResponse{}
err = client.Invoke("ModifyNetworkInterfaceAttribute", args, resp)
return resp, err
}
func (client *Client) UnassignPrivateIpAddresses(args *UnassignPrivateIpAddressesArgs) (resp *UnassignPrivateIpAddressesResponse, err error) {
resp = &UnassignPrivateIpAddressesResponse{}
err = client.Invoke("UnassignPrivateIpAddresses", args, resp)
return resp, err
}
func (client *Client) AssignPrivateIpAddresses(args *AssignPrivateIpAddressesArgs) (resp *AssignPrivateIpAddressesResponse, err error) {
resp = &AssignPrivateIpAddressesResponse{}
err = client.Invoke("AssignPrivateIpAddresses", args, resp)
return resp, err
}
// Default timeout value for WaitForInstance method
const NetworkInterfacesDefaultTimeout = 120
// WaitForInstance waits for instance to given status
func (client *Client) WaitForNetworkInterface(regionId common.Region, eniID string, status string, timeout int) error {
if timeout <= 0 {
timeout = NetworkInterfacesDefaultTimeout
}
for {
eniIds := []string{eniID}
describeNetworkInterfacesArgs := DescribeNetworkInterfacesArgs{
RegionId: regionId,
NetworkInterfaceId: eniIds,
}
nisResponse, err := client.DescribeNetworkInterfaces(&describeNetworkInterfacesArgs)
if err != nil {
return fmt.Errorf("Failed to describe network interface %v: %v", eniID, err)
}
if len(nisResponse.NetworkInterfaceSets.NetworkInterfaceSet) > 0 && nisResponse.NetworkInterfaceSets.NetworkInterfaceSet[0].Status == status {
break
}
timeout = timeout - DefaultWaitForInterval
if timeout <= 0 {
return fmt.Errorf("Timeout for waiting available status for network interfaces")
}
time.Sleep(DefaultWaitForInterval * time.Second)
}
return nil
}