mirror of
https://github.com/opencontainers/runc.git
synced 2026-07-11 06:03:57 +08:00
4415446c32
Signed-off-by: Michael Crosby <crosbymichael@gmail.com> Add state status() method Signed-off-by: Michael Crosby <crosbymichael@gmail.com> Allow multiple checkpoint on restore Signed-off-by: Michael Crosby <crosbymichael@gmail.com> Handle leave-running state Signed-off-by: Michael Crosby <crosbymichael@gmail.com> Fix state transitions for inprocess Because the tests use libcontainer in process between the various states we need to ensure that that usecase works as well as the out of process one. Signed-off-by: Michael Crosby <crosbymichael@gmail.com> Remove isDestroyed method Signed-off-by: Michael Crosby <crosbymichael@gmail.com> Handling Pausing from freezer state Signed-off-by: Rajasekaran <rajasec79@gmail.com> freezer status Signed-off-by: Rajasekaran <rajasec79@gmail.com> Fixing review comments Signed-off-by: Rajasekaran <rajasec79@gmail.com> Added comment when freezer not available Signed-off-by: Rajasekaran <rajasec79@gmail.com> Signed-off-by: Michael Crosby <crosbymichael@gmail.com> Conflicts: libcontainer/container_linux.go Change checkFreezer logic to isPaused() Signed-off-by: Michael Crosby <crosbymichael@gmail.com> Remove state base and factor out destroy func Signed-off-by: Michael Crosby <crosbymichael@gmail.com> Add unit test for state transitions Signed-off-by: Michael Crosby <crosbymichael@gmail.com>
141 lines
3.7 KiB
Go
141 lines
3.7 KiB
Go
// Libcontainer provides a native Go implementation for creating containers
|
|
// with namespaces, cgroups, capabilities, and filesystem access controls.
|
|
// It allows you to manage the lifecycle of the container performing additional operations
|
|
// after the container is created.
|
|
package libcontainer
|
|
|
|
import (
|
|
"os"
|
|
|
|
"github.com/opencontainers/runc/libcontainer/configs"
|
|
)
|
|
|
|
// The status of a container.
|
|
type Status int
|
|
|
|
const (
|
|
// The container exists and is running.
|
|
Running Status = iota + 1
|
|
|
|
// The container exists, it is in the process of being paused.
|
|
Pausing
|
|
|
|
// The container exists, but all its processes are paused.
|
|
Paused
|
|
|
|
// The container exists, but its state is saved on disk
|
|
Checkpointed
|
|
|
|
// The container does not exist.
|
|
Destroyed
|
|
)
|
|
|
|
func (s Status) String() string {
|
|
switch s {
|
|
case Running:
|
|
return "running"
|
|
case Pausing:
|
|
return "pausing"
|
|
case Paused:
|
|
return "paused"
|
|
case Checkpointed:
|
|
return "checkpointed"
|
|
case Destroyed:
|
|
return "destroyed"
|
|
default:
|
|
return "undefined"
|
|
}
|
|
}
|
|
|
|
// BaseState represents the platform agnostic pieces relating to a
|
|
// running container's state
|
|
type BaseState struct {
|
|
// ID is the container ID.
|
|
ID string `json:"id"`
|
|
|
|
// InitProcessPid is the init process id in the parent namespace.
|
|
InitProcessPid int `json:"init_process_pid"`
|
|
|
|
// InitProcessStartTime is the init process start time.
|
|
InitProcessStartTime string `json:"init_process_start"`
|
|
|
|
// Config is the container's configuration.
|
|
Config configs.Config `json:"config"`
|
|
}
|
|
|
|
// A libcontainer container object.
|
|
//
|
|
// Each container is thread-safe within the same process. Since a container can
|
|
// be destroyed by a separate process, any function may return that the container
|
|
// was not found. BaseContainer includes methods that are platform agnostic.
|
|
type BaseContainer interface {
|
|
// Returns the ID of the container
|
|
ID() string
|
|
|
|
// Returns the current status of the container.
|
|
//
|
|
// errors:
|
|
// ContainerDestroyed - Container no longer exists,
|
|
// Systemerror - System error.
|
|
Status() (Status, error)
|
|
|
|
// State returns the current container's state information.
|
|
//
|
|
// errors:
|
|
// Systemerror - System error.
|
|
State() (*State, error)
|
|
|
|
// Returns the current config of the container.
|
|
Config() configs.Config
|
|
|
|
// Returns the PIDs inside this container. The PIDs are in the namespace of the calling process.
|
|
//
|
|
// errors:
|
|
// ContainerDestroyed - Container no longer exists,
|
|
// Systemerror - System error.
|
|
//
|
|
// Some of the returned PIDs may no longer refer to processes in the Container, unless
|
|
// the Container state is PAUSED in which case every PID in the slice is valid.
|
|
Processes() ([]int, error)
|
|
|
|
// Returns statistics for the container.
|
|
//
|
|
// errors:
|
|
// ContainerDestroyed - Container no longer exists,
|
|
// Systemerror - System error.
|
|
Stats() (*Stats, error)
|
|
|
|
// Set resources of container as configured
|
|
//
|
|
// We can use this to change resources when containers are running.
|
|
//
|
|
// errors:
|
|
// Systemerror - System error.
|
|
Set(config configs.Config) error
|
|
|
|
// Start a process inside the container. Returns error if process fails to
|
|
// start. You can track process lifecycle with passed Process structure.
|
|
//
|
|
// errors:
|
|
// ContainerDestroyed - Container no longer exists,
|
|
// ConfigInvalid - config is invalid,
|
|
// ContainerPaused - Container is paused,
|
|
// Systemerror - System error.
|
|
Start(process *Process) (err error)
|
|
|
|
// Destroys the container after killing all running processes.
|
|
//
|
|
// Any event registrations are removed before the container is destroyed.
|
|
// No error is returned if the container is already destroyed.
|
|
//
|
|
// errors:
|
|
// Systemerror - System error.
|
|
Destroy() error
|
|
|
|
// Signal sends the provided signal code to the container's initial process.
|
|
//
|
|
// errors:
|
|
// Systemerror - System error.
|
|
Signal(s os.Signal) error
|
|
}
|