lxd

package module
v0.0.0-...-8dc4a41 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 25, 2018 License: Apache-2.0 Imports: 27 Imported by: 0

Documentation ¶

Index ¶

Constants ¶

This section is empty.

Variables ¶

View Source
var DefaultConfig = Config{
	Remotes:       DefaultRemotes,
	DefaultRemote: "local",
	Aliases:       map[string]string{},
}
View Source
var DefaultRemotes = map[string]RemoteConfig{
	"images":       ImagesRemote,
	"local":        LocalRemote,
	"ubuntu":       UbuntuRemote,
	"ubuntu-daily": UbuntuDailyRemote}
View Source
var ImagesRemote = RemoteConfig{
	Addr:     "https://images.linuxcontainers.org",
	Public:   true,
	Protocol: "simplestreams"}
View Source
var (
	// LXDErrors are special errors; the client library hoists error codes
	// to these errors internally so that user code can compare against
	// them. We probably shouldn't hoist BadRequest or InternalError, since
	// LXD passes an error string along which is more informative than
	// whatever static error message we would put here.
	LXDErrors = map[int]error{
		http.StatusNotFound: fmt.Errorf("not found"),
	}
)
View Source
var LocalRemote = RemoteConfig{
	Addr:   "unix://",
	Static: true,
	Public: false}
View Source
var StaticRemotes = map[string]RemoteConfig{
	"local":        LocalRemote,
	"ubuntu":       UbuntuRemote,
	"ubuntu-daily": UbuntuDailyRemote}
View Source
var UbuntuDailyRemote = RemoteConfig{
	Addr:     "https://cloud-images.ubuntu.com/daily",
	Static:   true,
	Public:   true,
	Protocol: "simplestreams"}
View Source
var UbuntuRemote = RemoteConfig{
	Addr:     "https://cloud-images.ubuntu.com/releases",
	Static:   true,
	Public:   true,
	Protocol: "simplestreams"}

Functions ¶

func GetLocalLXDErr ¶

func GetLocalLXDErr(err error) error

GetLocalLXDErr determines whether or not an error is likely due to a local LXD configuration issue, and if so, returns the underlying error. GetLocalLXDErr can be used to provide customized error messages to help the user identify basic system issues, e.g. LXD daemon not running.

Returns syscall.ENOENT, syscall.ECONNREFUSED or syscall.EACCES when a local LXD configuration issue is detected, nil otherwise.

func HoistResponse ¶

func HoistResponse(r *http.Response, rtype api.ResponseType) (*api.Response, error)

HoistResponse hoists a regular http response into a response of type rtype or returns a golang error.

func ParseResponse ¶

func ParseResponse(r *http.Response) (*api.Response, error)

ParseResponse parses a lxd style response out of an http.Response. Note that this does _not_ automatically convert error responses to golang errors. To do that, use ParseError. Internal client library uses should probably use HoistResponse, unless they are interested in accessing the underlying Error response (e.g. to inspect the error code).

func SaveConfig ¶

func SaveConfig(c *Config, fname string) error

SaveConfig writes the provided configuration to the config file.

func WebsocketDial ¶

func WebsocketDial(dialer websocket.Dialer, url string) (*websocket.Conn, error)

WebsocketDial attempts to dial a websocket to a LXD instance, parsing LXD-style errors and returning them as go errors.

Types ¶

type Client ¶

type Client struct {
	BaseURL     string
	BaseWSURL   string
	Config      Config
	Name        string
	Remote      *RemoteConfig
	Transport   string
	Certificate string

	Http http.Client
	// contains filtered or unexported fields
}

Client can talk to a LXD daemon.

func NewClient ¶

func NewClient(config *Config, remote string) (*Client, error)

NewClient returns a new LXD client.

func NewClientFromInfo ¶

func NewClientFromInfo(info ConnectInfo) (*Client, error)

NewClientFromInfo returns a new LXD client.

func (*Client) Action ¶

func (c *Client) Action(name string, action shared.ContainerAction, timeout int, force bool, stateful bool) (*api.Response, error)

func (*Client) AddMyCertToServer ¶

func (c *Client) AddMyCertToServer(pwd string) error

func (*Client) Addresses ¶

func (c *Client) Addresses() ([]string, error)

func (*Client) AmTrusted ¶

func (c *Client) AmTrusted() bool

func (*Client) ApplyProfile ¶

func (c *Client) ApplyProfile(container, profile string) (*api.Response, error)

func (*Client) AsyncWaitMeta ¶

func (c *Client) AsyncWaitMeta(resp *api.Response) (map[string]interface{}, error)

func (*Client) CertificateAdd ¶

func (c *Client) CertificateAdd(cert *x509.Certificate, name string) error

func (*Client) CertificateList ¶

func (c *Client) CertificateList() ([]api.Certificate, error)

func (*Client) CertificateRemove ¶

func (c *Client) CertificateRemove(fingerprint string) error

func (*Client) ContainerDeviceAdd ¶

func (c *Client) ContainerDeviceAdd(container, devname, devtype string, props []string) (*api.Response, error)

func (*Client) ContainerDeviceDelete ¶

func (c *Client) ContainerDeviceDelete(container, devname string) (*api.Response, error)

func (*Client) ContainerInfo ¶

func (c *Client) ContainerInfo(name string) (*api.Container, error)

func (*Client) ContainerListDevices ¶

func (c *Client) ContainerListDevices(container string) ([]string, error)

func (*Client) ContainerState ¶

func (c *Client) ContainerState(name string) (*api.ContainerState, error)

func (*Client) CopyImage ¶

func (c *Client) CopyImage(image string, dest *Client, copy_aliases bool, aliases []string, public bool, autoUpdate bool, progressHandler func(progress string)) error

func (*Client) Delete ¶

func (c *Client) Delete(name string) (*api.Response, error)

func (*Client) DeleteAlias ¶

func (c *Client) DeleteAlias(alias string) error

func (*Client) DeleteImage ¶

func (c *Client) DeleteImage(image string) error

func (*Client) Exec ¶

func (c *Client) Exec(name string, cmd []string, env map[string]string,
	stdin io.ReadCloser, stdout io.WriteCloser,
	stderr io.WriteCloser, controlHandler func(*Client, *websocket.Conn),
	width int, height int) (int, error)

Exec runs a command inside the LXD container. For "interactive" use such as `lxc exec ...`, one should pass a controlHandler that talks over the control socket and handles things like SIGWINCH. If running non-interactive, passing a nil controlHandler will cause Exec to return when all of the command output is sent to the output buffers.

func (*Client) ExportImage ¶

func (c *Client) ExportImage(image string, target string) (string, error)

func (*Client) GetAlias ¶

func (c *Client) GetAlias(alias string) string

func (*Client) GetContainerConfig ¶

func (c *Client) GetContainerConfig(container string) ([]string, error)

* return string array representing a container's full configuration

func (*Client) GetImageInfo ¶

func (c *Client) GetImageInfo(image string) (*api.Image, error)

func (*Client) GetLog ¶

func (c *Client) GetLog(container string, log string) (io.Reader, error)

func (*Client) GetMigrationSourceWS ¶

func (c *Client) GetMigrationSourceWS(container string) (*api.Response, error)

func (*Client) GetOperation ¶

func (c *Client) GetOperation(url string) (*api.Operation, error)

func (*Client) GetProfileConfig ¶

func (c *Client) GetProfileConfig(profile string) (map[string]string, error)

func (*Client) GetServerConfig ¶

func (c *Client) GetServerConfig() (*api.Response, error)

func (*Client) GetServerConfigString ¶

func (c *Client) GetServerConfigString() ([]string, error)

func (*Client) ImageFromContainer ¶

func (c *Client) ImageFromContainer(cname string, public bool, aliases []string, properties map[string]string) (string, error)

func (*Client) Init ¶

func (c *Client) Init(name string, imgremote string, image string, profiles *[]string, config map[string]string, ephem bool) (*api.Response, error)

Init creates a container from either a fingerprint or an alias; you must provide at least one.

func (*Client) IsAlias ¶

func (c *Client) IsAlias(alias string) (bool, error)

func (*Client) IsPublic ¶

func (c *Client) IsPublic() bool

func (*Client) ListAliases ¶

func (c *Client) ListAliases() ([]api.ImageAliasesEntry, error)

func (*Client) ListContainers ¶

func (c *Client) ListContainers() ([]api.Container, error)

func (*Client) ListImages ¶

func (c *Client) ListImages() ([]api.Image, error)

func (*Client) ListProfiles ¶

func (c *Client) ListProfiles() ([]string, error)

func (*Client) ListSnapshots ¶

func (c *Client) ListSnapshots(container string) ([]api.ContainerSnapshot, error)

func (*Client) LocalCopy ¶

func (c *Client) LocalCopy(source string, name string, config map[string]string, profiles []string, ephemeral bool) (*api.Response, error)

func (*Client) MigrateFrom ¶

func (c *Client) MigrateFrom(name string, operation string, certificate string, secrets map[string]string, architecture string, config map[string]string, devices map[string]map[string]string, profiles []string, baseImage string, ephemeral bool) (*api.Response, error)

func (*Client) Monitor ¶

func (c *Client) Monitor(types []string, handler func(interface{}), done chan bool) error

func (*Client) PostAlias ¶

func (c *Client) PostAlias(alias string, desc string, target string) error

func (*Client) PostImage ¶

func (c *Client) PostImage(imageFile string, rootfsFile string, properties []string, public bool, aliases []string, progressHandler func(int64, int64)) (string, error)

func (*Client) PostImageURL ¶

func (c *Client) PostImageURL(imageFile string, properties []string, public bool, aliases []string, progressHandler func(progress string)) (string, error)

func (*Client) ProfileConfig ¶

func (c *Client) ProfileConfig(name string) (*api.Profile, error)

func (*Client) ProfileCopy ¶

func (c *Client) ProfileCopy(name, newname string, dest *Client) error

func (*Client) ProfileCreate ¶

func (c *Client) ProfileCreate(p string) error

func (*Client) ProfileDelete ¶

func (c *Client) ProfileDelete(p string) error

func (*Client) ProfileDeviceAdd ¶

func (c *Client) ProfileDeviceAdd(profile, devname, devtype string, props []string) (*api.Response, error)

func (*Client) ProfileDeviceDelete ¶

func (c *Client) ProfileDeviceDelete(profile, devname string) (*api.Response, error)

func (*Client) ProfileListDevices ¶

func (c *Client) ProfileListDevices(profile string) ([]string, error)

func (*Client) PullFile ¶

func (c *Client) PullFile(container string, p string) (int64, int64, int, io.ReadCloser, error)

func (*Client) PushFile ¶

func (c *Client) PushFile(container string, p string, gid int, uid int, mode string, buf io.ReadSeeker) error

func (*Client) PutImageInfo ¶

func (c *Client) PutImageInfo(name string, p api.ImagePut) error

func (*Client) PutProfile ¶

func (c *Client) PutProfile(name string, profile api.ProfilePut) error

func (*Client) Rename ¶

func (c *Client) Rename(name string, newName string) (*api.Response, error)

func (*Client) RestoreSnapshot ¶

func (c *Client) RestoreSnapshot(container string, snapshotName string, stateful bool) (*api.Response, error)

func (*Client) ServerStatus ¶

func (c *Client) ServerStatus() (*api.Server, error)

func (*Client) SetContainerConfig ¶

func (c *Client) SetContainerConfig(container, key, value string) error

func (*Client) SetProfileConfigItem ¶

func (c *Client) SetProfileConfigItem(profile, key, value string) error

func (*Client) SetServerConfig ¶

func (c *Client) SetServerConfig(key string, value string) (*api.Response, error)

func (*Client) Snapshot ¶

func (c *Client) Snapshot(container string, snapshotName string, stateful bool) (*api.Response, error)

func (*Client) SnapshotInfo ¶

func (c *Client) SnapshotInfo(snapName string) (*api.ContainerSnapshot, error)

func (*Client) UpdateContainerConfig ¶

func (c *Client) UpdateContainerConfig(container string, st api.ContainerPut) error

func (*Client) UpdateServerConfig ¶

func (c *Client) UpdateServerConfig(ss api.ServerPut) (*api.Response, error)

func (*Client) WaitFor ¶

func (c *Client) WaitFor(waitURL string) (*api.Operation, error)

Wait for an operation

func (*Client) WaitForSuccess ¶

func (c *Client) WaitForSuccess(waitURL string) error

func (*Client) WaitForSuccessOp ¶

func (c *Client) WaitForSuccessOp(waitURL string) (*api.Operation, error)

func (*Client) Websocket ¶

func (c *Client) Websocket(operation string, secret string) (*websocket.Conn, error)

type Config ¶

type Config struct {
	// DefaultRemote holds the remote daemon name from the Remotes map
	// that the client should communicate with by default.
	// If empty it defaults to "local".
	DefaultRemote string `yaml:"default-remote"`

	// Remotes defines a map of remote daemon names to the details for
	// communication with the named daemon.
	// The implicit "local" remote is always available and communicates
	// with the local daemon over a unix socket.
	Remotes map[string]RemoteConfig `yaml:"remotes"`

	// Command line aliases for `lxc`
	Aliases map[string]string `yaml:"aliases"`

	// This is the path to the config directory, so the client can find
	// previously stored server certs, give good error messages, and save
	// new server certs, etc.
	//
	// We don't need to store it, because of course once we've loaded this
	// structure we already know where it is :)
	ConfigDir string `yaml:"-"`
}

Config holds settings to be used by a client or daemon.

func LoadConfig ¶

func LoadConfig(path string) (*Config, error)

LoadConfig reads the configuration from the config path; if the path does not exist, it returns a default configuration.

func (*Config) ConfigPath ¶

func (c *Config) ConfigPath(file string) string

func (*Config) ParseRemote ¶

func (c *Config) ParseRemote(raw string) string

func (*Config) ParseRemoteAndContainer ¶

func (c *Config) ParseRemoteAndContainer(raw string) (string, string)

func (*Config) ServerCertPath ¶

func (c *Config) ServerCertPath(name string) string

type ConnectInfo ¶

type ConnectInfo struct {
	// Name is a simple identifier for the remote server. In 'lxc' it is
	// the name used to lookup the address and other information in the
	// config.yml file.
	Name string
	// RemoteConfig is the information about the Remote that we are
	// connecting to. This includes information like if the remote is
	// Public and/or Static.
	RemoteConfig RemoteConfig
	// ClientPEMCert is the PEM encoded bytes of the client's certificate.
	// If Addr indicates a Unix socket, the certificate and key bytes will
	// not be used.
	ClientPEMCert string
	// ClientPEMKey is the PEM encoded private bytes of the client's key associated with its certificate
	ClientPEMKey string
	// ServerPEMCert is the PEM encoded server certificate that we are
	// connecting to. It can be the empty string if we do not know the
	// server's certificate yet.
	ServerPEMCert string
}

ConnectInfo contains the information we need to connect to a specific LXD server

type RemoteConfig ¶

type RemoteConfig struct {
	Addr     string `yaml:"addr"`
	Public   bool   `yaml:"public"`
	Protocol string `yaml:"protocol,omitempty"`
	Static   bool   `yaml:"-"`
}

RemoteConfig holds details for communication with a remote daemon.

Directories ¶

Path Synopsis
Package lxd implements a client for the LXD API Overview This package lets you connect to LXD daemons or SimpleStream image servers over a Unix socket or HTTPs.
Package lxd implements a client for the LXD API Overview This package lets you connect to LXD daemons or SimpleStream image servers over a Unix socket or HTTPs.
dist
lxc
lxd
* * This file is a bit funny.
* * This file is a bit funny.
lxd-bridge
That this code needs to exist is kind of dumb, but I'm not sure how else to do it.
That this code needs to exist is kind of dumb, but I'm not sure how else to do it.
test

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL