Command Probe
The command probe allows developers to run shell commands and match the resulting output as part of the entry/exit criteria. The intent behind this probe was to allow users to implement a non-standard & imperative way of expressing their hypothesis. For example, the cmdProbe enables you to check for specific data within a database, parse the value out of a JSON blob being dumped into a certain path, or check for the existence of a particular string in the service logs.
It can be executed by setting type
as cmdProbe
inside .spec.experiments[].spec.probe
.
View the command probe schema
Field |
.name |
Description |
Flag to hold the name of the probe |
Type |
Mandatory |
Range |
n/a (type: string) |
Notes |
The .name holds the name of the probe. It can be set based on the usecase |
Field |
.type |
Description |
Flag to hold the type of the probe |
Type |
Mandatory |
Range |
httpProbe , k8sProbe , cmdProbe , promProbe |
Notes |
The .type supports four type of probes. It can one of the httpProbe , k8sProbe , cmdProbe , promProbe |
Field |
.mode |
Description |
Flag to hold the mode of the probe |
Type |
Mandatory |
Range |
SOT , EOT , Edge , Continuous , OnChaos |
Notes |
The .mode supports five modes of probes. It can one of the SOT , EOT , Edge , Continuous , OnChaos |
Field |
.cmdProbe/inputs.command |
Description |
Flag to hold the command for the cmdProbe |
Type |
Mandatory |
Range |
n/a {type: string} |
Notes |
The .cmdProbe/inputs.command contains the shell command, which should be run as part of cmdProbe |
Field |
.cmdProbe/inputs.source |
Description |
Flag to hold the source for the cmdProbe |
Type |
Mandatory |
Range |
It contains the source attributes i.e, image, imagePullPolicy |
Notes |
The .cmdProbe/inputs.source It supports inline mode where command should be run within the experiment pod, and it can be tuned by omiting source field. Otherwise provide the source details(i.e, image) which can be used to launch a external pod where the command execution is carried out. |
Field |
.cmdProbe/inputs.comparator.type |
Description |
Flag to hold type of the data used for comparision |
Type |
Mandatory |
Range |
string , int , float |
Notes |
The .cmdProbe/inputs.comparator.type contains type of data, which should be compare as part of comparision operation |
Field |
.cmdProbe/inputs.comparator.criteria |
Description |
Flag to hold criteria for the comparision |
Type |
Mandatory |
Range |
it supports {>=, <=, ==, >, <, !=, oneOf, between} for int & float type. And {equal, notEqual, contains, matches, notMatches, oneOf} for string type. |
Notes |
The .cmdProbe/inputs.comparator.criteria contains criteria of the comparision, which should be fulfill as part of comparision operation. |
Field |
.cmdProbe/inputs.comparator.value |
Description |
Flag to hold value for the comparision |
Type |
Mandatory |
Range |
n/a {type: string} |
Notes |
The .cmdProbe/inputs.comparator.value contains value of the comparision, which should follow the given criteria as part of comparision operation. |
Field |
.runProperties.probeTimeout |
Description |
Flag to hold the timeout for the probes |
Type |
Mandatory |
Range |
n/a {type: integer} |
Notes |
The .runProperties.probeTimeout represents the time limit for the probe to execute the specified check and return the expected data |
Field |
.runProperties.retry |
Description |
Flag to hold the retry count for the probes |
Type |
Mandatory |
Range |
n/a {type: integer} |
Notes |
The .runProperties.retry contains the number of times a check is re-run upon failure in the first attempt before declaring the probe status as failed. |
Field |
.runProperties.interval |
Description |
Flag to hold the interval for the probes |
Type |
Mandatory |
Range |
n/a {type: integer} |
Notes |
The .runProperties.interval contains the interval for which probes waits between subsequent retries |
Field |
.runProperties.probePollingInterval |
Description |
Flag to hold the polling interval for the probes(applicable for Continuous mode only) |
Type |
Optional |
Range |
n/a {type: integer} |
Notes |
The .runProperties.probePollingInterval contains the time interval for which continuous probe should be sleep after each iteration |
Field |
.runProperties.initialDelaySeconds |
Description |
Flag to hold the initial delay interval for the probes |
Type |
Optional |
Range |
n/a {type: integer} |
Notes |
The .runProperties.initialDelaySeconds represents the initial waiting time interval for the probes. |
Field |
.runProperties.stopOnFailure |
Description |
Flags to hold the stop or continue the experiment on probe failure |
Type |
Optional |
Range |
false {type: boolean} |
Notes |
The .runProperties.stopOnFailure can be set to true/false to stop or continue the experiment execution after probe fails |
Common Probe Tunables
Refer the common attributes to tune the common tunables for all the probes.
Inline Mode
In inline mode, the command probe is executed from within the experiment pod. It is preferred for simple shell commands.
It is default mode, and it can be tuned by omitting source field.
Use the following example to tune this:
# execute the command inside the experiment pod itself
# cases where command doesn't need any extra binaries which is not available in litmsuchaos/go-runner image
apiVersion: litmuschaos.io/v1alpha1
kind: ChaosEngine
metadata:
name: engine-nginx
spec:
engineState: "active"
appinfo:
appns: "default"
applabel: "app=nginx"
appkind: "deployment"
chaosServiceAccount: pod-delete-sa
experiments:
- name: pod-delete
spec:
probe:
- name: "check-database-integrity"
type: "cmdProbe"
cmdProbe/inputs:
# command which needs to run in cmdProbe
command: "<command>"
comparator:
# output type for the above command
# supports: string, int, float
type: "string"
# criteria which should be followed by the actual output and the expected output
#supports [>=, <=, >, <, ==, !=] for int and float
# supports [contains, equal, notEqual, matches, notMatches] for string values
criteria: "contains"
# expected value, which should follow the specified criteria
value: "<value-for-criteria-match>"
mode: "Edge"
runProperties:
probeTimeout: 5
interval: 5
retry: 1
initialDelaySeconds: 5
Source Mode
In source mode, the command execution is carried out from within a new pod whose image can be specified. It can be used when application-specific binaries are required.
View the source probe schema
Field |
.image |
Description |
Flag to hold the image of the source pod |
Type |
Mandatory |
Range |
n/a (type: string) |
Notes |
The .image holds the image of the source pod/td>
|
Field |
.hostNetwork |
Description |
Flag to enable the hostNetwork for the source pod |
Type |
Optional |
Range |
(type: boolean) |
Notes |
The .hostNetwork flag to enable the hostnetwork. It supports boolean values and default value is false/td>
|
Field |
.args |
Description |
Flag to hold the args for the source pod |
Type |
Optional |
Range |
(type: []string]) |
Notes |
The .args flag to hold the args for source pod/td>
|
Field |
.env |
Description |
Flag to hold the envs for the source pod |
Type |
Optional |
Range |
(type: []corev1.EnvVar]) |
Notes |
The .env flag to hold the envs for source pod/td>
|
Field |
.labels |
Description |
Flag to hold the labels for the source pod |
Type |
Optional |
Range |
(type: map[string]string) |
Notes |
The .labels flag to hold the labels for source pod/td>
|
Field |
.annotations |
Description |
Flag to hold the annotations for the source pod |
Type |
Optional |
Range |
(type: map[string]string) |
Notes |
The .annotations flag to hold the annotations for source pod/td>
|
Field |
.command |
Description |
Flag to hold the command for the source pod |
Type |
Optional |
Range |
(type: []string |
Notes |
The .command flag to hold the command for source pod/td>
|
Field |
.imagePullPolicy |
Description |
Flag to set the imagePullPolicy for the source pod |
Type |
Optional |
Range |
(type: corev1.PullPolicy |
Notes |
The .imagePullPolicy Flag to set the imagePullPolicy for the source pod/td>
|
Field |
.privileged |
Description |
Flag to set the privileged for the source pod |
Type |
Optional |
Range |
(type: boolean |
Notes |
The .privileged Flag to set the privileged for the source pod. Default value is false/td>
|
Field |
.nodeSelector |
Description |
Flag to hold the node selectors for the probe pod |
Type |
Optional |
Range |
(type: map[string]string |
Notes |
The .nodeSelector Flag to hold the node selectors for the probe pod/td>
|
Field |
.tolerations |
Description |
Flag to hold the tolerations for the probe pod |
Type |
Optional |
Range |
(type: []corev1.Tolerations |
Notes |
The .tolerations Flag to hold the Tolerations for the probe pod |
Field |
.volumes |
Description |
Flag to hold the volumes for the source pod |
Type |
Optional |
Range |
(type: []corev1.Volume |
Notes |
The .volumes Flag to hold the volumes for source pod/td>
|
Field |
.volumeMount |
Description |
Flag to hold the volume mounts for the source pod |
Type |
Optional |
Range |
(type: []corev1.VolumeMount |
Notes |
The .volumes Flag to hold the volume Mounts for source pod/td>
|
Field |
.imagePullSecrets |
Description |
Flag to set the imagePullSecrets for the source pod |
Type |
Optional |
Range |
(type: []corev1.LocalObjectReference |
Notes |
The .imagePullSecrets Flag to set the imagePullSecrets for the source pod/td>
|
Use the following example to tune this:
# it launches the external pod with the source image and run the command inside the same pod
# cases where command needs an extra binaries which is not available in litmsuchaos/go-runner image
apiVersion: litmuschaos.io/v1alpha1
kind: ChaosEngine
metadata:
name: engine-nginx
spec:
engineState: "active"
appinfo:
appns: "default"
applabel: "app=nginx"
appkind: "deployment"
chaosServiceAccount: pod-delete-sa
experiments:
- name: pod-delete
spec:
probe:
- name: "check-database-integrity"
type: "cmdProbe"
cmdProbe/inputs:
# command which needs to run in cmdProbe
command: "<command>"
comparator:
# output type for the above command
# supports: string, int, float
type: "string"
# criteria which should be followed by the actual output and the expected output
#supports [>=, <=, >, <, ==, !=, oneOf, between] for int and float
# supports [contains, equal, notEqual, matches, notMatches, oneOf] for string values
criteria: "contains"
# expected value, which should follow the specified criteria
value: "<value-for-criteria-match>"
# source for the cmdProbe
source:
image: "<source-image>"
imagePullPolicy: Always
privileged: true
hostNetwork: false
mode: "Edge"
runProperties:
probeTimeout: 5
interval: 5
retry: 1
initialDelaySeconds: 5