--- apiVersion: litmuschaos.io/v1alpha1 description: message: | It injects chaos inside the pod which modifies the status code of the response from the provided application server to desired status code provided by the user and reverts after a specified duration kind: ChaosExperiment metadata: name: pod-http-status-code labels: name: pod-http-status-code app.kubernetes.io/part-of: litmus app.kubernetes.io/component: chaosexperiment app.kubernetes.io/version: ci spec: definition: scope: Namespaced permissions: # Create and monitor the experiment & helper pods - apiGroups: [""] resources: ["pods"] verbs: [ "create", "delete", "get", "list", "patch", "update", "deletecollection", ] # Performs CRUD operations on the events inside chaosengine and chaosresult - apiGroups: [""] resources: ["events"] verbs: ["create", "get", "list", "patch", "update"] # Fetch configmaps details and mount it to the experiment pod (if specified) - apiGroups: [""] resources: ["configmaps"] verbs: ["get", "list"] # Track and get the runner, experiment, and helper pods log - apiGroups: [""] resources: ["pods/log"] verbs: ["get", "list", "watch"] # for creating and managing to execute commands inside target container - apiGroups: [""] resources: ["pods/exec"] verbs: ["get", "list", "create"] # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - apiGroups: ["apps"] resources: ["deployments", "statefulsets", "replicasets", "daemonsets"] verbs: ["list", "get"] # deriving the parent/owner details of the pod(if parent is deploymentConfig) - apiGroups: ["apps.openshift.io"] resources: ["deploymentconfigs"] verbs: ["list", "get"] # deriving the parent/owner details of the pod(if parent is deploymentConfig) - apiGroups: [""] resources: ["replicationcontrollers"] verbs: ["get", "list"] # deriving the parent/owner details of the pod(if parent is argo-rollouts) - apiGroups: ["argoproj.io"] resources: ["rollouts"] verbs: ["list", "get"] # for configuring and monitor the experiment job by the chaos-runner pod - apiGroups: ["batch"] resources: ["jobs"] verbs: ["create", "list", "get", "delete", "deletecollection"] # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - apiGroups: ["litmuschaos.io"] resources: ["chaosengines", "chaosexperiments", "chaosresults"] verbs: ["create", "list", "get", "patch", "update", "delete"] image: "litmuschaos.docker.scarf.sh/litmuschaos/go-runner:latest" imagePullPolicy: Always args: - -c - ./experiments -name pod-http-status-code command: - /bin/bash env: - name: TARGET_CONTAINER value: "" # provide lib image - name: LIB_IMAGE value: "litmuschaos.docker.scarf.sh/litmuschaos/go-runner:latest" # modified status code for the HTTP response # if no value is provided, a random status code from the supported code list will selected # if an invalid status code is provided, the experiment will fail # supported status code list: [200, 201, 202, 204, 300, 301, 302, 304, 307, 400, 401, 403, 404, 500, 501, 502, 503, 504] - name: STATUS_CODE value: "" # whether to modify the body as per the status code provided - name: "MODIFY_RESPONSE_BODY" value: "true" # provide the body string to overwrite the response body. This will be used only if MODIFY_RESPONSE_BODY is set to true - name: RESPONSE_BODY value: "" # provide the encoding type for the response body # currently supported value are gzip, deflate # if empty no encoding will be applied - name: CONTENT_ENCODING value: "" # provide the content type for the response body - name: CONTENT_TYPE value: "text/plain" # port of the target service - name: TARGET_SERVICE_PORT value: "80" # toxicity is the probability of the request to be affected # provide the percentage value in the range of 0-100 # 0 means no request will be affected and 100 means all request will be affected - name: TOXICITY value: "100" # port on which the proxy will listen - name: PROXY_PORT value: "20000" # network interface on which the proxy will listen - name: NETWORK_INTERFACE value: "eth0" - name: TOTAL_CHAOS_DURATION value: "60" # in seconds # Time period to wait before and after injection of chaos in sec - name: RAMP_TIME value: "" - name: DEFAULT_HEALTH_CHECK value: "false" # percentage of total pods to target - name: PODS_AFFECTED_PERC value: "" - name: TARGET_PODS value: "" # provide the name of container runtime # for litmus LIB, it supports docker, containerd, crio # for pumba LIB, it supports docker only - name: CONTAINER_RUNTIME value: "containerd" # provide the socket file path - name: SOCKET_PATH value: "/run/containerd/containerd.sock" # To select pods on specific node(s) - name: NODE_LABEL value: "" ## it defines the sequence of chaos execution for multiple target pods ## supported values: serial, parallel - name: SEQUENCE value: "parallel" labels: name: pod-http-status-code app.kubernetes.io/part-of: litmus app.kubernetes.io/component: experiment-job app.kubernetes.io/version: ci