github.com/castai/kvisor@v1.7.1-0.20240516114728-b3572a2607b5/pkg/containers/container_client.go (about)

     1  package containers
     2  
     3  import (
     4  	"context"
     5  	"time"
     6  
     7  	"github.com/containerd/containerd"
     8  	"github.com/containerd/containerd/api/services/tasks/v1"
     9  	"github.com/containerd/containerd/api/types/task"
    10  	"github.com/samber/lo"
    11  )
    12  
    13  func newContainerClient(address string) (*containerClient, error) {
    14  	client, err := containerd.New(address, containerd.WithTimeout(10*time.Second), containerd.WithDefaultNamespace("k8s.io"))
    15  	if err != nil {
    16  		return nil, err
    17  	}
    18  	return &containerClient{
    19  		client: client,
    20  	}, nil
    21  }
    22  
    23  // containerClient wraps container runtime specific implementations. For we support only containerd.
    24  type containerClient struct {
    25  	client *containerd.Client
    26  }
    27  
    28  func (c *containerClient) getContainerPids(ctx context.Context, containerID string) ([]uint32, error) {
    29  	res, err := c.client.TaskService().ListPids(ctx, &tasks.ListPidsRequest{ContainerID: containerID})
    30  	if err != nil {
    31  		return nil, err
    32  	}
    33  	return lo.Map(res.GetProcesses(), func(item *task.ProcessInfo, index int) uint32 {
    34  		return item.GetPid()
    35  	}), nil
    36  }