435c0d9fc8
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.
184 lines
5.5 KiB
Go
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
|
|
}
|