1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154
|
package lxd
import (
"fmt"
"net/url"
"github.com/canonical/lxd/shared/api"
)
// GetNetworkNames returns a list of network names.
func (r *ProtocolLXD) GetNetworkNames() ([]string, error) {
if !r.HasExtension("network") {
return nil, fmt.Errorf("The server is missing the required \"network\" API extension")
}
// Fetch the raw values.
urls := []string{}
baseURL := "/networks"
_, err := r.queryStruct("GET", baseURL, nil, "", &urls)
if err != nil {
return nil, err
}
// Parse it.
return urlsToResourceNames(baseURL, urls...)
}
// GetNetworks returns a list of Network struct.
func (r *ProtocolLXD) GetNetworks() ([]api.Network, error) {
if !r.HasExtension("network") {
return nil, fmt.Errorf("The server is missing the required \"network\" API extension")
}
networks := []api.Network{}
// Fetch the raw value
_, err := r.queryStruct("GET", "/networks?recursion=1", nil, "", &networks)
if err != nil {
return nil, err
}
return networks, nil
}
// GetNetwork returns a Network entry for the provided name.
func (r *ProtocolLXD) GetNetwork(name string) (*api.Network, string, error) {
if !r.HasExtension("network") {
return nil, "", fmt.Errorf("The server is missing the required \"network\" API extension")
}
network := api.Network{}
// Fetch the raw value
etag, err := r.queryStruct("GET", fmt.Sprintf("/networks/%s", url.PathEscape(name)), nil, "", &network)
if err != nil {
return nil, "", err
}
return &network, etag, nil
}
// GetNetworkLeases returns a list of Network struct.
func (r *ProtocolLXD) GetNetworkLeases(name string) ([]api.NetworkLease, error) {
if !r.HasExtension("network_leases") {
return nil, fmt.Errorf("The server is missing the required \"network_leases\" API extension")
}
leases := []api.NetworkLease{}
// Fetch the raw value
_, err := r.queryStruct("GET", fmt.Sprintf("/networks/%s/leases", url.PathEscape(name)), nil, "", &leases)
if err != nil {
return nil, err
}
return leases, nil
}
// GetNetworkState returns metrics and information on the running network.
func (r *ProtocolLXD) GetNetworkState(name string) (*api.NetworkState, error) {
if !r.HasExtension("network_state") {
return nil, fmt.Errorf("The server is missing the required \"network_state\" API extension")
}
state := api.NetworkState{}
// Fetch the raw value
_, err := r.queryStruct("GET", fmt.Sprintf("/networks/%s/state", url.PathEscape(name)), nil, "", &state)
if err != nil {
return nil, err
}
return &state, nil
}
// CreateNetwork defines a new network using the provided Network struct.
func (r *ProtocolLXD) CreateNetwork(network api.NetworksPost) error {
if !r.HasExtension("network") {
return fmt.Errorf("The server is missing the required \"network\" API extension")
}
// Send the request
_, _, err := r.query("POST", "/networks", network, "")
if err != nil {
return err
}
return nil
}
// UpdateNetwork updates the network to match the provided Network struct.
func (r *ProtocolLXD) UpdateNetwork(name string, network api.NetworkPut, ETag string) error {
if !r.HasExtension("network") {
return fmt.Errorf("The server is missing the required \"network\" API extension")
}
// Send the request
_, _, err := r.query("PUT", fmt.Sprintf("/networks/%s", url.PathEscape(name)), network, ETag)
if err != nil {
return err
}
return nil
}
// RenameNetwork renames an existing network entry.
func (r *ProtocolLXD) RenameNetwork(name string, network api.NetworkPost) error {
if !r.HasExtension("network") {
return fmt.Errorf("The server is missing the required \"network\" API extension")
}
// Send the request
_, _, err := r.query("POST", fmt.Sprintf("/networks/%s", url.PathEscape(name)), network, "")
if err != nil {
return err
}
return nil
}
// DeleteNetwork deletes an existing network.
func (r *ProtocolLXD) DeleteNetwork(name string) error {
if !r.HasExtension("network") {
return fmt.Errorf("The server is missing the required \"network\" API extension")
}
// Send the request
_, _, err := r.query("DELETE", fmt.Sprintf("/networks/%s", url.PathEscape(name)), nil, "")
if err != nil {
return err
}
return nil
}
|