Documentation ¶
Index ¶
- Constants
- Variables
- func AddSlash(path string) string
- func AllocatePort() (int, error)
- func AtoiEmptyDefault(s string, def int) (int, error)
- func CachePath(path ...string) string
- func CertFingerprint(cert *x509.Certificate) string
- func CertFingerprintStr(c string) (string, error)
- func ConfigKeyChecker(key string) (func(value string) error, error)
- func DebugJson(r *bytes.Buffer)
- func DeepCopy(src, dest interface{}) error
- func DefaultWriter(conn *websocket.Conn, w io.WriteCloser, writeDone chan<- bool)
- func DetectCompression(fname string) ([]string, string, []string, error)
- func DetectCompressionFile(f io.Reader) ([]string, string, []string, error)
- func DeviceTotalMemory() (int64, error)
- func DirCopy(source string, dest string) error
- func DownloadFileHash(httpClient *http.Client, useragent string, ...) (int64, error)
- func EscapePathFstab(path string) string
- func ExecReaderToChannel(r io.Reader, bufferSize int, exited <-chan bool, fd int) <-chan []byte
- func FileCopy(source string, dest string) error
- func FileMove(oldPath string, newPath string) error
- func FindOrGenCert(certf string, keyf string, certtype bool, addHosts bool) error
- func GenCert(certf string, keyf string, certtype bool, addHosts bool) error
- func GenerateMemCert(client bool, addHosts bool) ([]byte, []byte, error)
- func GetAllXattr(path string) (xattrs map[string]string, err error)
- func GetErrno(err error) (errno error, iserrno bool)
- func GetFileStat(p string) (uid int, gid int, major uint32, minor uint32, inode uint64, nlink int, ...)
- func GetOwnerMode(fInfo os.FileInfo) (os.FileMode, int, int)
- func GetPathMode(path string) (os.FileMode, error)
- func GetPollRevents(fd int, timeout int, flags int) (int, int, error)
- func GetRemoteCertificate(address string, useragent string) (*x509.Certificate, error)
- func GetRootDiskDevice(devices map[string]map[string]string) (string, map[string]string, error)
- func GetSnapshotExpiry(refDate time.Time, s string) (time.Time, error)
- func GetTLSConfig(tlsClientCertFile string, tlsClientKeyFile string, tlsClientCAFile string, ...) (*tls.Config, error)
- func GetTLSConfigMem(tlsClientCert string, tlsClientKey string, tlsClientCA string, ...) (*tls.Config, error)
- func GroupId(name string) (int, error)
- func HostPath(path string) string
- func HostPathFollow(path string) string
- func InitTLSConfig() *tls.Config
- func InstanceGetParentAndSnapshotName(name string) (string, string, bool)
- func Int64InSlice(key int64, list []int64) bool
- func IntInSlice(key int, list []int) bool
- func IsAny(value string) error
- func IsBlockdev(fm os.FileMode) bool
- func IsBlockdevPath(pathName string) bool
- func IsBool(value string) error
- func IsDeviceID(value string) error
- func IsDir(name string) bool
- func IsInt64(value string) error
- func IsLoopback(iface *net.Interface) bool
- func IsMountPoint(name string) bool
- func IsNotEmpty(value string) error
- func IsOneOf(value string, valid []string) error
- func IsPriority(value string) error
- func IsRootDiskDevice(device map[string]string) bool
- func IsSize(value string) error
- func IsSnapshot(name string) bool
- func IsTrue(value string) bool
- func IsUint32(value string) error
- func IsUint8(value string) error
- func IsUnixDev(path string) bool
- func IsUnixSocket(path string) bool
- func LogPath(path ...string) string
- func LookupUUIDByBlockDevPath(diskDevice string) (string, error)
- func MkdirAllOwner(path string, perm os.FileMode, uid int, gid int) error
- func NetworkGetCounters(ifName string) api.NetworkStateCounters
- func OpenPty(uid, gid int64) (master *os.File, slave *os.File, err error)
- func ParseLXDFileHeaders(headers http.Header) (uid int64, gid int64, mode int, type_ string, write string)
- func ParseMetadata(metadata interface{}) (map[string]interface{}, error)
- func ParseNumberFromFile(file string) (int64, error)
- func PathExists(name string) bool
- func PathIsEmpty(path string) (bool, error)
- func Pipe() (master *os.File, slave *os.File, err error)
- func ProxyFromConfig(httpsProxy string, httpProxy string, noProxy string) func(req *http.Request) (*url.URL, error)
- func ProxyFromEnvironment(req *http.Request) (*url.URL, error)
- func RFC3493Dialer(network, address string) (net.Conn, error)
- func RandomCryptoString() (string, error)
- func ReadCert(fpath string) (*x509.Certificate, error)
- func ReadStdin() ([]byte, error)
- func ReadToJSON(r io.Reader, req interface{}) error
- func ReaderToChannel(r io.Reader, bufferSize int) <-chan []byte
- func RemoveDuplicatesFromString(s string, sep string) string
- func RenderTemplate(template string, ctx pongo2.Context) (string, error)
- func RunCommand(name string, arg ...string) (string, error)
- func RunCommandCLocale(name string, arg ...string) (string, error)
- func RunCommandSplit(env []string, name string, arg ...string) (string, string, error)
- func RunCommandWithFds(stdin io.Reader, stdout io.Writer, name string, arg ...string) error
- func RunningInUserNS() bool
- func SetProgressMetadata(metadata map[string]interface{}, stage, displayPrefix string, ...)
- func SetSize(fd int, width int, height int) (err error)
- func SplitExt(fpath string) (string, string)
- func Statvfs(path string) (*unix.Statfs_t, error)
- func StringInSlice(key string, list []string) bool
- func StringMapHasStringKey(m map[string]string, keys ...string) bool
- func TextEditor(inPath string, inContent []byte) ([]byte, error)
- func TimeIsSet(ts time.Time) bool
- func TryRunCommand(name string, arg ...string) (string, error)
- func URLEncode(path string, query map[string]string) (string, error)
- func Uint64InSlice(key uint64, list []uint64) bool
- func Unpack(file string, path string, blockBackend bool, runningInUserns bool, ...) error
- func UserId(name string) (int, error)
- func ValidHostname(name string) error
- func VarPath(path ...string) string
- func WebsocketConsoleMirror(conn *websocket.Conn, w io.WriteCloser, r io.ReadCloser) (chan bool, chan bool)
- func WebsocketMirror(conn *websocket.Conn, w io.WriteCloser, r io.ReadCloser, ...) (chan bool, chan bool)
- func WebsocketProxy(source *websocket.Conn, target *websocket.Conn) chan bool
- func WebsocketRecvStream(w io.Writer, conn *websocket.Conn) chan bool
- func WebsocketSendStream(conn *websocket.Conn, r io.Reader, bufferSize int) chan bool
- func WriteAll(w io.Writer, data []byte) error
- func WriteTempFile(dir string, prefix string, content string) (string, error)
- type BytesReadCloser
- type CertInfo
- type CertKind
- type InstanceAction
- type Jmap
- type ReadSeeker
- type RunError
- type Utsname
- type WebSocketMirrorReader
- type WebSocketMirrorWriter
- type WebsocketIO
Constants ¶
const ABSTRACT_UNIX_SOCK_LEN int = C.ABSTRACT_UNIX_SOCK_LEN
const DefaultPort = "8443"
const POLLERR int = C.POLLERR
const POLLHUP int = C.POLLHUP
const POLLIN int = C.POLLIN
const POLLNVAL int = C.POLLNVAL
const POLLPRI int = C.POLLPRI
const POLLRDHUP int = C.POLLRDHUP
const SnapshotDelimiter = "/"
Variables ¶
var HugePageSizeKeys = [...]string{"limits.hugepages.64KB", "limits.hugepages.1MB", "limits.hugepages.2MB", "limits.hugepages.1GB"}
HugePageSizeKeys is a list of known hugepage size configuration keys.
var HugePageSizeSuffix = [...]string{"64KB", "1MB", "2MB", "1GB"}
HugePageSizeSuffix contains the list of known hugepage size suffixes.
var KnownInstanceConfigKeys = map[string]func(value string) error{ "boot.autostart": IsBool, "boot.autostart.delay": IsInt64, "boot.autostart.priority": IsInt64, "boot.stop.priority": IsInt64, "boot.host_shutdown_timeout": IsInt64, "limits.cpu": func(value string) error { if value == "" { return nil } match, _ := regexp.MatchString("^[-,0-9]*$", value) if !match { return fmt.Errorf("Invalid CPU limit syntax") } if strings.HasPrefix(value, "-") || strings.HasPrefix(value, ",") { return fmt.Errorf("CPU limit can't start with a separator") } if strings.HasSuffix(value, "-") || strings.HasSuffix(value, ",") { return fmt.Errorf("CPU limit can't end with a separator") } return nil }, "limits.cpu.allowance": func(value string) error { if value == "" { return nil } if strings.HasSuffix(value, "%") { _, err := strconv.Atoi(strings.TrimSuffix(value, "%")) if err != nil { return err } return nil } fields := strings.SplitN(value, "/", 2) if len(fields) != 2 { return fmt.Errorf("Invalid allowance: %s", value) } _, err := strconv.Atoi(strings.TrimSuffix(fields[0], "ms")) if err != nil { return err } _, err = strconv.Atoi(strings.TrimSuffix(fields[1], "ms")) if err != nil { return err } return nil }, "limits.cpu.priority": IsPriority, "limits.disk.priority": IsPriority, "limits.hugepages.64KB": IsSize, "limits.hugepages.1MB": IsSize, "limits.hugepages.2MB": IsSize, "limits.hugepages.1GB": IsSize, "limits.memory": func(value string) error { if value == "" { return nil } if strings.HasSuffix(value, "%") { _, err := strconv.ParseInt(strings.TrimSuffix(value, "%"), 10, 64) if err != nil { return err } return nil } _, err := units.ParseByteSizeString(value) if err != nil { return err } return nil }, "limits.memory.enforce": func(value string) error { return IsOneOf(value, []string{"soft", "hard"}) }, "limits.memory.swap": IsBool, "limits.memory.swap.priority": IsPriority, "limits.memory.hugepages": IsBool, "limits.network.priority": IsPriority, "limits.processes": IsInt64, "linux.kernel_modules": IsAny, "migration.incremental.memory": IsBool, "migration.incremental.memory.iterations": IsUint32, "migration.incremental.memory.goal": IsUint32, "nvidia.runtime": IsBool, "nvidia.driver.capabilities": IsAny, "nvidia.require.cuda": IsAny, "nvidia.require.driver": IsAny, "security.nesting": IsBool, "security.privileged": IsBool, "security.devlxd": IsBool, "security.devlxd.images": IsBool, "security.protection.delete": IsBool, "security.protection.shift": IsBool, "security.idmap.base": IsUint32, "security.idmap.isolated": IsBool, "security.idmap.size": IsUint32, "security.secureboot": IsBool, "security.syscalls.blacklist_default": IsBool, "security.syscalls.blacklist_compat": IsBool, "security.syscalls.blacklist": IsAny, "security.syscalls.intercept.mknod": IsBool, "security.syscalls.intercept.mount": IsBool, "security.syscalls.intercept.mount.allowed": IsAny, "security.syscalls.intercept.mount.fuse": IsAny, "security.syscalls.intercept.mount.shift": IsBool, "security.syscalls.intercept.setxattr": IsBool, "security.syscalls.whitelist": IsAny, "snapshots.schedule": func(value string) error { if value == "" { return nil } if len(strings.Split(value, " ")) != 5 { return fmt.Errorf("Schedule must be of the form: <minute> <hour> <day-of-month> <month> <day-of-week>") } _, err := cron.Parse(fmt.Sprintf("* %s", value)) if err != nil { return errors.Wrap(err, "Error parsing schedule") } return nil }, "snapshots.schedule.stopped": IsBool, "snapshots.pattern": IsAny, "snapshots.expiry": func(value string) error { _, err := GetSnapshotExpiry(time.Time{}, value) return err }, "raw.apparmor": IsAny, "raw.idmap": IsAny, "raw.lxc": IsAny, "raw.qemu": IsAny, "raw.seccomp": IsAny, "volatile.apply_template": IsAny, "volatile.base_image": IsAny, "volatile.last_state.idmap": IsAny, "volatile.last_state.power": IsAny, "volatile.idmap.base": IsAny, "volatile.idmap.current": IsAny, "volatile.idmap.next": IsAny, "volatile.apply_quota": IsAny, }
KnownInstanceConfigKeys maps all fully defined, well-known config keys to an appropriate checker function, which validates whether or not a given value is syntactically legal.
var ObjectFound = fmt.Errorf("Found requested object")
Functions ¶
func AddSlash ¶
AddSlash adds a slash to the end of paths if they don't already have one. This can be useful for rsyncing things, since rsync has behavior present on the presence or absence of a trailing slash.
func AllocatePort ¶
AllocatePort asks the kernel for a free open port that is ready to use
func CachePath ¶
CachePath returns the directory that LXD should its cache under. If LXD_DIR is set, this path is $LXD_DIR/cache, otherwise it is /var/cache/lxd.
func CertFingerprint ¶
func CertFingerprint(cert *x509.Certificate) string
func CertFingerprintStr ¶
func ConfigKeyChecker ¶
ConfigKeyChecker returns a function that will check whether or not a provide value is valid for the associate config key. Returns an error if the key is not known. The checker function only performs syntactic checking of the value, semantic and usage checking must be done by the caller. User defined keys are always considered to be valid, e.g. user.* and environment.* keys.
func DeepCopy ¶
func DeepCopy(src, dest interface{}) error
DeepCopy copies src to dest by using encoding/gob so its not that fast.
func DefaultWriter ¶
func DefaultWriter(conn *websocket.Conn, w io.WriteCloser, writeDone chan<- bool)
func DetectCompressionFile ¶
DetectCompressionFile detects the compression type of a file and returns the tar arguments needed to unpack the file, compression type (in the form of a file extension), and the command needed to decompress the file to an uncompressed tarball.
func DeviceTotalMemory ¶
func DownloadFileHash ¶
func EscapePathFstab ¶
EscapePathFstab escapes a path fstab-style. This ensures that getmntent_r() and friends can correctly parse stuff like /some/wacky path with spaces /some/wacky target with spaces
func ExecReaderToChannel ¶
Extensively commented directly in the code. Please leave the comments! Looking at this in a couple of months noone will know why and how this works anymore.
func FileMove ¶
FileMove tries to move a file by using os.Rename, if that fails it tries to copy the file and remove the source.
func FindOrGenCert ¶
FindOrGenCert generates a keypair if needed. The type argument is false for server, true for client.
func GenerateMemCert ¶
GenerateMemCert creates client or server certificate and key pair, returning them as byte arrays in memory.
func GetAllXattr ¶
GetAllXattr retrieves all extended attributes associated with a file, directory or symbolic link.
func GetFileStat ¶
func GetPathMode ¶
GetPathMode returns a os.FileMode for the provided path
func GetRemoteCertificate ¶
func GetRemoteCertificate(address string, useragent string) (*x509.Certificate, error)
func GetRootDiskDevice ¶
GetRootDiskDevice returns the container device that is configured as root disk
func GetTLSConfig ¶
func GetTLSConfigMem ¶
func GroupId ¶
GroupId is an adaption from https://codereview.appspot.com/4589049.
func HostPath ¶
HostPath returns the host path for the provided path On a normal system, this does nothing When inside of a snap environment, returns the real path
func HostPathFollow ¶
HostPathFollow takes a valid path (from HostPath) and resolves it all the way to its target or to the last which can be resolved.
func InitTLSConfig ¶
InitTLSConfig returns a tls.Config populated with default encryption parameters. This is used as baseline config for both client and server certificates used by LXD.
func InstanceGetParentAndSnapshotName ¶
InstanceGetParentAndSnapshotName returns the parent instance name, snapshot name, and whether it actually was a snapshot name.
func Int64InSlice ¶
func IntInSlice ¶
func IsBlockdev ¶
func IsBlockdevPath ¶
func IsDeviceID ¶
IsDeviceID validates string is four lowercase hex characters suitable as Vendor or Device ID.
func IsLoopback ¶
func IsMountPoint ¶
func IsNotEmpty ¶
func IsPriority ¶
func IsRootDiskDevice ¶
IsRootDiskDevice returns true if the given device representation is configured as root disk for a container. It typically get passed a specific entry of api.Instance.Devices.
func IsSnapshot ¶
func IsUnixSocket ¶
IsUnixSocket returns true if the given path is either a Unix socket or a symbolic link pointing at a Unix socket.
func LogPath ¶
LogPath returns the directory that LXD should put logs under. If LXD_DIR is set, this path is $LXD_DIR/logs, otherwise it is /var/log/lxd.
func NetworkGetCounters ¶
func NetworkGetCounters(ifName string) api.NetworkStateCounters
func ParseLXDFileHeaders ¶
func ParseMetadata ¶
func ParseNumberFromFile ¶
func PathExists ¶
func PathIsEmpty ¶
PathIsEmpty checks if the given path is empty.
func ProxyFromConfig ¶
func ProxyFromEnvironment ¶
This is basically the same as golang's ProxyFromEnvironment, except it doesn't fall back to http_proxy when https_proxy isn't around, which is incorrect behavior. It still respects HTTP_PROXY, HTTPS_PROXY, and NO_PROXY.
func RandomCryptoString ¶
Returns a random base64 encoded string from crypto/rand.
func ReadToJSON ¶
func RemoveDuplicatesFromString ¶
RemoveDuplicatesFromString removes all duplicates of the string 'sep' from the specified string 's'. Leading and trailing occurrences of sep are NOT removed (duplicate leading/trailing are). Performs poorly if there are multiple consecutive redundant separators.
func RenderTemplate ¶
RenderTemplate renders a pongo2 template.
func RunCommand ¶
RunCommand runs a command with optional arguments and returns stdout. If the command fails to start or returns a non-zero exit code then an error is returned containing the output of stderr.
func RunCommandCLocale ¶
RunCommandCLocale runs a command with a LANG=C.UTF-8 environment set with optional arguments and returns stdout. If the command fails to start or returns a non-zero exit code then an error is returned containing the output of stderr.
func RunCommandSplit ¶
RunCommandSplit runs a command with a supplied environment and optional arguments and returns the resulting stdout and stderr output as separate variables. If the supplied environment is nil then the default environment is used. If the command fails to start or returns a non-zero exit code then an error is returned containing the output of stderr too.
func RunCommandWithFds ¶
func RunningInUserNS ¶
func RunningInUserNS() bool
func SetProgressMetadata ¶
func StringInSlice ¶
func StringMapHasStringKey ¶
StringMapHasStringKey returns true if any of the supplied keys are present in the map.
func TextEditor ¶
Spawn the editor with a temporary YAML file for editing configs
func TryRunCommand ¶
TryRunCommand runs the specified command up to 20 times with a 500ms delay between each call until it runs without an error. If after 20 times it is still failing then returns the error.
func Uint64InSlice ¶
func Unpack ¶
func Unpack(file string, path string, blockBackend bool, runningInUserns bool, tracker *ioprogress.ProgressTracker) error
func UserId ¶
UserId is an adaption from https://codereview.appspot.com/4589049.
func ValidHostname ¶
ValidHostname checks the string is valid DNS hostname.
func VarPath ¶
VarPath returns the provided path elements joined by a slash and appended to the end of $LXD_DIR, which defaults to /var/lib/lxd.
func WebsocketConsoleMirror ¶
func WebsocketConsoleMirror(conn *websocket.Conn, w io.WriteCloser, r io.ReadCloser) (chan bool, chan bool)
func WebsocketMirror ¶
func WebsocketMirror(conn *websocket.Conn, w io.WriteCloser, r io.ReadCloser, Reader WebSocketMirrorReader, Writer WebSocketMirrorWriter) (chan bool, chan bool)
func WebsocketSendStream ¶
Types ¶
type BytesReadCloser ¶
func (BytesReadCloser) Close ¶
func (r BytesReadCloser) Close() error
type CertInfo ¶
type CertInfo struct {
// contains filtered or unexported fields
}
CertInfo captures TLS certificate information about a certain public/private keypair and an optional CA certificate.
Given LXD's support for PKI setups, these two bits of information are normally used and passed around together, so this structure helps with that (see doc/security.md for more details).
func KeyPairAndCA ¶
KeyPairAndCA returns a CertInfo object with a reference to the key pair and (optionally) CA certificate located in the given directory and having the given name prefix
The naming conversion for the various files is:
<prefix>.crt -> public key <prefix>.key -> private key <prefix>.ca -> CA certificate
If no public/private key files are found, a new key pair will be generated and saved on disk.
If a CA certificate is found, it will be returned as well as second return value (otherwise it will be nil).
func TestingAltKeyPair ¶
func TestingAltKeyPair() *CertInfo
TestingAltKeyPair returns CertInfo object initialized with a test keypair which differs from the one returned by TestCertInfo. It's meant to be used only by tests.
func TestingKeyPair ¶
func TestingKeyPair() *CertInfo
TestingKeyPair returns CertInfo object initialized with a test keypair. It's meant to be used only by tests.
func (*CertInfo) Fingerprint ¶
Fingerprint returns the fingerprint of the public key.
func (*CertInfo) KeyPair ¶
func (c *CertInfo) KeyPair() tls.Certificate
KeyPair returns the public/private key pair.
func (*CertInfo) PrivateKey ¶
PrivateKey is a convenience to encode the underlying private key.
type CertKind ¶
type CertKind int
CertKind defines the kind of certificate to generate from scratch in KeyPairAndCA when it's not there.
The two possible kinds are client and server, and they differ in the ext-key-usage bitmaps. See GenerateMemCert for more details.
type InstanceAction ¶
type InstanceAction string
const ( Stop InstanceAction = "stop" Start InstanceAction = "start" Restart InstanceAction = "restart" Freeze InstanceAction = "freeze" Unfreeze InstanceAction = "unfreeze" )
type ReadSeeker ¶
func NewReadSeeker ¶
func NewReadSeeker(reader io.Reader, seeker io.Seeker) *ReadSeeker
type RunError ¶
type Utsname ¶
type Utsname struct { Sysname string Nodename string Release string Version string Machine string Domainname string }
Utsname returns the same info as unix.Utsname, as strings
type WebSocketMirrorReader ¶
type WebSocketMirrorReader func(conn *websocket.Conn, r io.ReadCloser, readDone chan<- bool)
WebsocketMirror allows mirroring a reader to a websocket and taking the result and writing it to a writer. This function allows for multiple mirrorings and correctly negotiates stream endings. However, it means any websocket.Conns passed to it are live when it returns, and must be closed explicitly.
type WebSocketMirrorWriter ¶
type WebSocketMirrorWriter func(conn *websocket.Conn, w io.WriteCloser, writeDone chan<- bool)
type WebsocketIO ¶
WebsocketIO is a wrapper implementing ReadWriteCloser on top of websocket
func (*WebsocketIO) Close ¶
func (w *WebsocketIO) Close() error
Close sends a control message indicating the stream is finished, but it does not actually close the socket.
Source Files ¶
Directories ¶
Path | Synopsis |
---|---|
Package api contains Go structs for all LXD API objects Overview This package has Go structs for every API object, all the various structs are named after the object they represent and some variations of those structs exist for initial object creation, object update and object retrieval.
|
Package api contains Go structs for all LXD API objects Overview This package has Go structs for every API object, all the various structs are named after the object they represent and some variations of those structs exist for initial object creation, object update and object retrieval. |
Package dnsutil copied from coredns project https://github.com/coredns/coredns/blob/master/plugin/pkg/dnsutil/reverse.go
|
Package dnsutil copied from coredns project https://github.com/coredns/coredns/blob/master/plugin/pkg/dnsutil/reverse.go |
file
Package file contains helpers to write auto-generated Go source files.
|
Package file contains helpers to write auto-generated Go source files. |
stack
Package stack implements utilities to capture, manipulate, and format call stacks.
|
Package stack implements utilities to capture, manipulate, and format call stacks. |
Package subtest provides a backwards-compatible way to run subtests.
|
Package subtest provides a backwards-compatible way to run subtests. |