Help us shape the future of Go! Take the 2026 Go Developer Survey

exec2

package
v1.5.0 Latest Latest
Warning

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

Go to latest
Published: Jan 11, 2019 License: Apache-2.0 Imports: 5 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type BasicHandleFactory

type BasicHandleFactory struct {
}

type Config

type Config struct {
	Name   string
	Limits ResourceLimits
}

variable container configuration state

type ConstantConfig

type ConstantConfig struct {
	ContainerID ID
	Created     time.Time
}

config state that cannot change for the lifetime of the container

type ContainerConfig

type ContainerConfig struct {
	ConstantConfig
	Config
	MainProcess ProcessConfig
	ExecdProcs  []ProcessConfig
}

ContainerConfig is a type representing the configuration of a container and its processes

type ContainerLifecycle

type ContainerLifecycle interface {

	// CreateContainer creates a new container representation and returns a Handle
	// The Handle can be used to configure the container before its actually created
	// Calling Commit on the Handle will create the container
	CreateContainer(name string) (Handle, error)

	// GetHandle allows for an existing container to be modified
	// The Handle can be used to reconfigure the container
	// Calling Commit on the Handle will apply the reconfiguration
	// Commit will fail if another client committed a modification after GetHandle was called
	GetHandle(cid ID) (Handle, error)

	// CopyTo copies a file into the container represented by the handle
	// If the container is stopped, the file will be copied in when it is next started
	CopyTo(handle Handle, targetDir string, fname string, perms int16, data []byte) (Handle, error)

	// SetEntryPoint sets the entry point for the container
	// This is the executable, the lifecycle of which is tied to the container lifecycle
	SetEntryPoint(handle Handle, workDir string, execPath string, execArgs string) (Handle, error)

	// SetLimits sets resource limits on the container
	// A value of -1 implies a default value, not unlimited
	// New limits will be ignored if committed to a running container
	SetLimits(handle Handle, memoryMb int, cpuMhz int) (Handle, error)

	// SetRunState allows for the running state of a container to be modified
	// Created is not a valid state and will return an error
	SetRunState(handle Handle, runState RunState) (Handle, error)

	// Commit applies changes made to the Handle to either a new or running container
	// Commit will fail if another client committed a modification after GetHandle was called
	// Commit blocks until all changes have been committed
	Commit(handle Handle) (ID, error)

	// DestroyContainer destroys an stopped container
	// It is up to the caller to put the container in stopped state before calling Destroy
	DestroyContainer(cid ID) error
}

ContainerLifecycle represents operations concerned with the creation, modification and deletion of containers

type ContainerQuery

type ContainerQuery interface {

	// ListContainers lists all container IDs for a given state
	// If forState is nil, all containers are returned
	ListContainers(forState RunState) ([]ID, error)

	// GetConfig returns container and process config
	GetContainerConfig(cid ID) (ContainerConfig, error)

	// GetState returns the current state of the container and its processes
	// This call will return a snapshot of the most recent state for each entity
	GetContainerState(cid ID) (ContainerState, error)

	// CopyFrom copies file data out of a running container
	// Returns an error if the container is not running
	CopyFrom(cid ID, sourceDir string, fname string) ([]byte, error)
}

ContainerQuery represents queries that can be made against a Container

type ContainerState

type ContainerState struct {
	Status      RunState
	MainProcess ProcessState
	ExecdProcs  []ProcessState
}

ContainerState is a type representing the runtime state of a container and its processes

type FileToCopy

type FileToCopy struct {
	// contains filtered or unexported fields
}

type Handle

type Handle interface{}

A Handle should be completely opaque

type HandleFactory

type HandleFactory interface {
	// contains filtered or unexported methods
}

type ID

type ID uuid.UUID

func GenerateID

func GenerateID() ID

func ParseID

func ParseID(idStr string) (ID, error)

func (ID) String

func (id ID) String() string

type PendingCommit

type PendingCommit struct {
	ConstantConfig
	// contains filtered or unexported fields
}

config that will be applied to a container on commit Needs to be public as it will be shared by net, storage etc

type PortLayerVsphere

type PortLayerVsphere struct {
	// contains filtered or unexported fields
}

PortLayerVsphere is a WIP implementation of the execution.go interfaces

func (*PortLayerVsphere) Commit

func (p *PortLayerVsphere) Commit(handle Handle) (ID, error)

func (*PortLayerVsphere) CopyTo

func (p *PortLayerVsphere) CopyTo(handle Handle, targetDir string, fname string, perms int16, data []byte) (Handle, error)

func (*PortLayerVsphere) CreateContainer

func (p *PortLayerVsphere) CreateContainer(name string) (Handle, error)

func (*PortLayerVsphere) DestroyContainer

func (p *PortLayerVsphere) DestroyContainer(cid ID) error

func (*PortLayerVsphere) GetHandle

func (p *PortLayerVsphere) GetHandle(cid ID) (Handle, error)

func (*PortLayerVsphere) Init

func (p *PortLayerVsphere) Init(gateway VmomiGateway, factory HandleFactory) error

func (*PortLayerVsphere) SetEntryPoint

func (p *PortLayerVsphere) SetEntryPoint(handle Handle, workDir string, execPath string, execArgs string) (Handle, error)

func (*PortLayerVsphere) SetLimits

func (p *PortLayerVsphere) SetLimits(handle Handle, memoryMb int, cpuMhz int) (Handle, error)

func (*PortLayerVsphere) SetRunState

func (p *PortLayerVsphere) SetRunState(handle Handle, runState RunState) (Handle, error)

type ProcessConfig

type ProcessConfig struct {
	ProcessID ID
	WorkDir   string
	ExecPath  string
	ExecArgs  string
}

configuration state of a container process

func NewProcessConfig

func NewProcessConfig(workDir string, execPath string, execArgs string) ProcessConfig

type ProcessLifecycle

type ProcessLifecycle interface {
	// ExecProcess executes a process in the container
	// The lifecycle of the process is independent of the container main process
	// The ID returned is a uuid handle to the process
	ExecProcess(cid ID, workDir string, execPath string, execArgs string) (ID, error)

	// Send a signal to the process
	// Specifying a process ID will signal an exec'd process. Specifying the container ID will signal the main process
	Signal(processID ID, signal int) error
}

type ProcessRunState

type ProcessRunState struct {
	ProcessID  ID
	Status     ProcessStatus
	GuestPid   int
	ExitCode   int
	ExitMsg    string
	StartedAt  time.Time
	FinishedAt time.Time
}

runtime status of a container process

type ProcessState

type ProcessState struct {
	ProcessRunState
}

ProcessState is the runtime state of a process in a container

type ProcessStatus

type ProcessStatus int
const (
	Started ProcessStatus
	Exited
)

type ResourceLimits

type ResourceLimits struct {
	MemoryMb int
	CPUMhz   int
}

type RunState

type RunState int

RunState represents the running state of a container

const (
	Created RunState
	Running
	Stopped
)

type VmomiGateway

type VmomiGateway interface {
}

VmomiGateway represents an interface to a pre-authenticated Vmomi API

Source Files

  • container.go
  • execution.go
  • execution_vsphere.go
  • handle.go
  • vmomi_gateway.go

Directories

Path Synopsis
server command

Jump to

Keyboard shortcuts

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