apiVersion: v1
kind: Namespace
metadata:
  name: litmus
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: litmus
  namespace: litmus
  labels:
    app.kubernetes.io/name: litmus
    # provide unique instance-id if applicable
    # app.kubernetes.io/instance: litmus-abcxzy
    app.kubernetes.io/version: v1.11.2
    app.kubernetes.io/component: operator-serviceaccount
    app.kubernetes.io/part-of: litmus
    app.kubernetes.io/managed-by: kubectl
    name: litmus
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: litmus
  labels:
    app.kubernetes.io/name: litmus
    # provide unique instance-id if applicable
    # app.kubernetes.io/instance: litmus-abcxzy
    app.kubernetes.io/version: v1.11.2
    app.kubernetes.io/component: operator-clusterrole
    app.kubernetes.io/part-of: litmus
    app.kubernetes.io/managed-by: kubectl
    name: litmus
rules:
- apiGroups: [""]
  resources: ["replicationcontrollers","secrets"]
  verbs: ["get","list"]
- apiGroups: ["apps.openshift.io"]
  resources: ["deploymentconfigs"]
  verbs: ["get","list"]
- apiGroups: ["apps"]
  resources: ["deployments", "daemonsets", "replicasets", "statefulsets"]
  verbs: ["get","list"]
- apiGroups: ["batch"]
  resources: ["jobs"]
  verbs: ["get","list","deletecollection"]
- apiGroups: ["argoproj.io"]
  resources: ["rollouts"]
  verbs: ["get","list"]
- apiGroups: [""]
  resources: ["pods","configmaps","events","services"]
  verbs: ["get","create","update","patch","delete","list","watch","deletecollection"]
- apiGroups: ["litmuschaos.io"]
  resources: ["chaosengines","chaosexperiments","chaosresults"]
  verbs: ["get","create","update","patch","delete","list","watch","deletecollection"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: litmus
  labels:
    app.kubernetes.io/name: litmus
    # provide unique instance-id if applicable
    # app.kubernetes.io/instance: litmus-abcxzy
    app.kubernetes.io/version: v1.11.2
    app.kubernetes.io/component: operator-clusterrolebinding
    app.kubernetes.io/part-of: litmus
    app.kubernetes.io/managed-by: kubectl
    name: litmus
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: litmus
subjects:
- kind: ServiceAccount
  name: litmus
  namespace: litmus
---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app.kubernetes.io/name: litmus
    # provide unique instance-id if applicable
    # app.kubernetes.io/instance: litmus-abcxzy
    app.kubernetes.io/version: v1.11.2
    app.kubernetes.io/component: operator
    app.kubernetes.io/part-of: litmus
    app.kubernetes.io/managed-by: kubectl
    name: litmus
  name: chaos-operator-ce
  namespace: litmus
spec:
  replicas: 1
  selector:
    matchLabels:
      name: chaos-operator
  template:
    metadata:
      labels:
        app.kubernetes.io/name: litmus
        # provide unique instance-id if applicable
        # app.kubernetes.io/instance: litmus-abcxzy
        app.kubernetes.io/version: v1.11.2
        app.kubernetes.io/component: operator
        app.kubernetes.io/part-of: litmus
        app.kubernetes.io/managed-by: kubectl
        name: chaos-operator
    spec:
      serviceAccountName: litmus
      containers:
        - name: chaos-operator
          image: litmuschaos/chaos-operator:1.11.2
          command:
          - chaos-operator
          imagePullPolicy: Always
          env:
            - name: CHAOS_RUNNER_IMAGE
              value: "litmuschaos/chaos-runner:1.11.2"
            - name: WATCH_NAMESPACE
              value: ""
            - name: POD_NAME
              valueFrom:
                fieldRef:
                  fieldPath: metadata.name
            - name: OPERATOR_NAME
              value: "chaos-operator"
---
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
  name: chaosengines.litmuschaos.io
spec:
  group: litmuschaos.io
  names:
    kind: ChaosEngine
    listKind: ChaosEngineList
    plural: chaosengines
    singular: chaosengine
  scope: Namespaced
  validation:
    openAPIV3Schema:
      properties:
        apiVersion:
          description: 'APIVersion defines the versioned schema of this representation
            of an object. Servers should convert recognized schemas to the latest
            internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources'
          type: string
        kind:
          description: 'Kind is a string value representing the REST resource this
            object represents. Servers may infer this from the endpoint the client
            submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds'
          type: string
        metadata:
          type: object
        spec:
          type: object
          properties:
            monitoring:
              type: boolean
            jobCleanUpPolicy:
              type: string
              pattern: ^(delete|retain)$
              # alternate ways to do this in case of complex pattern matches
              #oneOf:
              #  - pattern: '^delete$'
              #  - pattern: '^retain$'
            annotationCheck:
              type: string
              pattern: ^(true|false)$
            appinfo:
              type: object
              properties:
                appkind:
                  type: string
                  pattern: ^(^$|deployment|statefulset|daemonset|deploymentconfig|rollout)$
                applabel:
                  type: string
                appns:
                  type: string
            auxiliaryAppInfo:
              type: string
            engineState:
              type: string
              pattern: ^(active|stop)$
            chaosServiceAccount:
              type: string
            components:
              type: object
              properties:
                runner:
                  type: object
                  properties:
                    image:
                      type: string
                    type:
                      type: string
                      pattern: ^(go)$
                    runnerannotation:
                      type: object
                      additionalProperties:
                        type: string
                        properties:
                          key:
                            type: string
                            minLength: 1
                          value:
                            type: string
                            minLength: 1
            experiments:
              type: array
              items:
                type: object
                properties:
                  name:
                    type: string
                  spec:
                    type: object
                    properties:
                      probe:
                        type: array
                        items:
                          type: object
                          properties:
                            name:
                              type: string
                            type:
                              type: string
                              minLength: 1
                              pattern: ^(k8sProbe|httpProbe|cmdProbe|promProbe)$
                            k8sProbe/inputs:
                              type: object
                              properties:
                                command:
                                  type: object
                                  properties:
                                    group:
                                      type: string
                                    version:
                                      type: string
                                    resource:
                                      type: string
                                    namespace:
                                      type: string
                                    fieldSelector:
                                      type: string
                                    labelSelector:
                                      type: string
                            cmdProbe/inputs:
                              type: object
                              properties:
                                command:
                                  type: string
                                  minLength: 1
                                comparator:
                                  type: object
                                  properties:
                                    type:
                                      type: string
                                      minLength: 1
                                      pattern: ^(int|float|string)$
                                    criteria:
                                      type: string
                                    value:
                                      type: string
                                source:
                                  type: string
                                  minLength: 1
                            httpProbe/inputs:
                              type: object
                              properties:
                                url:
                                  type: string
                                  minLength: 1
                                expectedResponseCode:
                                  type: string
                                  minLength: 1
                            promProbe/inputs:
                              type: object
                              properties:
                                endpoint:
                                  type: string
                                query:
                                  type: string
                                queryPath:
                                  type: string
                                comparator:
                                  type: object
                                  properties:
                                    criteria:
                                      type: string
                                    value:
                                      type: string
                            runProperties:
                              type: object
                              properties:
                                probeTimeout:
                                  type: integer
                                interval:
                                  type: integer
                                retry: 
                                  type: integer
                                probePollingInterval:
                                  type: integer
                                initialDelaySeconds:
                                  type: integer
                            mode:
                              type: string
                              pattern: ^(SOT|EOT|Edge|Continuous|OnChaos)$
                              minLength: 1
                            operation:
                              type: string
                              pattern: ^(present|absent|create|delete)$
                              minLength: 1
                            data:
                              type: string
                      components:
                        type: object
                        properties:
                          statusCheckTimeouts:
                            type: object
                            properties:
                              delay:
                                type: integer
                              timeout:
                                type: integer
                          nodeSelector:
                            type: object
                            minLength: 1
                          experimentImage:
                            type: string
                          env:
                            type: array
                            items:
                              description: EnvVar represents an environment variable
                                present in a Container.
                              properties:
                                name:
                                  description: Name of the environment variable.
                                    Must be a C_IDENTIFIER.
                                  type: string
                                value:
                                  description: 'Variable references $(VAR_NAME)
                                    are expanded using the previous defined environment
                                    variables in the container and any service environment
                                    variables. If a variable cannot be resolved,
                                    the reference in the input string will be unchanged.
                                    The $(VAR_NAME) syntax can be escaped with a
                                    double $$, ie: $$(VAR_NAME). Escaped references
                                    will never be expanded, regardless of whether
                                    the variable exists or not. Defaults to "".'
                                  type: string
                                valueFrom:
                                  description: Source for the environment variable's
                                    value. Cannot be used if value is not empty.
                                  properties:
                                    configMapKeyRef:
                                      description: Selects a key of a ConfigMap.
                                      properties:
                                        key:
                                          description: The key to select.
                                          type: string
                                        name:
                                          description: 'Name of the referent. More
                                            info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                                            TODO: Add other useful fields. apiVersion,
                                            kind, uid?'
                                          type: string
                                        optional:
                                          description: Specify whether the ConfigMap
                                            or its key must be defined
                                          type: boolean
                                      required:
                                        - key
                                      type: object
                                    fieldRef:
                                      description: 'Selects a field of the pod:
                                        supports metadata.name, metadata.namespace,
                                        metadata.labels, metadata.annotations, spec.nodeName,
                                        spec.serviceAccountName, status.hostIP,
                                        status.podIP.'
                                      properties:
                                        apiVersion:
                                          description: Version of the schema the
                                            FieldPath is written in terms of, defaults
                                            to "v1".
                                          type: string
                                        fieldPath:
                                          description: Path of the field to select
                                            in the specified API version.
                                          type: string
                                      required:
                                        - fieldPath
                                      type: object
                                    resourceFieldRef:
                                      description: 'Selects a resource of the container:
                                        only resources limits and requests (limits.cpu,
                                        limits.memory, limits.ephemeral-storage,
                                        requests.cpu, requests.memory and requests.ephemeral-storage)
                                        are currently supported.'
                                      properties:
                                        containerName:
                                          description: 'Container name: required
                                            for volumes, optional for env vars'
                                          type: string
                                        divisor:
                                          anyOf:
                                            - type: integer
                                            - type: string
                                          description: Specifies the output format
                                            of the exposed resources, defaults to
                                            "1"
                                          pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                        resource:
                                          description: 'Required: resource to select'
                                          type: string
                                      required:
                                        - resource
                                      type: object
                                    secretKeyRef:
                                      description: Selects a key of a secret in
                                        the pod's namespace
                                      properties:
                                        key:
                                          description: The key of the secret to
                                            select from.  Must be a valid secret
                                            key.
                                          type: string
                                        name:
                                          description: 'Name of the referent. More
                                            info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                                            TODO: Add other useful fields. apiVersion,
                                            kind, uid?'
                                          type: string
                                        optional:
                                          description: Specify whether the Secret
                                            or its key must be defined
                                          type: boolean
                                      required:
                                        - key
                                      type: object
                                  type: object
                              required:
                                - name
                              type: object
                          configMaps:
                            type: array
                            items:
                              type: object
                              properties:
                                name:
                                  type: string
                                mountPath:
                                  type: string
                          secrets:
                            type: array
                            items:
                              type: object
                              properties:
                                name:
                                  type: string
                                mountPath:
                                  type: string
                          experimentannotation:
                            type: object
                            additionalProperties:
                              type: string
                              properties:
                                key:
                                  type: string
                                  minLength: 1
                                  allowEmptyValue: false
                                value:
                                  type: string
                                  minLength: 1
                                  allowEmptyValue: false


        status:
          type: object
  version: v1alpha1
  versions:
    - name: v1alpha1
      served: true
      storage: true
---
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
  name: chaosexperiments.litmuschaos.io
spec:
  group: litmuschaos.io
  names:
    kind: ChaosExperiment
    listKind: ChaosExperimentList
    plural: chaosexperiments
    singular: chaosexperiment
  scope: Namespaced
  subresources:
    status: {}
  validation:
    openAPIV3Schema:
      properties:
        apiVersion:
          description: 'APIVersion defines the versioned schema of this representation
            of an object. Servers should convert recognized schemas to the latest
            internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources'
          type: string
        kind:
          description: 'Kind is a string value representing the REST resource this
            object represents. Servers may infer this from the endpoint the client
            submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds'
          type: string
        metadata:
          type: object
        spec:
          type: object
          properties:
            definition:
              type: object
              properties:
                args:
                  type: array
                  items:
                    type: string
                command:
                  type: array
                  items:
                    type: string
                env:
                  type: array
                  items:
                    type: object
                    properties:
                      name:
                        type: string
                      value:
                        type: string
                image:
                  type: string
                labels:
                  type: object
                  properties:
                    name:
                      type: string
                scope:
                  type: string
                  pattern: ^(Namespaced|Cluster)$
                permissions:
                  type: array
                  items:
                    type: object
                    minProperties: 3
                    required:
                      - apiGroups
                      - resources
                      - verbs
                    properties:
                      apiGroups:
                        type: array
                        items:
                          type: string
                      resources:
                        type: array
                        items:
                          type: string
                      verbs:
                        type: array
                        items:
                          type: string
                      resourceNames:
                        type: array
                        items:
                          type: string
                      nonResourceURLs:
                        type: array
                        items:
                          type: string
                configmaps:
                  type: array
                  items:
                    type: object
                    minProperties: 2
                    properties:
                      name:
                        type: string
                        allowEmptyValue: false
                        minLength: 1
                      mountPath:
                        type: string
                        allowEmptyValue: false
                        minLength: 1
                secrets:
                  type: array
                  items:
                    type: object
                    minProperties: 2
                    properties:
                      name:
                        type: string
                        allowEmptyValue: false
                        minLength: 1
                      mountPath:
                        type: string
                        allowEmptyValue: false
                        minLength: 1
                hostFileVolumes:
                  type: array
                  items:
                    type: object
                    minProperties: 3
                    properties:
                      name:
                        type: string
                        allowEmptyValue: false
                        minLength: 1
                      mountPath:
                        type: string
                        allowEmptyValue: false
                        minLength: 1
                      nodePath:
                        type: string
                        allowEmptyValue: false
                        minLength: 1
                securityContext:
                  type: object
                hostPID:
                  type: boolean
        status:
          type: object
  version: v1alpha1
  versions:
    - name: v1alpha1
      served: true
      storage: true
---
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
  name: chaosresults.litmuschaos.io
spec:
  group: litmuschaos.io
  names:
    kind: ChaosResult
    listKind: ChaosResultList
    plural: chaosresults
    singular: chaosresult
  scope: Namespaced
  validation:
    openAPIV3Schema:
      properties:
        apiVersion:
          description: 'APIVersion defines the versioned schema of this representation
            of an object. Servers should convert recognized schemas to the latest
            internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources'
          type: string
        kind:
          description: 'Kind is a string value representing the REST resource this
            object represents. Servers may infer this from the endpoint the client
            submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds'
          type: string
        metadata:
          type: object
        spec:
          type: object
        status:
          type: object
  version: v1alpha1
  versions:
    - name: v1alpha1
      served: true
      storage: true
