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.9.1
    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.9.1
    app.kubernetes.io/component: operator-clusterrole
    app.kubernetes.io/part-of: litmus
    app.kubernetes.io/managed-by: kubectl
    name: litmus
rules:
- apiGroups: ["","apps","batch","apps.openshift.io"]
  resources: ["jobs","deployments","replicationcontrollers","daemonsets","replicasets","statefulsets","deploymentconfigs","secrets"]
  verbs: ["get","list","watch","deletecollection"]
- apiGroups: ["","litmuschaos.io"]
  resources: ["pods","configmaps","events","services","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.9.1
    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.9.1
    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.9.1
        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.9.1
          command:
          - chaos-operator
          imagePullPolicy: Always
          env:
            - name: CHAOS_RUNNER_IMAGE
              value: "litmuschaos/chaos-runner:1.9.1"
            - 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
                  pattern: (([a-z0-9A-Z_\.-/]+)=([a-z0-9A-Z_\.-/_]+)|^$)
                appns:
                  type: string
            auxiliaryAppInfo:
              type: string
            engineState:
              type: string
              pattern: ^(active|stop|initialized|stopped)$
            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
                            allowEmptyValue: false
                          value:
                            type: string
                            minLength: 1
                            allowEmptyValue: false
            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
                            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
                                expectedResult:
                                  type: string
                            cmdProbe/inputs:
                              type: object
                              properties:
                                command:
                                  type: string
                                expectedResult:
                                  type: string
                                source:
                                  type: string
                            httpProbe/inputs:
                              type: object
                              properties:
                                url:
                                  type: string
                                expectedResponseCode:
                                  type: string
                            runProperties:
                              type: object
                              properties:
                                probeTimeout:
                                  type: integer
                                interval:
                                  type: integer
                                retry: 
                                  type: integer
                            mode:
                              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:
                              type: object
                              properties:
                                name:
                                  type: string
                                value:
                                  type: string
                          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
