apiVersion: v1
kind: ServiceAccount
metadata:
  name: litmus-admin
  namespace: litmus
  labels:
    name: litmus-admin
---
# Source: openebs/templates/clusterrole.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: litmus-admin
  labels:
    name: litmus-admin
rules:
  # ***************************************************************************************
  # Permissions needed for preparing and monitor the chaos resources by chaos-runner
  # ***************************************************************************************

  # The chaos operator watches the chaosengine resource and orchestartes the chaos experiment..
  ## .. by creating the chaos-runner

  # for creating and monitoring the chaos-runner pods
- apiGroups: [""]
  resources: ["pods","events"]
  verbs: ["create","delete","get","list","patch","update", "deletecollection"]

  # for fetching configmaps and secrets to inject into chaos-runner pod (if specified)
- apiGroups: [""]
  resources: ["secrets","configmaps"]
  verbs: ["get","list",]

  # for tracking & getting logs of the pods created by chaos-runner to implement individual steps in the runner
- apiGroups: [""]
  resources: ["pods/log"]
  verbs: ["get","list","watch"]  

  # for configuring and monitor the experiment job by chaos-runner pod
- apiGroups: ["batch"]
  resources: ["jobs"]
  verbs: ["create","list","get","delete","deletecollection"]

  # ********************************************************************
  # Permissions needed for creation and discovery of chaos experiments 
  # ********************************************************************

  # The helper pods are created by experiment to perform the actual chaos injection ...
  # ... for a period of chaos duration

  # for creating and deleting the helper or target app pod and events by experiment
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["create","delete","deletecollection"]

  # for creating and monitoring the events for chaos operations
- apiGroups: [""]
  resources: ["events"]
  verbs: ["create","delete","get","list","patch","update","deletecollection"]

  # for monitoring the helper and target app pod
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get","list","patch","update"]

  # for creating and managing to execute comands inside target container
- apiGroups: [""]
  resources: ["pods/exec","pods/eviction","replicationcontrollers"]
  verbs: ["get","list","create"]

  # for tracking & getting logs of the pods created by experiment pod to implement individual steps in the experiment
- apiGroups: [""]
  resources: ["pods/log"]
  verbs: ["get","list","watch"]

  # for creating and monitoring liveness services or monitoring target app services during chaos injection
- apiGroups: [""]
  resources: ["services"]
  verbs: ["create","delete","get","list","delete","deletecollection"]

  # for checking the app parent resources as deployments or sts and are eligible chaos candidates  
- apiGroups: ["apps"]
  resources: ["deployments","statefulsets"]
  verbs: ["list","get","patch","update"]

  # for checking the app parent resources as replicasets and are eligible chaos candidates  
- apiGroups: ["apps"]
  resources: ["replicasets"]
  verbs: ["list","get"]

  # for checking the app parent resources as deamonsets and are eligible chaos candidates  
- apiGroups: ["apps"]
  resources: ["daemonsets"]
  verbs: ["list","get","delete"]

  # for checking (openshift) app parent resources if they are eligible chaos candidates  
- apiGroups: ["apps.openshift.io"]
  resources: ["deploymentconfigs"]
  verbs: ["list","get"]

  # for checking (argo) app parent resources if they are eligible chaos candidates  
- apiGroups: ["argoproj.io"]
  resources: ["rollouts"]
  verbs: ["list","get"]

  # performs CRUD operations on the network policies
- apiGroups: ["networking.k8s.io"]
  resources: ["networkpolicies"]
  verbs: ["create","delete","list","get"]

  # 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 and other node level operations like taint, drain in the experiment.
- apiGroups: [""]
  resources: ["nodes"]
  verbs: ["patch","get","list","update"]

---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: litmus-admin
  labels:
    name: litmus-admin
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: litmus-admin
subjects:
- kind: ServiceAccount
  name: litmus-admin
  namespace: litmus

