135 lines
3.9 KiB
Go
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)
|
|
}
|