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 }