traefik/vendor/github.com/exoscale/egoscale/nics.go
2018-02-12 18:10:05 +01:00

135 lines
3.9 KiB
Go

package egoscale
import (
"fmt"
"net"
)
// Nic represents a Network Interface Controller (NIC)
type Nic struct {
ID string `json:"id,omitempty"`
BroadcastURI string `json:"broadcasturi,omitempty"`
Gateway net.IP `json:"gateway,omitempty"`
IP6Address net.IP `json:"ip6address,omitempty"`
IP6Cidr string `json:"ip6cidr,omitempty"`
IP6Gateway net.IP `json:"ip6gateway,omitempty"`
IPAddress net.IP `json:"ipaddress,omitempty"`
IsDefault bool `json:"isdefault,omitempty"`
IsolationURI string `json:"isolationuri,omitempty"`
MacAddress string `json:"macaddress,omitempty"`
Netmask net.IP `json:"netmask,omitempty"`
NetworkID string `json:"networkid,omitempty"`
NetworkName string `json:"networkname,omitempty"`
SecondaryIP []NicSecondaryIP `json:"secondaryip,omitempty"`
Traffictype string `json:"traffictype,omitempty"`
Type string `json:"type,omitempty"`
VirtualMachineID string `json:"virtualmachineid,omitempty"`
}
// NicSecondaryIP represents a link between NicID and IPAddress
type NicSecondaryIP struct {
ID string `json:"id"`
IPAddress net.IP `json:"ipaddress"`
NetworkID string `json:"networkid"`
NicID string `json:"nicid"`
VirtualMachineID string `json:"virtualmachineid,omitempty"`
}
// ListNics represents the NIC search
type ListNics struct {
VirtualMachineID string `json:"virtualmachineid"`
ForDisplay bool `json:"fordisplay,omitempty"`
Keyword string `json:"keyword,omitempty"`
NetworkID string `json:"networkid,omitempty"`
NicID string `json:"nicid,omitempty"`
Page int `json:"page,omitempty"`
PageSize int `json:"pagesize,omitempty"`
}
func (*ListNics) name() string {
return "listNics"
}
func (*ListNics) response() interface{} {
return new(ListNicsResponse)
}
// ListNicsResponse represents a list of templates
type ListNicsResponse struct {
Count int `json:"count"`
Nic []Nic `json:"nic"`
}
// AddIPToNic represents the assignation of a secondary IP
type AddIPToNic struct {
NicID string `json:"nicid"`
IPAddress net.IP `json:"ipaddress"`
}
func (*AddIPToNic) name() string {
return "addIpToNic"
}
func (*AddIPToNic) asyncResponse() interface{} {
return new(AddIPToNicResponse)
}
// AddIPToNicResponse represents the addition of an IP to a NIC
type AddIPToNicResponse struct {
NicSecondaryIP NicSecondaryIP `json:"nicsecondaryip"`
}
// RemoveIPFromNic represents a deletion request
type RemoveIPFromNic struct {
ID string `json:"id"`
}
func (*RemoveIPFromNic) name() string {
return "removeIpFromNic"
}
func (*RemoveIPFromNic) asyncResponse() interface{} {
return new(booleanAsyncResponse)
}
// ListNics lists the NIC of a VM
//
// Deprecated: use the API directly
func (exo *Client) ListNics(req *ListNics) ([]Nic, error) {
resp, err := exo.Request(req)
if err != nil {
return nil, err
}
return resp.(*ListNicsResponse).Nic, nil
}
// AddIPToNic adds an IP to a NIC
//
// Deprecated: use the API directly
func (exo *Client) AddIPToNic(nicID string, ipAddress string, async AsyncInfo) (*NicSecondaryIP, error) {
ip := net.ParseIP(ipAddress)
if ip == nil {
return nil, fmt.Errorf("%s is not a valid IP address", ipAddress)
}
req := &AddIPToNic{
NicID: nicID,
IPAddress: ip,
}
resp, err := exo.AsyncRequest(req, async)
if err != nil {
return nil, err
}
nic := resp.(AddIPToNicResponse).NicSecondaryIP
return &nic, nil
}
// RemoveIPFromNic removes an IP from a NIC
//
// Deprecated: use the API directly
func (exo *Client) RemoveIPFromNic(secondaryNicID string, async AsyncInfo) error {
req := &RemoveIPFromNic{
ID: secondaryNicID,
}
return exo.BooleanAsyncRequest(req, async)
}