---
apiVersion: litmuschaos.io/v1alpha1
description:
  message: |
    It injects the chaos inside the pod which modifies the body of the response from the provided application server to the body string provided by the user and reverts after a specified duration
kind: ChaosExperiment
metadata:
  name: pod-http-modify-body
  labels:
    name: pod-http-modify-body
    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-modify-body
    command:
      - /bin/bash
    env:
      - name: TARGET_CONTAINER
        value: ""

      # provide lib image
      - name: LIB_IMAGE
        value: "litmuschaos.docker.scarf.sh/litmuschaos/go-runner:latest"

      # provide the body string to overwrite the response body
      # if no value is provided, response will be an empty body.
      - 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-modify-body
      app.kubernetes.io/part-of: litmus
      app.kubernetes.io/component: experiment-job
      app.kubernetes.io/version: ci