shared

package
v0.0.0-...-9ff6e62 Latest Latest
Warning

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

Go to latest
Published: Jul 1, 2017 License: Apache-2.0 Imports: 42 Imported by: 0

Documentation

Overview

That this code needs to exist is kind of dumb, but I'm not sure how else to do it.

Index

Constants

View Source
const ABSTRACT_UNIX_SOCK_LEN int = C.ABSTRACT_UNIX_SOCK_LEN
View Source
const DefaultPort = "8443"
View Source
const POLLERR int = C.POLLERR
View Source
const POLLHUP int = C.POLLHUP
View Source
const POLLIN int = C.POLLIN
View Source
const POLLNVAL int = C.POLLNVAL
View Source
const POLLPRI int = C.POLLPRI
View Source
const POLLRDHUP int = C.POLLRDHUP
View Source
const SnapshotDelimiter = "/"

Variables

View Source
var KnownContainerConfigKeys = map[string]func(value string) error{
	"boot.autostart":             IsBool,
	"boot.autostart.delay":       IsInt64,
	"boot.autostart.priority":    IsInt64,
	"boot.host_shutdown_timeout": IsInt64,

	"limits.cpu": IsAny,
	"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.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 := 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.network.priority": IsPriority,

	"limits.processes": IsInt64,

	"linux.kernel_modules": IsAny,

	"security.nesting":    IsBool,
	"security.privileged": IsBool,

	"security.idmap.base":     IsUint32,
	"security.idmap.isolated": IsBool,
	"security.idmap.size":     IsUint32,

	"security.syscalls.blacklist_default": IsBool,
	"security.syscalls.blacklist_compat":  IsBool,
	"security.syscalls.blacklist":         IsAny,
	"security.syscalls.whitelist":         IsAny,

	"raw.apparmor": IsAny,
	"raw.lxc":      IsAny,
	"raw.seccomp":  IsAny,
	"raw.idmap":    IsAny,

	"volatile.apply_template":   IsAny,
	"volatile.base_image":       IsAny,
	"volatile.last_state.idmap": IsAny,
	"volatile.last_state.power": IsAny,
	"volatile.idmap.next":       IsAny,
	"volatile.idmap.base":       IsAny,
	"volatile.apply_quota":      IsAny,
}

KnownContainerConfigKeys maps all fully defined, well-known config keys to an appropriate checker function, which validates whether or not a given value is syntactically legal.

View Source
var ObjectFound = fmt.Errorf("Found requested object.")
View Source
var WebsocketUpgrader = websocket.Upgrader{
	CheckOrigin: func(r *http.Request) bool { return true },
}

Functions

func AddSlash

func AddSlash(path string) string

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

func AllocatePort() (int, error)

AllocatePort asks the kernel for a free open port that is ready to use

func AtoiEmptyDefault

func AtoiEmptyDefault(s string, def int) (int, error)

func BlockFsDetect

func BlockFsDetect(dev string) (string, error)

func CachePath

func CachePath(path ...string) string

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 CertFingerprintStr(c string) (string, error)

func ConfigKeyChecker

func ConfigKeyChecker(key string) (func(value string) error, error)

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 DebugJson

func DebugJson(r *bytes.Buffer)

func DeepCopy

func DeepCopy(src, dest interface{}) error

DeepCopy copies src to dest by using encoding/gob so its not that fast.

func ExecReaderToChannel

func ExecReaderToChannel(r io.Reader, bufferSize int, exited <-chan bool, fd int) <-chan []byte

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 ExtractSnapshotName

func ExtractSnapshotName(name string) string

func FileCopy

func FileCopy(source string, dest string) error

FileCopy copies a file, overwriting the target if it exists.

func FileMove

func FileMove(oldPath string, newPath string) error

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

func FindOrGenCert(certf string, keyf string, certtype bool) error

func GenCert

func GenCert(certf string, keyf string, certtype bool) error

GenCert will create and populate a certificate file and a key file

func GenerateMemCert

func GenerateMemCert(client bool) ([]byte, []byte, error)

GenerateMemCert creates client or server certificate and key pair, returning them as byte arrays in memory.

func GetAllXattr

func GetAllXattr(path string) (xattrs map[string]string, err error)

GetAllXattr retrieves all extended attributes associated with a file, directory or symbolic link.

func GetByteSizeString

func GetByteSizeString(input int64, precision uint) string

func GetErrno

func GetErrno(err error) (errno error, iserrno bool)

Detect whether err is an errno.

func GetFileStat

func GetFileStat(p string) (uid int, gid int, major int, minor int,
	inode uint64, nlink int, err error)

func GetOwnerMode

func GetOwnerMode(fInfo os.FileInfo) (os.FileMode, int, int)

func GetPollRevents

func GetPollRevents(fd int, timeout int, flags int) (int, int, error)

func GetTLSConfig

func GetTLSConfig(tlsClientCertFile string, tlsClientKeyFile string, tlsClientCAFile string, tlsRemoteCert *x509.Certificate) (*tls.Config, error)

func GetTLSConfigMem

func GetTLSConfigMem(tlsClientCert string, tlsClientKey string, tlsClientCA string, tlsRemoteCertPEM string) (*tls.Config, error)

func GroupId

func GroupId(name string) (int, error)

GroupId is an adaption from https://codereview.appspot.com/4589049.

func Int64InSlice

func Int64InSlice(key int64, list []int64) bool

func IntInSlice

func IntInSlice(key int, list []int) bool

func IsAny

func IsAny(value string) error

func IsBlockdev

func IsBlockdev(fm os.FileMode) bool

func IsBlockdevPath

func IsBlockdevPath(pathName string) bool

func IsBool

func IsBool(value string) error

func IsDir

func IsDir(name string) bool

IsDir returns true if the given path is a directory.

func IsInt64

func IsInt64(value string) error

func IsLoopback

func IsLoopback(iface *net.Interface) bool

func IsMountPoint

func IsMountPoint(name string) bool

func IsOneOf

func IsOneOf(value string, valid []string) error

func IsPriority

func IsPriority(value string) error

func IsSnapshot

func IsSnapshot(name string) bool

func IsTrue

func IsTrue(value string) bool

func IsUint32

func IsUint32(value string) error

func IsUnixSocket

func IsUnixSocket(path string) bool

IsUnixSocket returns true if the given path is either a Unix socket or a symbolic link pointing at a Unix socket.

func LogPath

func LogPath(path ...string) string

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 LookupBlockDevByUUID

func LookupBlockDevByUUID(uuid string) (string, error)

func LookupUUIDByBlockDevPath

func LookupUUIDByBlockDevPath(diskDevice string) (string, error)

func MkdirAllOwner

func MkdirAllOwner(path string, perm os.FileMode, uid int, gid int) error

func OpenPty

func OpenPty(uid, gid int64) (master *os.File, slave *os.File, err error)

func ParseBitSizeString

func ParseBitSizeString(input string) (int64, error)

Parse a size string in bits (e.g. 200kbit or 5Gbit) into the number of bits it represents. Supports suffixes up to Ebit. "" == 0.

func ParseByteSizeString

func ParseByteSizeString(input string) (int64, error)

Parse a size string in bytes (e.g. 200kB or 5GB) into the number of bytes it represents. Supports suffixes up to EB. "" == 0.

func ParseLXDFileHeaders

func ParseLXDFileHeaders(headers http.Header) (uid int64, gid int64, mode int, type_ string, write string)

func ParseMetadata

func ParseMetadata(metadata interface{}) (map[string]interface{}, error)

func PathExists

func PathExists(name string) bool

func PathIsEmpty

func PathIsEmpty(path string) (bool, error)

PathIsEmpty checks if the given path is empty.

func Pipe

func Pipe() (master *os.File, slave *os.File, err error)

func ProxyFromConfig

func ProxyFromConfig(httpsProxy string, httpProxy string, noProxy string) func(req *http.Request) (*url.URL, error)

func ProxyFromEnvironment

func ProxyFromEnvironment(req *http.Request) (*url.URL, error)

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 RFC3493Dialer

func RFC3493Dialer(network, address string) (net.Conn, error)

func RandomCryptoString

func RandomCryptoString() (string, error)

Returns a random base64 encoded string from crypto/rand.

func ReadCert

func ReadCert(fpath string) (*x509.Certificate, error)

func ReadDir

func ReadDir(p string) ([]string, error)

func ReadLastNLines

func ReadLastNLines(f *os.File, lines int) (string, error)

func ReadStdin

func ReadStdin() ([]byte, error)

func ReadToJSON

func ReadToJSON(r io.Reader, req interface{}) error

func ReaderToChannel

func ReaderToChannel(r io.Reader, bufferSize int) <-chan []byte

func RemoveDuplicatesFromString

func RemoveDuplicatesFromString(s string, sep string) string

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 Round

func Round(x float64) int64

func RunCommand

func RunCommand(name string, arg ...string) (string, error)

func RunningInUserNS

func RunningInUserNS() bool

func SetSize

func SetSize(fd int, width int, height int) (err error)

func ShiftOwner

func ShiftOwner(basepath string, path string, uid int, gid int) error

func SplitExt

func SplitExt(fpath string) (string, string)

func StringInSlice

func StringInSlice(key string, list []string) bool

func TextEditor

func TextEditor(inPath string, inContent []byte) ([]byte, error)

Spawn the editor with a temporary YAML file for editing configs

func TimeIsSet

func TimeIsSet(ts time.Time) bool

func TryRunCommand

func TryRunCommand(name string, arg ...string) (string, error)

func UserId

func UserId(name string) (int, error)

UserId is an adaption from https://codereview.appspot.com/4589049.

func ValidHostname

func ValidHostname(name string) bool

func VarPath

func VarPath(path ...string) string

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 WebsocketExecMirror

func WebsocketExecMirror(conn *websocket.Conn, w io.WriteCloser, r io.ReadCloser, exited chan bool, fd int) (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 WebsocketRecvStream

func WebsocketRecvStream(w io.Writer, conn *websocket.Conn) chan bool

func WebsocketSendStream

func WebsocketSendStream(conn *websocket.Conn, r io.Reader, bufferSize int) chan bool

func WriteAll

func WriteAll(w io.Writer, buf []byte) error

func WriteAllBuf

func WriteAllBuf(w io.Writer, buf *bytes.Buffer) error

Types

type ByHostid

type ByHostid []*IdmapEntry

func (ByHostid) Len

func (s ByHostid) Len() int

func (ByHostid) Less

func (s ByHostid) Less(i, j int) bool

func (ByHostid) Swap

func (s ByHostid) Swap(i, j int)

type BytesReadCloser

type BytesReadCloser struct {
	Buf *bytes.Buffer
}

func (BytesReadCloser) Close

func (r BytesReadCloser) Close() error

func (BytesReadCloser) Read

func (r BytesReadCloser) Read(b []byte) (n int, err error)

type ContainerAction

type ContainerAction string
const (
	Stop     ContainerAction = "stop"
	Start    ContainerAction = "start"
	Restart  ContainerAction = "restart"
	Freeze   ContainerAction = "freeze"
	Unfreeze ContainerAction = "unfreeze"
)

type IdRange

type IdRange struct {
	Isuid   bool
	Isgid   bool
	Startid int64
	Endid   int64
}

func (*IdRange) Contains

func (i *IdRange) Contains(id int64) bool

type IdmapEntry

type IdmapEntry struct {
	Isuid    bool
	Isgid    bool
	Hostid   int64 // id as seen on the host - i.e. 100000
	Nsid     int64 // id as seen in the ns - i.e. 0
	Maprange int64
}

* One entry in id mapping set - a single range of either * uid or gid mappings.

func Extend

func Extend(slice []IdmapEntry, element IdmapEntry) []IdmapEntry

taken from http://blog.golang.org/slices (which is under BSD licence)

func (*IdmapEntry) HostidsIntersect

func (e *IdmapEntry) HostidsIntersect(i IdmapEntry) bool

func (*IdmapEntry) Intersects

func (e *IdmapEntry) Intersects(i IdmapEntry) bool

func (*IdmapEntry) ToLxcString

func (e *IdmapEntry) ToLxcString() []string

func (*IdmapEntry) Usable

func (e *IdmapEntry) Usable() error

type IdmapSet

type IdmapSet struct {
	Idmap []IdmapEntry
}

func CurrentIdmapSet

func CurrentIdmapSet() (*IdmapSet, error)

* Create an idmap of the current allocation

func DefaultIdmapSet

func DefaultIdmapSet() (*IdmapSet, error)

* Create a new default idmap

func (*IdmapSet) AddSafe

func (m *IdmapSet) AddSafe(i IdmapEntry) error

AddSafe adds an entry to the idmap set, breaking apart any ranges that the * new idmap intersects with in the process.

func (IdmapSet) Append

func (m IdmapSet) Append(s string) (IdmapSet, error)

func (IdmapSet) HostidsIntersect

func (m IdmapSet) HostidsIntersect(i IdmapEntry) bool

func (IdmapSet) Intersects

func (m IdmapSet) Intersects(i IdmapEntry) bool

func (IdmapSet) Len

func (m IdmapSet) Len() int

func (IdmapSet) Less

func (m IdmapSet) Less(i, j int) bool

func (*IdmapSet) ShiftFile

func (set *IdmapSet) ShiftFile(p string) error

func (IdmapSet) ShiftFromNs

func (m IdmapSet) ShiftFromNs(uid int64, gid int64) (int64, int64)

func (IdmapSet) ShiftIntoNs

func (m IdmapSet) ShiftIntoNs(uid int64, gid int64) (int64, int64)

func (*IdmapSet) ShiftRootfs

func (set *IdmapSet) ShiftRootfs(p string) error

func (IdmapSet) Swap

func (m IdmapSet) Swap(i, j int)

func (IdmapSet) ToLxcString

func (m IdmapSet) ToLxcString() []string

func (*IdmapSet) UidshiftFromContainer

func (set *IdmapSet) UidshiftFromContainer(dir string, testmode bool) error

func (*IdmapSet) UidshiftIntoContainer

func (set *IdmapSet) UidshiftIntoContainer(dir string, testmode bool) error

func (*IdmapSet) UnshiftRootfs

func (set *IdmapSet) UnshiftRootfs(p string) error

func (IdmapSet) Usable

func (m IdmapSet) Usable() error

func (IdmapSet) ValidRanges

func (m IdmapSet) ValidRanges() ([]*IdRange, error)

type Jmap

type Jmap map[string]interface{}

func (Jmap) GetBool

func (m Jmap) GetBool(key string) (bool, error)

func (Jmap) GetInt

func (m Jmap) GetInt(key string) (int, error)

func (Jmap) GetMap

func (m Jmap) GetMap(key string) (Jmap, error)

func (Jmap) GetString

func (m Jmap) GetString(key string) (string, error)

type StringSet

type StringSet map[string]bool

func NewStringSet

func NewStringSet(strings []string) StringSet

func (StringSet) IsSubset

func (ss StringSet) IsSubset(oss StringSet) bool

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)

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 gnuflag implements command-line flag parsing in the GNU style.
Package gnuflag implements command-line flag parsing in the GNU style.

Jump to

Keyboard shortcuts

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