From b298ec422884078a2f79ff3da0e4408974f61c04 Mon Sep 17 00:00:00 2001 From: Sebastien Boeuf Date: Mon, 12 Nov 2018 14:36:47 -0800 Subject: [PATCH] sandbox: Create and export ProcessListContainer() 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 ProcessListContainer(), which would recreate a new sandbox pointer and the corresponding ones for containers. Fixes #903 Signed-off-by: Sebastien Boeuf --- virtcontainers/api.go | 8 +------- virtcontainers/interfaces.go | 1 + virtcontainers/pkg/vcmock/sandbox.go | 5 +++++ virtcontainers/sandbox.go | 13 +++++++++++++ 4 files changed, 20 insertions(+), 7 deletions(-) diff --git a/virtcontainers/api.go b/virtcontainers/api.go index 47e764813..c564b9461 100644 --- a/virtcontainers/api.go +++ b/virtcontainers/api.go @@ -702,13 +702,7 @@ func ProcessListContainer(ctx context.Context, sandboxID, containerID string, op } defer s.releaseStatelessSandbox() - // Fetch the container. - c, err := s.findContainer(containerID) - if err != nil { - return nil, err - } - - return c.processList(options) + return s.ProcessListContainer(containerID, options) } // UpdateContainer is the virtcontainers entry point to update diff --git a/virtcontainers/interfaces.go b/virtcontainers/interfaces.go index 2ef0cb8f8..82e753c35 100644 --- a/virtcontainers/interfaces.go +++ b/virtcontainers/interfaces.go @@ -83,6 +83,7 @@ type VCSandbox interface { StatsContainer(containerID string) (ContainerStats, error) EnterContainer(containerID string, cmd Cmd) (VCContainer, *Process, error) UpdateContainer(containerID string, resources specs.LinuxResources) error + ProcessListContainer(containerID string, options ProcessListOptions) (ProcessList, error) WaitProcess(containerID, processID string) (int32, error) SignalProcess(containerID, processID string, signal syscall.Signal, all bool) error WinsizeProcess(containerID, processID string, height, width uint32) error diff --git a/virtcontainers/pkg/vcmock/sandbox.go b/virtcontainers/pkg/vcmock/sandbox.go index 9614e8fa4..2d3dfb14f 100644 --- a/virtcontainers/pkg/vcmock/sandbox.go +++ b/virtcontainers/pkg/vcmock/sandbox.go @@ -147,6 +147,11 @@ func (s *Sandbox) UpdateContainer(containerID string, resources specs.LinuxResou return nil } +// ProcessListContainer implements the VCSandbox function of the same name. +func (s *Sandbox) ProcessListContainer(containerID string, options vc.ProcessListOptions) (vc.ProcessList, error) { + return nil, nil +} + // WaitProcess implements the VCSandbox function of the same name. func (s *Sandbox) WaitProcess(containerID, processID string) (int32, error) { return 0, nil diff --git a/virtcontainers/sandbox.go b/virtcontainers/sandbox.go index 093305fce..d8fa76dfe 100644 --- a/virtcontainers/sandbox.go +++ b/virtcontainers/sandbox.go @@ -1383,6 +1383,19 @@ func (s *Sandbox) DeleteContainer(containerID string) (VCContainer, error) { return c, nil } +// ProcessListContainer lists every process running inside a specific +// container in the sandbox. +func (s *Sandbox) ProcessListContainer(containerID string, options ProcessListOptions) (ProcessList, error) { + // Fetch the container. + c, err := s.findContainer(containerID) + if err != nil { + return nil, err + } + + // Get the process list related to the container. + return c.processList(options) +} + // StatusContainer gets the status of a container // TODO: update container status properly, see kata-containers/runtime#253 func (s *Sandbox) StatusContainer(containerID string) (ContainerStatus, error) {