Documentation
¶
Overview ¶
Package runtime provide the runtime environment to execute the bblfsh drivers
The runtime is based on libcontainer allowing to the runtime run the drivers inside of a isolated lightweight container.
Index ¶
- Variables
- func Bootstrap()
- func ContainerConfigFactory(containerID string) *configs.Config
- func NewULID() ulid.ULID
- func ParseImageName(imgName string) (types.ImageReference, error)
- func UnpackImage(src types.Image, target string) error
- func WriteImageConfig(config *ImageConfig, path string) error
- type Command
- type ConfigFactory
- type Container
- type Digest
- type DriverImage
- type DriverImageStatus
- type ImageConfig
- type Process
- type Runtime
- func (r *Runtime) Container(id string, d DriverImage, p *Process, f ConfigFactory) (Container, error)
- func (r *Runtime) Init() error
- func (r *Runtime) InstallDriver(d DriverImage, update bool) (*DriverImageStatus, error)
- func (r *Runtime) ListDrivers() ([]*DriverImageStatus, error)
- func (r *Runtime) RemoveDriver(d DriverImage) error
Constants ¶
This section is empty.
Variables ¶
var ( ErrDirtyDriverStorage = errors.NewKind("dirty driver storage") ErrDriverNotInstalled = errors.NewKind("driver not installed") ErrMalformedDriver = errors.NewKind("malformed driver, missing manifest.toml") )
var ErrInvalidImageName = errors.NewKind("invalid image name %q: %s")
Functions ¶
func Bootstrap ¶
func Bootstrap()
Bootstrap perform the init process of a container. This function should be called at the init function of the application.
Because containers are spawned in a two step process you will need a binary that will be executed as the init process for the container. In libcontainer, we use the current binary (/proc/self/exe) to be executed as the init process, and use arg "init", we call the first step process "bootstrap", so you always need a "init" function as the entry of "bootstrap".
In addition to the go init function the early stage bootstrap is handled by importing nsenter.
https://github.com/opencontainers/runc/blob/master/libcontainer/README.md
func ContainerConfigFactory ¶
ContainerConfigFactory is the default container config factory, is returns a config.Config, with the default setup.
func ParseImageName ¶
func ParseImageName(imgName string) (types.ImageReference, error)
ParseImageName converts a URL-like image name to a types.ImageReference.
func WriteImageConfig ¶
func WriteImageConfig(config *ImageConfig, path string) error
Types ¶
type Command ¶
type Command interface {
// Run starts the specified command and waits for it to complete.
Run() error
// Start starts the specified command but does not wait for it to complete.
// The Wait method will return the exit code and release associated
// resources once the command exits.
Start() error
// Wait waits for the command to exit. It must have been started by Start.
Wait() error
// Stop kills the container.
Stop() error
}
Command represents the main command of a container.
type ConfigFactory ¶ added in v1.1.0
type Container ¶
type Container interface {
// Returns the ID of the container
ID() string
// Returns the current status of the container.
Status() (libcontainer.Status, error)
// State returns the current container's state information.
State() (*libcontainer.State, error)
// Returns the PIDs inside this container. The PIDs are in the namespace of the calling process.
Processes() ([]int, error)
// Signal sends the provided signal code to the running process in the container.
Signal(sig os.Signal) error
// Returns the current config of the container.
Config() configs.Config
Command
}
Container represent a container created from a driver image.
type DriverImage ¶
type DriverImage interface {
Name() string
Digest() (Digest, error)
Inspect() (*types.ImageInspectInfo, error)
WriteTo(path string) error
}
DriverImage represents a docker image of a driver
func NewDriverImage ¶
func NewDriverImage(imageRef string) (DriverImage, error)
NewDriverImage returns a new DriverImage from an image reference. For Docker use `docker://bblfsh/rust-driver:latest`.
type DriverImageStatus ¶
DriverImageStatus represents the status of an installed driver image on disk.
type ImageConfig ¶
type ImageConfig struct {
// ImageRef is the original image reference used to retrieve the image.
ImageRef string `json:"image_ref"`
v1.Image
}
ImageConfig describes some basic information about the image.
func ReadImageConfig ¶
func ReadImageConfig(path string) (*ImageConfig, error)
type Process ¶
type Process libcontainer.Process
Process defines the process to be executed inside of a container.
type Runtime ¶
type Runtime struct {
ContainerConfigFactory ConfigFactory
Root string
// contains filtered or unexported fields
}
func NewRuntime ¶
NewRuntime create a new runtime using as storage the given path.
func (*Runtime) Container ¶
func (r *Runtime) Container(id string, d DriverImage, p *Process, f ConfigFactory) (Container, error)
Container returns a container for the given DriverImage and Process
func (*Runtime) InstallDriver ¶
func (r *Runtime) InstallDriver(d DriverImage, update bool) (*DriverImageStatus, error)
InstallDriver installs a DriverImage extracting his content to the storage, only one version per image can be stored, update is required to overwrite a previous image if already exists otherwise, Install fails if an previous image already exists.
func (*Runtime) ListDrivers ¶
func (r *Runtime) ListDrivers() ([]*DriverImageStatus, error)
ListDrivers lists all the driver images installed on the storage.
func (*Runtime) RemoveDriver ¶
func (r *Runtime) RemoveDriver(d DriverImage) error
RemoveDriver removes a given DriverImage from the image storage.