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 ¶
Constants ¶
This section is empty.
Variables ¶
var ( ErrDirtyDriverStorage = errors.New("dirty driver storage") ErrDriverNotInstalled = errors.New("driver not installed") )
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.
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
}
Command represents the main command of a container.
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 all the process in the container.
Signal(sig os.Signal) error
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 Process ¶
type Process libcontainer.Process
Process defines the process to be executed inside of a container.
type Runtime ¶
type Runtime struct {
ContainerConfigFactory func() *configs.Config
// 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(d DriverImage, p *Process) (Container, error)
Container returns a container for the given DriverImage and Process
func (*Runtime) InstallDriver ¶
func (r *Runtime) InstallDriver(d DriverImage, update bool) 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.