...
1
2
3
4
5
6
7
8
9
10
11
12
13
14 package crclients
15
16 import (
17 "context"
18 "fmt"
19
20 "github.com/chaos-mesh/chaos-mesh/pkg/chaosdaemon/crclients/containerd"
21 "github.com/chaos-mesh/chaos-mesh/pkg/chaosdaemon/crclients/crio"
22 "github.com/chaos-mesh/chaos-mesh/pkg/chaosdaemon/crclients/docker"
23 )
24
25 const (
26 ContainerRuntimeDocker = "docker"
27 ContainerRuntimeContainerd = "containerd"
28 ContainerRuntimeCrio = "crio"
29
30
31 defaultDockerSocket = "unix:///var/run/docker.sock"
32 defaultContainerdSocket = "/run/containerd/containerd.sock"
33 defaultCrioSocket = "/var/run/crio/crio.sock"
34 containerdDefaultNS = "k8s.io"
35 )
36
37
38 type ContainerRuntimeInfoClient interface {
39 GetPidFromContainerID(ctx context.Context, containerID string) (uint32, error)
40 ContainerKillByContainerID(ctx context.Context, containerID string) error
41 FormatContainerID(ctx context.Context, containerID string) (string, error)
42 }
43
44
45 func CreateContainerRuntimeInfoClient(containerRuntime string) (ContainerRuntimeInfoClient, error) {
46
47
48 var cli ContainerRuntimeInfoClient
49 var err error
50 switch containerRuntime {
51 case ContainerRuntimeDocker:
52 cli, err = docker.New(defaultDockerSocket, "", nil, nil)
53 if err != nil {
54 return nil, err
55 }
56 case ContainerRuntimeContainerd:
57
58 cli, err = containerd.New(defaultContainerdSocket, containerd.WithDefaultNamespace(containerdDefaultNS))
59 if err != nil {
60 return nil, err
61 }
62 case ContainerRuntimeCrio:
63 cli, err = crio.New(defaultCrioSocket)
64 if err != nil {
65 return nil, err
66 }
67 default:
68 return nil, fmt.Errorf("only docker/containerd/crio is supported, but got %s", containerRuntime)
69 }
70
71 return cli, nil
72 }
73