apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    controller-gen.kubebuilder.io/version: v0.4.0
  name: cstorpoolclusters.cstor.openebs.io
spec:
  group: cstor.openebs.io
  names:
    kind: CStorPoolCluster
    listKind: CStorPoolClusterList
    plural: cstorpoolclusters
    shortNames:
    - cspc
    singular: cstorpoolcluster
  scope: Namespaced
  versions:
  - additionalPrinterColumns:
    - description: The number of healthy cStorPoolInstances
      jsonPath: .status.healthyInstances
      name: HealthyInstances
      type: integer
    - description: The number of provisioned cStorPoolInstances
      jsonPath: .status.provisionedInstances
      name: ProvisionedInstances
      type: integer
    - description: The number of desired cStorPoolInstances
      jsonPath: .status.desiredInstances
      name: DesiredInstances
      type: integer
    - description: Age of CStorPoolCluster
      jsonPath: .metadata.creationTimestamp
      name: Age
      type: date
    name: v1
    schema:
      openAPIV3Schema:
        description: CStorPoolCluster describes a CStorPoolCluster custom resource.
        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/sig-architecture/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/sig-architecture/api-conventions.md#types-kinds'
            type: string
          metadata:
            type: object
          spec:
            description: CStorPoolClusterSpec is the spec for a CStorPoolClusterSpec
              resource
            properties:
              auxResources:
                description: AuxResources are the compute resources required by the
                  cstor-pool pod side car containers.
                nullable: true
                properties:
                  limits:
                    additionalProperties:
                      anyOf:
                      - type: integer
                      - type: string
                      pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                      x-kubernetes-int-or-string: true
                    description: 'Limits describes the maximum amount of compute resources
                      allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
                    type: object
                  requests:
                    additionalProperties:
                      anyOf:
                      - type: integer
                      - type: string
                      pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                      x-kubernetes-int-or-string: true
                    description: 'Requests describes the minimum amount of compute
                      resources required. If Requests is omitted for a container,
                      it defaults to Limits if that is explicitly specified, otherwise
                      to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
                    type: object
                type: object
              pools:
                description: Pools is the spec for pools for various nodes where it
                  should be created.
                items:
                  description: PoolSpec is the spec for pool on node where it should
                    be created.
                  properties:
                    dataRaidGroups:
                      description: DataRaidGroups is the raid group configuration
                        for the given pool.
                      items:
                        description: RaidGroup contains the details of a raid group
                          for the pool
                        properties:
                          blockDevices:
                            items:
                              description: CStorPoolInstanceBlockDevice contains the
                                details of block devices that constitutes a raid group.
                              properties:
                                blockDeviceName:
                                  description: BlockDeviceName is the name of the
                                    block device.
                                  type: string
                                capacity:
                                  description: Capacity is the capacity of the block
                                    device. It is system generated
                                  format: int64
                                  type: integer
                                devLink:
                                  description: DevLink is the dev link for block devices
                                  type: string
                              required:
                              - blockDeviceName
                              type: object
                            type: array
                        required:
                        - blockDevices
                        type: object
                      type: array
                    nodeSelector:
                      additionalProperties:
                        type: string
                      description: NodeSelector is the labels that will be used to
                        select a node for pool provisioning. Required field
                      type: object
                    poolConfig:
                      description: PoolConfig is the default pool config that applies
                        to the pool on node.
                      properties:
                        auxResources:
                          description: AuxResources are the compute resources required
                            by the cstor-pool pod side car containers.
                          nullable: true
                          properties:
                            limits:
                              additionalProperties:
                                anyOf:
                                - type: integer
                                - type: string
                                pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                x-kubernetes-int-or-string: true
                              description: 'Limits describes the maximum amount of
                                compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
                              type: object
                            requests:
                              additionalProperties:
                                anyOf:
                                - type: integer
                                - type: string
                                pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                x-kubernetes-int-or-string: true
                              description: 'Requests describes the minimum amount
                                of compute resources required. If Requests is omitted
                                for a container, it defaults to Limits if that is
                                explicitly specified, otherwise to an implementation-defined
                                value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
                              type: object
                          type: object
                        compression:
                          description: 'Compression to enable compression Optional
                            -- defaults to off Possible values : lz, off'
                          type: string
                        dataRaidGroupType:
                          description: DataRaidGroupType is the  raid type.
                          type: string
                        priorityClassName:
                          description: PriorityClassName if specified applies to this
                            pool pod If left empty, DefaultPriorityClassName is applied.
                            (See CStorPoolClusterSpec.DefaultPriorityClassName) If
                            both are empty, not priority class is applied.
                          nullable: true
                          type: string
                        resources:
                          description: Resources are the compute resources required
                            by the cstor-pool container.
                          nullable: true
                          properties:
                            limits:
                              additionalProperties:
                                anyOf:
                                - type: integer
                                - type: string
                                pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                x-kubernetes-int-or-string: true
                              description: 'Limits describes the maximum amount of
                                compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
                              type: object
                            requests:
                              additionalProperties:
                                anyOf:
                                - type: integer
                                - type: string
                                pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                x-kubernetes-int-or-string: true
                              description: 'Requests describes the minimum amount
                                of compute resources required. If Requests is omitted
                                for a container, it defaults to Limits if that is
                                explicitly specified, otherwise to an implementation-defined
                                value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
                              type: object
                          type: object
                        roThresholdLimit:
                          description: 'ROThresholdLimit is threshold(percentage base)
                            limit for pool read only mode. If ROThresholdLimit(%)
                            amount of pool storage is reached then pool will set to
                            readonly. NOTE: 1. If ROThresholdLimit is set to 100 then
                            entire    pool storage will be used by default it will
                            be set to 85%. 2. ROThresholdLimit value will be 0 <=
                            ROThresholdLimit <= 100.'
                          nullable: true
                          type: integer
                        thickProvision:
                          description: ThickProvision to enable thick provisioning
                            Optional -- defaults to false
                          type: boolean
                        tolerations:
                          description: Tolerations, if specified, the pool pod's tolerations.
                          items:
                            description: The pod this Toleration is attached to tolerates
                              any taint that matches the triple <key,value,effect>
                              using the matching operator <operator>.
                            properties:
                              effect:
                                description: Effect indicates the taint effect to
                                  match. Empty means match all taint effects. When
                                  specified, allowed values are NoSchedule, PreferNoSchedule
                                  and NoExecute.
                                type: string
                              key:
                                description: Key is the taint key that the toleration
                                  applies to. Empty means match all taint keys. If
                                  the key is empty, operator must be Exists; this
                                  combination means to match all values and all keys.
                                type: string
                              operator:
                                description: Operator represents a key's relationship
                                  to the value. Valid operators are Exists and Equal.
                                  Defaults to Equal. Exists is equivalent to wildcard
                                  for value, so that a pod can tolerate all taints
                                  of a particular category.
                                type: string
                              tolerationSeconds:
                                description: TolerationSeconds represents the period
                                  of time the toleration (which must be of effect
                                  NoExecute, otherwise this field is ignored) tolerates
                                  the taint. By default, it is not set, which means
                                  tolerate the taint forever (do not evict). Zero
                                  and negative values will be treated as 0 (evict
                                  immediately) by the system.
                                format: int64
                                type: integer
                              value:
                                description: Value is the taint value the toleration
                                  matches to. If the operator is Exists, the value
                                  should be empty, otherwise just a regular string.
                                type: string
                            type: object
                          nullable: true
                          type: array
                        writeCacheGroupType:
                          description: WriteCacheGroupType is the write cache raid
                            type.
                          type: string
                      required:
                      - dataRaidGroupType
                      type: object
                    writeCacheRaidGroups:
                      description: WriteCacheRaidGroups is the write cache raid group.
                      items:
                        description: RaidGroup contains the details of a raid group
                          for the pool
                        properties:
                          blockDevices:
                            items:
                              description: CStorPoolInstanceBlockDevice contains the
                                details of block devices that constitutes a raid group.
                              properties:
                                blockDeviceName:
                                  description: BlockDeviceName is the name of the
                                    block device.
                                  type: string
                                capacity:
                                  description: Capacity is the capacity of the block
                                    device. It is system generated
                                  format: int64
                                  type: integer
                                devLink:
                                  description: DevLink is the dev link for block devices
                                  type: string
                              required:
                              - blockDeviceName
                              type: object
                            type: array
                        required:
                        - blockDevices
                        type: object
                      nullable: true
                      type: array
                  required:
                  - dataRaidGroups
                  - nodeSelector
                  type: object
                type: array
              priorityClassName:
                description: DefaultPriorityClassName if specified applies to all
                  the pool pods in the pool spec if the priorityClass at the pool
                  level is not specified.
                type: string
              resources:
                description: DefaultResources are the compute resources required by
                  the cstor-pool container. If the resources at PoolConfig is not
                  specified, this is written to CSPI PoolConfig.
                nullable: true
                properties:
                  limits:
                    additionalProperties:
                      anyOf:
                      - type: integer
                      - type: string
                      pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                      x-kubernetes-int-or-string: true
                    description: 'Limits describes the maximum amount of compute resources
                      allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
                    type: object
                  requests:
                    additionalProperties:
                      anyOf:
                      - type: integer
                      - type: string
                      pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                      x-kubernetes-int-or-string: true
                    description: 'Requests describes the minimum amount of compute
                      resources required. If Requests is omitted for a container,
                      it defaults to Limits if that is explicitly specified, otherwise
                      to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
                    type: object
                type: object
              tolerations:
                description: Tolerations, if specified, are the pool pod's tolerations
                  If tolerations at PoolConfig is empty, this is written to CSPI PoolConfig.
                items:
                  description: The pod this Toleration is attached to tolerates any
                    taint that matches the triple <key,value,effect> using the matching
                    operator <operator>.
                  properties:
                    effect:
                      description: Effect indicates the taint effect to match. Empty
                        means match all taint effects. When specified, allowed values
                        are NoSchedule, PreferNoSchedule and NoExecute.
                      type: string
                    key:
                      description: Key is the taint key that the toleration applies
                        to. Empty means match all taint keys. If the key is empty,
                        operator must be Exists; this combination means to match all
                        values and all keys.
                      type: string
                    operator:
                      description: Operator represents a key's relationship to the
                        value. Valid operators are Exists and Equal. Defaults to Equal.
                        Exists is equivalent to wildcard for value, so that a pod
                        can tolerate all taints of a particular category.
                      type: string
                    tolerationSeconds:
                      description: TolerationSeconds represents the period of time
                        the toleration (which must be of effect NoExecute, otherwise
                        this field is ignored) tolerates the taint. By default, it
                        is not set, which means tolerate the taint forever (do not
                        evict). Zero and negative values will be treated as 0 (evict
                        immediately) by the system.
                      format: int64
                      type: integer
                    value:
                      description: Value is the taint value the toleration matches
                        to. If the operator is Exists, the value should be empty,
                        otherwise just a regular string.
                      type: string
                  type: object
                nullable: true
                type: array
            type: object
          status:
            description: CStorPoolClusterStatus represents the latest available observations
              of a CSPC's current state.
            properties:
              conditions:
                description: Current state of CSPC.
                items:
                  description: CStorPoolClusterCondition describes the state of a
                    CSPC at a certain point.
                  properties:
                    lastTransitionTime:
                      description: Last time the condition transitioned from one status
                        to another.
                      format: date-time
                      type: string
                    lastUpdateTime:
                      description: The last time this condition was updated.
                      format: date-time
                      type: string
                    message:
                      description: A human readable message indicating details about
                        the transition.
                      type: string
                    reason:
                      description: The reason for the condition's last transition.
                      type: string
                    status:
                      description: Status of the condition, one of True, False, Unknown.
                      type: string
                    type:
                      description: Type of CSPC condition.
                      type: string
                  required:
                  - status
                  - type
                  type: object
                nullable: true
                type: array
              desiredInstances:
                description: DesiredInstances is the number of CSPI(s) that should
                  be provisioned.
                format: int32
                nullable: true
                type: integer
              healthyInstances:
                description: HealthyInstances is the number of CSPI(s) that are healthy.
                format: int32
                nullable: true
                type: integer
              provisionedInstances:
                description: ProvisionedInstances is the the number of CSPI present
                  at the current state.
                format: int32
                nullable: true
                type: integer
            type: object
          versionDetails:
            description: VersionDetails provides the details for upgrade
            properties:
              autoUpgrade:
                description: If AutoUpgrade is set to true then the resource is upgraded
                  automatically without any manual steps
                type: boolean
              desired:
                description: Desired is the version that we want to upgrade or the
                  control plane version
                type: string
              status:
                description: Status gives the status of reconciliation triggered when
                  the desired and current version are not same
                properties:
                  current:
                    description: Current is the version of resource
                    type: string
                  dependentsUpgraded:
                    description: DependentsUpgraded gives the details whether all
                      children of a resource are upgraded to desired version or not
                    type: boolean
                  lastUpdateTime:
                    description: LastUpdateTime is the time the status was last  updated
                    format: date-time
                    nullable: true
                    type: string
                  message:
                    description: Message is a human readable message if some error
                      occurs
                    type: string
                  reason:
                    description: Reason is the actual reason for the error state
                    type: string
                  state:
                    description: State is the state of reconciliation
                    type: string
                type: object
            type: object
        required:
        - spec
        type: object
    served: true
    storage: true
    subresources: {}
status:
  acceptedNames:
    kind: ""
    plural: ""
  conditions: []
  storedVersions: []
