Skip to content

Commit cfe4b8e

Browse files
authored
chore(signal): Adding signal in container-kill (#311)
Signed-off-by: shubhamchaudhary <[email protected]>
1 parent b756c5c commit cfe4b8e

5 files changed

Lines changed: 19 additions & 7 deletions

File tree

chaoslib/litmus/container-kill/helper/container-kill.go

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -85,11 +85,11 @@ func KillContainer(experimentsDetails *experimentTypes.ExperimentDetails, client
8585

8686
switch experimentsDetails.ContainerRuntime {
8787
case "docker":
88-
if err := StopDockerContainer(containerID, experimentsDetails.SocketPath); err != nil {
88+
if err := StopDockerContainer(containerID, experimentsDetails.SocketPath, experimentsDetails.Signal); err != nil {
8989
return err
9090
}
9191
case "containerd", "crio":
92-
if err := StopContainerdContainer(containerID, experimentsDetails.SocketPath); err != nil {
92+
if err := StopContainerdContainer(containerID, experimentsDetails.SocketPath, experimentsDetails.Signal); err != nil {
9393
return err
9494
}
9595
default:
@@ -152,10 +152,18 @@ func GetContainerID(experimentsDetails *experimentTypes.ExperimentDetails, clien
152152
}
153153

154154
//StopContainerdContainer kill the application container
155-
func StopContainerdContainer(containerID, socketPath string) error {
155+
func StopContainerdContainer(containerID, socketPath, signal string) error {
156156
var errOut bytes.Buffer
157+
var cmd *exec.Cmd
157158
endpoint := "unix://" + socketPath
158-
cmd := exec.Command("crictl", "-i", endpoint, "-r", endpoint, "stop", string(containerID))
159+
switch signal {
160+
case "SIGKILL":
161+
cmd = exec.Command("crictl", "-i", endpoint, "-r", endpoint, "stop", "--timeout=0", string(containerID))
162+
case "SIGTERM":
163+
cmd = exec.Command("crictl", "-i", endpoint, "-r", endpoint, "stop", string(containerID))
164+
default:
165+
return errors.Errorf("{%v} signal not supported, use either SIGTERM or SIGKILL", signal)
166+
}
159167
cmd.Stderr = &errOut
160168
if err := cmd.Run(); err != nil {
161169
return errors.Errorf("Unable to run command, err: %v; error output: %v", err, errOut.String())
@@ -164,10 +172,10 @@ func StopContainerdContainer(containerID, socketPath string) error {
164172
}
165173

166174
//StopDockerContainer kill the application container
167-
func StopDockerContainer(containerID, socketPath string) error {
175+
func StopDockerContainer(containerID, socketPath, signal string) error {
168176
var errOut bytes.Buffer
169177
host := "unix://" + socketPath
170-
cmd := exec.Command("docker", "--host", host, "kill", string(containerID))
178+
cmd := exec.Command("docker", "--host", host, "kill", string(containerID), "--signal", signal)
171179
cmd.Stderr = &errOut
172180
if err := cmd.Run(); err != nil {
173181
return errors.Errorf("Unable to run command, err: %v; error output: %v", err, errOut.String())
@@ -268,6 +276,7 @@ func GetENV(experimentDetails *experimentTypes.ExperimentDetails, name string) {
268276
experimentDetails.ChaosPodName = Getenv("POD_NAME", "")
269277
experimentDetails.SocketPath = Getenv("SOCKET_PATH", "")
270278
experimentDetails.ContainerRuntime = Getenv("CONTAINER_RUNTIME", "")
279+
experimentDetails.Signal = Getenv("SIGNAL", "SIGKILL")
271280
}
272281

273282
// Getenv fetch the env and set the default value, if any

chaoslib/litmus/container-kill/lib/container-kill.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -317,6 +317,7 @@ func GetPodEnv(experimentsDetails *experimentTypes.ExperimentDetails, podName st
317317
"ITERATIONS": strconv.Itoa(experimentsDetails.Iterations),
318318
"SOCKET_PATH": experimentsDetails.SocketPath,
319319
"CONTAINER_RUNTIME": experimentsDetails.ContainerRuntime,
320+
"SIGNAL": experimentsDetails.Signal,
320321
}
321322
for key, value := range ENVList {
322323
var perEnv apiv1.EnvVar

chaoslib/pumba/container-kill/lib/container-kill.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -339,7 +339,7 @@ func CreateHelperPod(experimentsDetails *experimentTypes.ExperimentDetails, clie
339339
strconv.Itoa(experimentsDetails.ChaosInterval) + "s",
340340
"kill",
341341
"--signal",
342-
"SIGKILL",
342+
experimentsDetails.Signal,
343343
"re2:k8s_" + experimentsDetails.TargetContainer + "_" + appName,
344344
},
345345
Resources: experimentsDetails.Resources,

pkg/generic/container-kill/environment/environment.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ func GetENV(experimentDetails *experimentTypes.ExperimentDetails) {
3636
experimentDetails.ContainerRuntime = Getenv("CONTAINER_RUNTIME", "docker")
3737
experimentDetails.PodsAffectedPerc, _ = strconv.Atoi(Getenv("PODS_AFFECTED_PERC", "0"))
3838
experimentDetails.Sequence = Getenv("SEQUENCE", "parallel")
39+
experimentDetails.Signal = Getenv("SIGNAL", "SIGKILL")
3940
}
4041

4142
// Getenv fetch the env and set the default value, if any

pkg/generic/container-kill/types/types.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,4 +35,5 @@ type ExperimentDetails struct {
3535
Annotations map[string]string
3636
Sequence string
3737
Resources corev1.ResourceRequirements
38+
Signal string
3839
}

0 commit comments

Comments
 (0)