---
apiVersion: litmuschaos.io/v1alpha1
description:
  message: |
    Stops GCP VM instances and GKE nodes for a specified duration and later restarts them
kind: ChaosExperiment
metadata:
  name: gcp-vm-instance-stop
  labels:
    name: gcp-vm-instance-stop
    app.kubernetes.io/part-of: litmus
    app.kubernetes.io/component: chaosexperiment
    app.kubernetes.io/version: ci
spec:
  definition:
    scope: Cluster
    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 & secrets details and mount it to the experiment pod (if specified)
      - apiGroups: [""]
        resources: ["secrets", "configmaps"]
        verbs: ["get", "list"]
      # Track and get the runner, experiment, and helper pods log
      - apiGroups: [""]
        resources: ["pods/log"]
        verbs: ["get", "list", "watch"]
      # 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"]
      # for experiment to perform node status checks
      - apiGroups: [""]
        resources: ["nodes"]
        verbs: ["get", "list"]
    image: "litmuschaos.docker.scarf.sh/litmuschaos/go-runner:latest"
    imagePullPolicy: Always
    args:
      - -c
      - ./experiments -name gcp-vm-instance-stop
    command:
      - /bin/bash
    env:
      - name: TOTAL_CHAOS_DURATION
        value: "30"

      - name: CHAOS_INTERVAL
        value: "30"

      # parallel or serial; determines how the VM instances are terminated, all at once or one at a time
      - name: SEQUENCE
        value: "parallel"

      # period to wait before and after injection of chaos in sec
      - name: RAMP_TIME
        value: ""

      # enable or disable; shall be set to enable if the target instances are a part of a managed instance group
      - name: MANAGED_INSTANCE_GROUP
        value: "disable"

      # Instance name of the target VM instance(s)
      # Multiple instance names can be provided as comma separated values ex: instance1,instance2
      - name: VM_INSTANCE_NAMES
        value: ""

      # GCP project ID to which the VM instances belong
      - name: GCP_PROJECT_ID
        value: ""

      # Instance zone(s) of the target VM instance(s)
      # If more than one instance is targetted, provide zone for each in the order of their
      # respective instance name in VM_INSTANCE_NAME as comma separated values ex: zone1,zone2
      - name: ZONES
        value: ""

      - name: DEFAULT_HEALTH_CHECK
        value: "false"

      # parallel or serial; determines how chaos is injected
      - name: SEQUENCE
        value: "parallel"

    labels:
      name: gcp-vm-instance-stop
      app.kubernetes.io/part-of: litmus
      app.kubernetes.io/component: experiment-job
      app.kubernetes.io/version: ci
    secrets:
      - name: cloud-secret
        mountPath: /tmp/

---
---
apiVersion: litmuschaos.io/v1alpha1
description:
  message: |
    Causes loss of a non-boot storage persistent disk from a GCP VM instance filtered by a label for a specified duration before attaching them back
kind: ChaosExperiment
metadata:
  name: gcp-vm-disk-loss-by-label
  labels:
    name: gcp-vm-disk-loss-by-label
    app.kubernetes.io/part-of: litmus
    app.kubernetes.io/component: chaosexperiment
    app.kubernetes.io/version: ci
spec:
  definition:
    scope: Cluster
    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 & secrets details and mount it to the experiment pod (if specified)
      - apiGroups: [""]
        resources: ["secrets", "configmaps"]
        verbs: ["get", "list"]
      # Track and get the runner, experiment, and helper pods log
      - apiGroups: [""]
        resources: ["pods/log"]
        verbs: ["get", "list", "watch"]
      # 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 gcp-vm-disk-loss-by-label
    command:
      - /bin/bash
    env:
      # set chaos duration (in sec) as desired
      - name: TOTAL_CHAOS_DURATION
        value: "30"

      # set chaos interval (in sec) as desired
      - name: CHAOS_INTERVAL
        value: "30"

      # set the GCP project id
      - name: GCP_PROJECT_ID
        value: ""

      # set the zone in which all the disks are created
      # all the disks must exist in the same zone
      - name: ZONES
        value: ""

      # set the label of the target disk volumes
      - name: DISK_VOLUME_LABEL
        value: ""

      # set the percentage value of the disks with the given label
      # which should be targeted as part of the chaos injection
      - name: DISK_AFFECTED_PERC
        value: ""

      - name: DEFAULT_HEALTH_CHECK
        value: "false"

      - name: SEQUENCE
        value: "parallel"

    labels:
      name: gcp-vm-disk-loss-by-label
      app.kubernetes.io/part-of: litmus
      app.kubernetes.io/component: experiment-job
      app.kubernetes.io/version: ci
    secrets:
      - name: cloud-secret
        mountPath: /tmp/

---
---
apiVersion: litmuschaos.io/v1alpha1
description:
  message: |
    Stops GCP VM instances and GKE nodes filtered by a label for a specified duration and later restarts them
kind: ChaosExperiment
metadata:
  name: gcp-vm-instance-stop-by-label
  labels:
    name: gcp-vm-instance-stop-by-label
    app.kubernetes.io/part-of: litmus
    app.kubernetes.io/component: chaosexperiment
    app.kubernetes.io/version: ci
spec:
  definition:
    scope: Cluster
    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 & secrets details and mount it to the experiment pod (if specified)
      - apiGroups: [""]
        resources: ["secrets", "configmaps"]
        verbs: ["get", "list"]
      # Track and get the runner, experiment, and helper pods log
      - apiGroups: [""]
        resources: ["pods/log"]
        verbs: ["get", "list", "watch"]
      # 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"]
      # for experiment to perform node status checks
      - apiGroups: [""]
        resources: ["nodes"]
        verbs: ["get", "list"]
    image: "litmuschaos.docker.scarf.sh/litmuschaos/go-runner:latest"
    imagePullPolicy: Always
    args:
      - -c
      - ./experiments -name gcp-vm-instance-stop-by-label
    command:
      - /bin/bash
    env:
      # set chaos duration (in sec) as desired
      - name: TOTAL_CHAOS_DURATION
        value: "30"

      # set chaos interval (in sec) as desired
      - name: CHAOS_INTERVAL
        value: "30"

      - name: SEQUENCE
        value: "parallel"

      # GCP project ID to which the VM instances belong
      - name: GCP_PROJECT_ID
        value: ""

      # Label of the target VM instance(s)
      - name: INSTANCE_LABEL
        value: ""

      # Zone in which the target VM instance(s) filtered by the label exist
      # all the instances should lie in a single zone
      - name: ZONES
        value: ""

      # enable it if the target instance is a part of a managed instance group
      - name: MANAGED_INSTANCE_GROUP
        value: "disable"

      # set the percentage value of the instances with the given label
      # which should be targeted as part of the chaos injection
      - name: INSTANCE_AFFECTED_PERC
        value: ""

      - name: DEFAULT_HEALTH_CHECK
        value: "false"

    labels:
      name: gcp-vm-instance-stop-by-label
      app.kubernetes.io/part-of: litmus
      app.kubernetes.io/component: experiment-job
      app.kubernetes.io/version: ci
    secrets:
      - name: cloud-secret
        mountPath: /tmp/

---
---
apiVersion: litmuschaos.io/v1alpha1
description:
  message: |
    Causes loss of a non-boot storage persistent disk from a GCP VM instance for a specified duration before attaching them back
kind: ChaosExperiment
metadata:
  name: gcp-vm-disk-loss
  labels:
    name: gcp-vm-disk-loss
    app.kubernetes.io/part-of: litmus
    app.kubernetes.io/component: chaosexperiment
    app.kubernetes.io/version: ci
spec:
  definition:
    scope: Cluster
    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 & secrets details and mount it to the experiment pod (if specified)
      - apiGroups: [""]
        resources: ["secrets", "configmaps"]
        verbs: ["get", "list"]
      # Track and get the runner, experiment, and helper pods log
      - apiGroups: [""]
        resources: ["pods/log"]
        verbs: ["get", "list", "watch"]
      # 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 gcp-vm-disk-loss
    command:
      - /bin/bash
    env:
      - name: TOTAL_CHAOS_DURATION
        value: "30"

      - name: CHAOS_INTERVAL
        value: "30"

      # Period to wait before and after injection of chaos in sec
      - name: RAMP_TIME
        value: ""

      # parallel or serial; determines how chaos is injected
      - name: SEQUENCE
        value: "parallel"

      # set the GCP project id
      - name: GCP_PROJECT_ID
        value: ""

      # set the disk volume name(s) as comma seperated values
      # eg. volume1,volume2,...
      - name: DISK_VOLUME_NAMES
        value: ""

      # set the disk zone(s) as comma seperated values in the corresponding
      # order of DISK_VOLUME_NAME
      # eg. zone1,zone2,...
      - name: ZONES
        value: ""

      - name: DEFAULT_HEALTH_CHECK
        value: "false"

      # parallel or serial; determines how chaos is injected
      - name: SEQUENCE
        value: "parallel"

    labels:
      name: gcp-vm-disk-loss
      app.kubernetes.io/part-of: litmus
      app.kubernetes.io/component: experiment-job
      app.kubernetes.io/version: ci
    secrets:
      - name: cloud-secret
        mountPath: /tmp/

---
