execdriver

package
v1.0.1 Latest Latest
Warning

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

Go to latest
Published: Jun 19, 2014 License: Apache-2.0 Imports: 7 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrNotRunning              = errors.New("Process could not be started")
	ErrWaitTimeoutReached      = errors.New("Wait timeout reached")
	ErrDriverAlreadyRegistered = errors.New("A driver already registered this docker init function")
	ErrDriverNotFound          = errors.New("The requested docker init has not been found")
)

Functions

func RegisterInitFunc

func RegisterInitFunc(name string, fct InitFunc) error

func SetTerminal

func SetTerminal(command *Command, pipes *Pipes) error

Types

type Command

type Command struct {
	exec.Cmd `json:"-"`

	ID                 string              `json:"id"`
	Privileged         bool                `json:"privileged"`
	User               string              `json:"user"`
	Rootfs             string              `json:"rootfs"`   // root fs of the container
	InitPath           string              `json:"initpath"` // dockerinit
	Entrypoint         string              `json:"entrypoint"`
	Arguments          []string            `json:"arguments"`
	WorkingDir         string              `json:"working_dir"`
	ConfigPath         string              `json:"config_path"` // this should be able to be removed when the lxc template is moved into the driver
	Tty                bool                `json:"tty"`
	Network            *Network            `json:"network"`
	Config             map[string][]string `json:"config"` //  generic values that specific drivers can consume
	Resources          *Resources          `json:"resources"`
	Mounts             []Mount             `json:"mounts"`
	AllowedDevices     []*devices.Device   `json:"allowed_devices"`
	AutoCreatedDevices []*devices.Device   `json:"autocreated_devices"`

	Terminal     Terminal `json:"-"`             // standard or tty terminal
	Console      string   `json:"-"`             // dev/console path
	ContainerPid int      `json:"container_pid"` // the pid for the process inside a container
}

Process wrapps an os/exec.Cmd to add more metadata

func (*Command) Pid

func (c *Command) Pid() int

Return the pid of the process If the process is nil -1 will be returned

type Context

type Context map[string]string

Context is a generic key value pair that allows arbatrary data to be sent

type Driver

type Driver interface {
	Run(c *Command, pipes *Pipes, startCallback StartCallback) (int, error) // Run executes the process and blocks until the process exits and returns the exit code
	Kill(c *Command, sig int) error
	Pause(c *Command) error
	Unpause(c *Command) error
	Name() string                                 // Driver name
	Info(id string) Info                          // "temporary" hack (until we move state from core to plugins)
	GetPidsForContainer(id string) ([]int, error) // Returns a list of pids for the given container.
	Terminate(c *Command) error                   // kill it with fire
}

type Info

type Info interface {
	IsRunning() bool
}

Driver specific information based on processes registered with the driver

type InitArgs

type InitArgs struct {
	User       string
	Gateway    string
	Ip         string
	WorkDir    string
	Privileged bool
	Env        []string
	Args       []string
	Mtu        int
	Driver     string
	Console    string
	Pipe       int
	Root       string
}

Args provided to the init function for a driver

type InitFunc

type InitFunc func(i *InitArgs) error

func GetInitFunc

func GetInitFunc(name string) (InitFunc, error)

type Mount

type Mount struct {
	Source      string `json:"source"`
	Destination string `json:"destination"`
	Writable    bool   `json:"writable"`
	Private     bool   `json:"private"`
}

type Network

type Network struct {
	Interface      *NetworkInterface `json:"interface"` // if interface is nil then networking is disabled
	Mtu            int               `json:"mtu"`
	ContainerID    string            `json:"container_id"` // id of the container to join network.
	HostNetworking bool              `json:"host_networking"`
}

Network settings of the container

type NetworkInterface

type NetworkInterface struct {
	Gateway     string `json:"gateway"`
	IPAddress   string `json:"ip"`
	Bridge      string `json:"bridge"`
	IPPrefixLen int    `json:"ip_prefix_len"`
}

type Pipes

type Pipes struct {
	Stdin          io.ReadCloser
	Stdout, Stderr io.Writer
}

Pipes is a wrapper around a containers output for stdin, stdout, stderr

func NewPipes

func NewPipes(stdin io.ReadCloser, stdout, stderr io.Writer, useStdin bool) *Pipes

type Resources

type Resources struct {
	Memory     int64  `json:"memory"`
	MemorySwap int64  `json:"memory_swap"`
	CpuShares  int64  `json:"cpu_shares"`
	Cpuset     string `json:"cpuset"`
}

type StartCallback

type StartCallback func(*Command)

type StdConsole

type StdConsole struct {
}

func NewStdConsole

func NewStdConsole(command *Command, pipes *Pipes) (*StdConsole, error)

func (*StdConsole) AttachPipes

func (s *StdConsole) AttachPipes(command *exec.Cmd, pipes *Pipes) error

func (*StdConsole) Close

func (s *StdConsole) Close() error

func (*StdConsole) Resize

func (s *StdConsole) Resize(h, w int) error

type Terminal

type Terminal interface {
	io.Closer
	Resize(height, width int) error
}

Terminal in an interface for drivers to implement if they want to support Close and Resize calls from the core

type TtyConsole

type TtyConsole struct {
	MasterPty *os.File
	SlavePty  *os.File
}

func NewTtyConsole

func NewTtyConsole(command *Command, pipes *Pipes) (*TtyConsole, error)

func (*TtyConsole) AttachPipes

func (t *TtyConsole) AttachPipes(command *exec.Cmd, pipes *Pipes) error

func (*TtyConsole) Close

func (t *TtyConsole) Close() error

func (*TtyConsole) Master

func (t *TtyConsole) Master() *os.File

func (*TtyConsole) Resize

func (t *TtyConsole) Resize(h, w int) error

type TtyTerminal

type TtyTerminal interface {
	Master() *os.File
}

Directories

Path Synopsis
These types are wrappers around the libcontainer Terminal interface so that we can resuse the docker implementations where possible.
These types are wrappers around the libcontainer Terminal interface so that we can resuse the docker implementations where possible.

Jump to

Keyboard shortcuts

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