sandbox: Create and export StopContainer() to the API level

In order to support use cases such as containerd-shim-v2 where we
would have a long running process holding the sandbox pointer, there
would be no reason to call into the stateless function StopContainer(),
which would recreate a new sandbox pointer and the corresponding ones
for containers.

Fixes #903

Signed-off-by: Sebastien Boeuf <sebastien.boeuf@intel.com>
This commit is contained in:
Sebastien Boeuf 2018-11-12 14:09:15 -08:00
parent 109e12aa56
commit 76537265cb
4 changed files with 23 additions and 13 deletions

View File

@ -502,19 +502,7 @@ func StopContainer(ctx context.Context, sandboxID, containerID string) (VCContai
} }
defer s.releaseStatelessSandbox() defer s.releaseStatelessSandbox()
// Fetch the container. return s.StopContainer(containerID)
c, err := s.findContainer(containerID)
if err != nil {
return nil, err
}
// Stop it.
err = c.stop()
if err != nil {
return nil, err
}
return c, nil
} }
// EnterContainer is the virtcontainers container command execution entry point. // EnterContainer is the virtcontainers container command execution entry point.

View File

@ -77,6 +77,7 @@ type VCSandbox interface {
CreateContainer(contConfig ContainerConfig) (VCContainer, error) CreateContainer(contConfig ContainerConfig) (VCContainer, error)
DeleteContainer(contID string) (VCContainer, error) DeleteContainer(contID string) (VCContainer, error)
StartContainer(containerID string) (VCContainer, error) StartContainer(containerID string) (VCContainer, error)
StopContainer(containerID string) (VCContainer, error)
StatusContainer(containerID string) (ContainerStatus, error) StatusContainer(containerID string) (ContainerStatus, error)
StatsContainer(containerID string) (ContainerStats, error) StatsContainer(containerID string) (ContainerStats, error)
EnterContainer(containerID string, cmd Cmd) (VCContainer, *Process, error) EnterContainer(containerID string, cmd Cmd) (VCContainer, *Process, error)

View File

@ -107,6 +107,11 @@ func (s *Sandbox) StartContainer(contID string) (vc.VCContainer, error) {
return &Container{}, nil return &Container{}, nil
} }
// StopContainer implements the VCSandbox function of the same name.
func (s *Sandbox) StopContainer(contID string) (vc.VCContainer, error) {
return &Container{}, nil
}
// StatusContainer implements the VCSandbox function of the same name. // StatusContainer implements the VCSandbox function of the same name.
func (s *Sandbox) StatusContainer(contID string) (vc.ContainerStatus, error) { func (s *Sandbox) StatusContainer(contID string) (vc.ContainerStatus, error) {
return vc.ContainerStatus{}, nil return vc.ContainerStatus{}, nil

View File

@ -1320,6 +1320,22 @@ func (s *Sandbox) StartContainer(containerID string) (VCContainer, error) {
return c, nil return c, nil
} }
// StopContainer stops a container in the sandbox
func (s *Sandbox) StopContainer(containerID string) (VCContainer, error) {
// Fetch the container.
c, err := s.findContainer(containerID)
if err != nil {
return nil, err
}
// Stop it.
if err := c.stop(); err != nil {
return nil, err
}
return c, nil
}
// DeleteContainer deletes a container from the sandbox // DeleteContainer deletes a container from the sandbox
func (s *Sandbox) DeleteContainer(containerID string) (VCContainer, error) { func (s *Sandbox) DeleteContainer(containerID string) (VCContainer, error) {
if containerID == "" { if containerID == "" {