---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    controller-gen.kubebuilder.io/version: v0.16.1
    operatorframework.io/installed-alongside-c6ae7e8e8ec34ce6: openshift-storage/ocs-operator.v4.19.6-rhodf
  creationTimestamp: "2025-10-27T12:43:47Z"
  generation: 1
  labels:
    odf.openshift.io/is-storage-system: "true"
    olm.managed: "true"
    operators.coreos.com/ocs-operator.openshift-storage: ""
  managedFields:
  - apiVersion: apiextensions.k8s.io/v1
    fieldsType: FieldsV1
    fieldsV1:
      f:metadata:
        f:annotations:
          .: {}
          f:controller-gen.kubebuilder.io/version: {}
          f:operatorframework.io/installed-alongside-c6ae7e8e8ec34ce6: {}
        f:labels:
          .: {}
          f:odf.openshift.io/is-storage-system: {}
          f:olm.managed: {}
      f:spec:
        f:conversion:
          .: {}
          f:strategy: {}
        f:group: {}
        f:names:
          f:kind: {}
          f:listKind: {}
          f:plural: {}
          f:singular: {}
        f:scope: {}
        f:versions: {}
    manager: catalog
    operation: Update
    time: "2025-10-27T12:43:47Z"
  - apiVersion: apiextensions.k8s.io/v1
    fieldsType: FieldsV1
    fieldsV1:
      f:status:
        f:acceptedNames:
          f:kind: {}
          f:listKind: {}
          f:plural: {}
          f:singular: {}
        f:conditions:
          k:{"type":"Established"}:
            .: {}
            f:lastTransitionTime: {}
            f:message: {}
            f:reason: {}
            f:status: {}
            f:type: {}
          k:{"type":"NamesAccepted"}:
            .: {}
            f:lastTransitionTime: {}
            f:message: {}
            f:reason: {}
            f:status: {}
            f:type: {}
    manager: kube-apiserver
    operation: Update
    subresource: status
    time: "2025-10-27T12:43:47Z"
  - apiVersion: apiextensions.k8s.io/v1
    fieldsType: FieldsV1
    fieldsV1:
      f:metadata:
        f:labels:
          f:operators.coreos.com/ocs-operator.openshift-storage: {}
    manager: olm
    operation: Update
    time: "2025-10-27T12:46:45Z"
  name: storageclusters.ocs.openshift.io
  resourceVersion: "62167"
  uid: 2ed22318-270c-49e1-8d22-5e6887023cdf
spec:
  conversion:
    strategy: None
  group: ocs.openshift.io
  names:
    kind: StorageCluster
    listKind: StorageClusterList
    plural: storageclusters
    singular: storagecluster
  scope: Namespaced
  versions:
  - additionalPrinterColumns:
    - jsonPath: .metadata.creationTimestamp
      name: Age
      type: date
    - description: Current Phase
      jsonPath: .status.phase
      name: Phase
      type: string
    - description: External Storage Cluster
      jsonPath: .spec.externalStorage.enable
      name: External
      type: boolean
    - jsonPath: .metadata.creationTimestamp
      name: Created At
      type: string
    - description: Storage Cluster Version
      jsonPath: .status.version
      name: Version
      type: string
    name: v1
    schema:
      openAPIV3Schema:
        description: StorageCluster represents a cluster including Ceph Cluster, NooBaa
          and all the storage and compute resources required.
        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: StorageClusterSpec defines the desired state of StorageCluster
            properties:
              allowRemoteStorageConsumers:
                description: |-
                  AllowRemoteStorageConsumers Indicates that the OCS cluster should deploy the needed
                  components to enable connections from remote consumers.
                type: boolean
                x-kubernetes-validations:
                - message: allowRemoteStorageConsumers is immutable
                  rule: oldSelf == self
              arbiter:
                description: |-
                  ArbiterSpec specifies the storage cluster options related to arbiter.
                  If Arbiter is enabled, ArbiterLocation in the NodeTopologies must be specified.
                properties:
                  arbiterMonPVCTemplate:
                    description: PersistentVolumeClaim is a user's request for and
                      claim to a persistent volume
                    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:
                        description: |-
                          Standard object's metadata.
                          More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
                        properties:
                          annotations:
                            additionalProperties:
                              type: string
                            type: object
                          finalizers:
                            items:
                              type: string
                            type: array
                          labels:
                            additionalProperties:
                              type: string
                            type: object
                          name:
                            type: string
                          namespace:
                            type: string
                        type: object
                      spec:
                        description: |-
                          spec defines the desired characteristics of a volume requested by a pod author.
                          More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims
                        properties:
                          accessModes:
                            description: |-
                              accessModes contains the desired access modes the volume should have.
                              More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1
                            items:
                              type: string
                            type: array
                            x-kubernetes-list-type: atomic
                          dataSource:
                            description: |-
                              dataSource field can be used to specify either:
                              * An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot)
                              * An existing PVC (PersistentVolumeClaim)
                              If the provisioner or an external controller can support the specified data source,
                              it will create a new volume based on the contents of the specified data source.
                              When the AnyVolumeDataSource feature gate is enabled, dataSource contents will be copied to dataSourceRef,
                              and dataSourceRef contents will be copied to dataSource when dataSourceRef.namespace is not specified.
                              If the namespace is specified, then dataSourceRef will not be copied to dataSource.
                            properties:
                              apiGroup:
                                description: |-
                                  APIGroup is the group for the resource being referenced.
                                  If APIGroup is not specified, the specified Kind must be in the core API group.
                                  For any other third-party types, APIGroup is required.
                                type: string
                              kind:
                                description: Kind is the type of resource being referenced
                                type: string
                              name:
                                description: Name is the name of resource being referenced
                                type: string
                            required:
                            - kind
                            - name
                            type: object
                            x-kubernetes-map-type: atomic
                          dataSourceRef:
                            description: |-
                              dataSourceRef specifies the object from which to populate the volume with data, if a non-empty
                              volume is desired. This may be any object from a non-empty API group (non
                              core object) or a PersistentVolumeClaim object.
                              When this field is specified, volume binding will only succeed if the type of
                              the specified object matches some installed volume populator or dynamic
                              provisioner.
                              This field will replace the functionality of the dataSource field and as such
                              if both fields are non-empty, they must have the same value. For backwards
                              compatibility, when namespace isn't specified in dataSourceRef,
                              both fields (dataSource and dataSourceRef) will be set to the same
                              value automatically if one of them is empty and the other is non-empty.
                              When namespace is specified in dataSourceRef,
                              dataSource isn't set to the same value and must be empty.
                              There are three important differences between dataSource and dataSourceRef:
                              * While dataSource only allows two specific types of objects, dataSourceRef
                                allows any non-core object, as well as PersistentVolumeClaim objects.
                              * While dataSource ignores disallowed values (dropping them), dataSourceRef
                                preserves all values, and generates an error if a disallowed value is
                                specified.
                              * While dataSource only allows local objects, dataSourceRef allows objects
                                in any namespaces.
                              (Beta) Using this field requires the AnyVolumeDataSource feature gate to be enabled.
                              (Alpha) Using the namespace field of dataSourceRef requires the CrossNamespaceVolumeDataSource feature gate to be enabled.
                            properties:
                              apiGroup:
                                description: |-
                                  APIGroup is the group for the resource being referenced.
                                  If APIGroup is not specified, the specified Kind must be in the core API group.
                                  For any other third-party types, APIGroup is required.
                                type: string
                              kind:
                                description: Kind is the type of resource being referenced
                                type: string
                              name:
                                description: Name is the name of resource being referenced
                                type: string
                              namespace:
                                description: |-
                                  Namespace is the namespace of resource being referenced
                                  Note that when a namespace is specified, a gateway.networking.k8s.io/ReferenceGrant object is required in the referent namespace to allow that namespace's owner to accept the reference. See the ReferenceGrant documentation for details.
                                  (Alpha) This field requires the CrossNamespaceVolumeDataSource feature gate to be enabled.
                                type: string
                            required:
                            - kind
                            - name
                            type: object
                          resources:
                            description: |-
                              resources represents the minimum resources the volume should have.
                              If RecoverVolumeExpansionFailure feature is enabled users are allowed to specify resource requirements
                              that are lower than previous value but must still be higher than capacity recorded in the
                              status field of the claim.
                              More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources
                            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-resources-containers/
                                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. Requests cannot exceed Limits.
                                  More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
                                type: object
                            type: object
                          selector:
                            description: selector is a label query over volumes to
                              consider for binding.
                            properties:
                              matchExpressions:
                                description: matchExpressions is a list of label selector
                                  requirements. The requirements are ANDed.
                                items:
                                  description: |-
                                    A label selector requirement is a selector that contains values, a key, and an operator that
                                    relates the key and values.
                                  properties:
                                    key:
                                      description: key is the label key that the selector
                                        applies to.
                                      type: string
                                    operator:
                                      description: |-
                                        operator represents a key's relationship to a set of values.
                                        Valid operators are In, NotIn, Exists and DoesNotExist.
                                      type: string
                                    values:
                                      description: |-
                                        values is an array of string values. If the operator is In or NotIn,
                                        the values array must be non-empty. If the operator is Exists or DoesNotExist,
                                        the values array must be empty. This array is replaced during a strategic
                                        merge patch.
                                      items:
                                        type: string
                                      type: array
                                      x-kubernetes-list-type: atomic
                                  required:
                                  - key
                                  - operator
                                  type: object
                                type: array
                                x-kubernetes-list-type: atomic
                              matchLabels:
                                additionalProperties:
                                  type: string
                                description: |-
                                  matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
                                  map is equivalent to an element of matchExpressions, whose key field is "key", the
                                  operator is "In", and the values array contains only "value". The requirements are ANDed.
                                type: object
                            type: object
                            x-kubernetes-map-type: atomic
                          storageClassName:
                            description: |-
                              storageClassName is the name of the StorageClass required by the claim.
                              More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1
                            type: string
                          volumeAttributesClassName:
                            description: |-
                              volumeAttributesClassName may be used to set the VolumeAttributesClass used by this claim.
                              If specified, the CSI driver will create or update the volume with the attributes defined
                              in the corresponding VolumeAttributesClass. This has a different purpose than storageClassName,
                              it can be changed after the claim is created. An empty string value means that no VolumeAttributesClass
                              will be applied to the claim but it's not allowed to reset this field to empty string once it is set.
                              If unspecified and the PersistentVolumeClaim is unbound, the default VolumeAttributesClass
                              will be set by the persistentvolume controller if it exists.
                              If the resource referred to by volumeAttributesClass does not exist, this PersistentVolumeClaim will be
                              set to a Pending state, as reflected by the modifyVolumeStatus field, until such as a resource
                              exists.
                              More info: https://kubernetes.io/docs/concepts/storage/volume-attributes-classes/
                              (Beta) Using this field requires the VolumeAttributesClass feature gate to be enabled (off by default).
                            type: string
                          volumeMode:
                            description: |-
                              volumeMode defines what type of volume is required by the claim.
                              Value of Filesystem is implied when not included in claim spec.
                            type: string
                          volumeName:
                            description: volumeName is the binding reference to the
                              PersistentVolume backing this claim.
                            type: string
                        type: object
                      status:
                        description: |-
                          status represents the current information/status of a persistent volume claim.
                          Read-only.
                          More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims
                        properties:
                          accessModes:
                            description: |-
                              accessModes contains the actual access modes the volume backing the PVC has.
                              More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1
                            items:
                              type: string
                            type: array
                            x-kubernetes-list-type: atomic
                          allocatedResourceStatuses:
                            additionalProperties:
                              description: |-
                                When a controller receives persistentvolume claim update with ClaimResourceStatus for a resource
                                that it does not recognizes, then it should ignore that update and let other controllers
                                handle it.
                              type: string
                            description: "allocatedResourceStatuses stores status
                              of resource being resized for the given PVC.\nKey names
                              follow standard Kubernetes label syntax. Valid values
                              are either:\n\t* Un-prefixed keys:\n\t\t- storage -
                              the capacity of the volume.\n\t* Custom resources must
                              use implementation-defined prefixed names such as \"example.com/my-custom-resource\"\nApart
                              from above values - keys that are unprefixed or have
                              kubernetes.io prefix are considered\nreserved and hence
                              may not be used.\n\nClaimResourceStatus can be in any
                              of following states:\n\t- ControllerResizeInProgress:\n\t\tState
                              set when resize controller starts resizing the volume
                              in control-plane.\n\t- ControllerResizeFailed:\n\t\tState
                              set when resize has failed in resize controller with
                              a terminal error.\n\t- NodeResizePending:\n\t\tState
                              set when resize controller has finished resizing the
                              volume but further resizing of\n\t\tvolume is needed
                              on the node.\n\t- NodeResizeInProgress:\n\t\tState set
                              when kubelet starts resizing the volume.\n\t- NodeResizeFailed:\n\t\tState
                              set when resizing has failed in kubelet with a terminal
                              error. Transient errors don't set\n\t\tNodeResizeFailed.\nFor
                              example: if expanding a PVC for more capacity - this
                              field can be one of the following states:\n\t- pvc.status.allocatedResourceStatus['storage']
                              = \"ControllerResizeInProgress\"\n     - pvc.status.allocatedResourceStatus['storage']
                              = \"ControllerResizeFailed\"\n     - pvc.status.allocatedResourceStatus['storage']
                              = \"NodeResizePending\"\n     - pvc.status.allocatedResourceStatus['storage']
                              = \"NodeResizeInProgress\"\n     - pvc.status.allocatedResourceStatus['storage']
                              = \"NodeResizeFailed\"\nWhen this field is not set,
                              it means that no resize operation is in progress for
                              the given PVC.\n\nA controller that receives PVC update
                              with previously unknown resourceName or ClaimResourceStatus\nshould
                              ignore the update for the purpose it was designed. For
                              example - a controller that\nonly is responsible for
                              resizing capacity of the volume, should ignore PVC updates
                              that change other valid\nresources associated with PVC.\n\nThis
                              is an alpha field and requires enabling RecoverVolumeExpansionFailure
                              feature."
                            type: object
                            x-kubernetes-map-type: granular
                          allocatedResources:
                            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: "allocatedResources tracks the resources
                              allocated to a PVC including its capacity.\nKey names
                              follow standard Kubernetes label syntax. Valid values
                              are either:\n\t* Un-prefixed keys:\n\t\t- storage -
                              the capacity of the volume.\n\t* Custom resources must
                              use implementation-defined prefixed names such as \"example.com/my-custom-resource\"\nApart
                              from above values - keys that are unprefixed or have
                              kubernetes.io prefix are considered\nreserved and hence
                              may not be used.\n\nCapacity reported here may be larger
                              than the actual capacity when a volume expansion operation\nis
                              requested.\nFor storage quota, the larger value from
                              allocatedResources and PVC.spec.resources is used.\nIf
                              allocatedResources is not set, PVC.spec.resources alone
                              is used for quota calculation.\nIf a volume expansion
                              capacity request is lowered, allocatedResources is only\nlowered
                              if there are no expansion operations in progress and
                              if the actual volume capacity\nis equal or lower than
                              the requested capacity.\n\nA controller that receives
                              PVC update with previously unknown resourceName\nshould
                              ignore the update for the purpose it was designed. For
                              example - a controller that\nonly is responsible for
                              resizing capacity of the volume, should ignore PVC updates
                              that change other valid\nresources associated with PVC.\n\nThis
                              is an alpha field and requires enabling RecoverVolumeExpansionFailure
                              feature."
                            type: object
                          capacity:
                            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: capacity represents the actual resources
                              of the underlying volume.
                            type: object
                          conditions:
                            description: |-
                              conditions is the current Condition of persistent volume claim. If underlying persistent volume is being
                              resized then the Condition will be set to 'Resizing'.
                            items:
                              description: PersistentVolumeClaimCondition contains
                                details about state of pvc
                              properties:
                                lastProbeTime:
                                  description: lastProbeTime is the time we probed
                                    the condition.
                                  format: date-time
                                  type: string
                                lastTransitionTime:
                                  description: lastTransitionTime is the time the
                                    condition transitioned from one status to another.
                                  format: date-time
                                  type: string
                                message:
                                  description: message is the human-readable message
                                    indicating details about last transition.
                                  type: string
                                reason:
                                  description: |-
                                    reason is a unique, this should be a short, machine understandable string that gives the reason
                                    for condition's last transition. If it reports "Resizing" that means the underlying
                                    persistent volume is being resized.
                                  type: string
                                status:
                                  description: |-
                                    Status is the status of the condition.
                                    Can be True, False, Unknown.
                                    More info: https://kubernetes.io/docs/reference/kubernetes-api/config-and-storage-resources/persistent-volume-claim-v1/#:~:text=state%20of%20pvc-,conditions.status,-(string)%2C%20required
                                  type: string
                                type:
                                  description: |-
                                    Type is the type of the condition.
                                    More info: https://kubernetes.io/docs/reference/kubernetes-api/config-and-storage-resources/persistent-volume-claim-v1/#:~:text=set%20to%20%27ResizeStarted%27.-,PersistentVolumeClaimCondition,-contains%20details%20about
                                  type: string
                              required:
                              - status
                              - type
                              type: object
                            type: array
                            x-kubernetes-list-map-keys:
                            - type
                            x-kubernetes-list-type: map
                          currentVolumeAttributesClassName:
                            description: |-
                              currentVolumeAttributesClassName is the current name of the VolumeAttributesClass the PVC is using.
                              When unset, there is no VolumeAttributeClass applied to this PersistentVolumeClaim
                              This is a beta field and requires enabling VolumeAttributesClass feature (off by default).
                            type: string
                          modifyVolumeStatus:
                            description: |-
                              ModifyVolumeStatus represents the status object of ControllerModifyVolume operation.
                              When this is unset, there is no ModifyVolume operation being attempted.
                              This is a beta field and requires enabling VolumeAttributesClass feature (off by default).
                            properties:
                              status:
                                description: "status is the status of the ControllerModifyVolume
                                  operation. It can be in any of following states:\n
                                  - Pending\n   Pending indicates that the PersistentVolumeClaim
                                  cannot be modified due to unmet requirements, such
                                  as\n   the specified VolumeAttributesClass not existing.\n
                                  - InProgress\n   InProgress indicates that the volume
                                  is being modified.\n - Infeasible\n  Infeasible
                                  indicates that the request has been rejected as
                                  invalid by the CSI driver. To\n\t  resolve the error,
                                  a valid VolumeAttributesClass needs to be specified.\nNote:
                                  New statuses can be added in the future. Consumers
                                  should check for unknown statuses and fail appropriately."
                                type: string
                              targetVolumeAttributesClassName:
                                description: targetVolumeAttributesClassName is the
                                  name of the VolumeAttributesClass the PVC currently
                                  being reconciled
                                type: string
                            required:
                            - status
                            type: object
                          phase:
                            description: phase represents the current phase of PersistentVolumeClaim.
                            type: string
                        type: object
                    type: object
                  disableMasterNodeToleration:
                    description: DisableMasterNodeToleration can be used to turn off
                      the arbiter mon toleration for the master node taint.
                    type: boolean
                  enable:
                    type: boolean
                type: object
              backingStorageClasses:
                description: |-
                  BackingStorageClasses is a list of storage classes that will be
                  provisioned by the storagecluster controller to be used in
                  storageDeviceSets section of the CR.
                items:
                  description: BackingStorageClass defines the backing storageclass
                    for StorageDeviceSet
                  properties:
                    metadata:
                      properties:
                        annotations:
                          additionalProperties:
                            type: string
                          type: object
                        finalizers:
                          items:
                            type: string
                          type: array
                        labels:
                          additionalProperties:
                            type: string
                          type: object
                        name:
                          type: string
                        namespace:
                          type: string
                      type: object
                    parameters:
                      additionalProperties:
                        type: string
                      description: |-
                        Parameters holds the parameters for the provisioner that should
                        create volumes of this storage class.
                      type: object
                    provisioner:
                      description: Provisioner indicates the type of the provisioner.
                      type: string
                  type: object
                type: array
              csi:
                description: CSIDriverSpec defines the CSI driver settings for the
                  StorageCluster.
                properties:
                  readAffinity:
                    description: ReadAffinity defines the read affinity settings for
                      CSI driver.
                    properties:
                      crushLocationLabels:
                        description: |-
                          CrushLocationLabels defines which node labels to use
                          as CRUSH location. This should correspond to the values set in
                          the CRUSH map.
                        items:
                          type: string
                        type: array
                      enabled:
                        description: Enables read affinity for CSI driver.
                        type: boolean
                    type: object
                type: object
              enableCephTools:
                description: |-
                  EnableCephTools toggles on whether or not the ceph tools pod
                  should be deployed.
                  Defaults to false
                type: boolean
              encryption:
                description: |-
                  EncryptionSpec defines if encryption should be enabled for the Storage Cluster
                  It is optional and defaults to false.
                properties:
                  clusterWide:
                    type: boolean
                  enable:
                    description: |-
                      deprecated from OCS 4.10 onwards, acting as a dummy,
                      UI will keep sending this flag for backward compatibility (OCP 4.10 + OCS 4.9)
                    type: boolean
                  keyRotation:
                    description: KeyRotation defines options for Key Rotation.
                    properties:
                      enable:
                        description: Enable represents whether the key rotation is
                          enabled.
                        type: boolean
                      schedule:
                        default: '@weekly'
                        description: Schedule represents the cron schedule for key
                          rotation.
                        type: string
                    type: object
                  kms:
                    description: KeyManagementServiceSpec provides a way to enable
                      KMS
                    properties:
                      enable:
                        type: boolean
                    type: object
                  storageClass:
                    type: boolean
                  storageClassName:
                    description: StorageClassName specifies the name of the storage
                      class created for ceph encrypted block pools
                    maxLength: 253
                    pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
                    type: string
                type: object
              externalStorage:
                description: |-
                  ExternalStorage is optional and defaults to false. When set to true, OCS will
                  connect to an external OCS Storage Cluster instead of provisioning one locally.
                properties:
                  enable:
                    type: boolean
                type: object
              flexibleScaling:
                description: |-
                  If enabled, sets the failureDomain to host, allowing devices to be
                  distributed evenly across all nodes, regardless of distribution in zones
                  or racks.
                type: boolean
              hostNetwork:
                description: HostNetwork defaults to false
                type: boolean
              instanceType:
                type: string
              labelSelector:
                description: LabelSelector is used to specify custom labels of nodes
                  to run OCS on
                properties:
                  matchExpressions:
                    description: matchExpressions is a list of label selector requirements.
                      The requirements are ANDed.
                    items:
                      description: |-
                        A label selector requirement is a selector that contains values, a key, and an operator that
                        relates the key and values.
                      properties:
                        key:
                          description: key is the label key that the selector applies
                            to.
                          type: string
                        operator:
                          description: |-
                            operator represents a key's relationship to a set of values.
                            Valid operators are In, NotIn, Exists and DoesNotExist.
                          type: string
                        values:
                          description: |-
                            values is an array of string values. If the operator is In or NotIn,
                            the values array must be non-empty. If the operator is Exists or DoesNotExist,
                            the values array must be empty. This array is replaced during a strategic
                            merge patch.
                          items:
                            type: string
                          type: array
                          x-kubernetes-list-type: atomic
                      required:
                      - key
                      - operator
                      type: object
                    type: array
                    x-kubernetes-list-type: atomic
                  matchLabels:
                    additionalProperties:
                      type: string
                    description: |-
                      matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
                      map is equivalent to an element of matchExpressions, whose key field is "key", the
                      operator is "In", and the values array contains only "value". The requirements are ANDed.
                    type: object
                type: object
                x-kubernetes-map-type: atomic
              logCollector:
                description: Logging represents loggings settings
                nullable: true
                properties:
                  enabled:
                    description: Enabled represents whether the log collector is enabled
                    type: boolean
                  maxLogSize:
                    anyOf:
                    - type: integer
                    - type: string
                    description: MaxLogSize is the maximum size of the log per ceph
                      daemons. Must be at least 1M.
                    pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                    x-kubernetes-int-or-string: true
                  periodicity:
                    description: Periodicity is the periodicity of the log rotation.
                    pattern: ^$|^(hourly|daily|weekly|monthly|1h|24h|1d)$
                    type: string
                type: object
              manageNodes:
                type: boolean
              managedResources:
                description: |-
                  ManagedResources specifies how to deal with auxiliary resources reconciled
                  with the StorageCluster
                properties:
                  cephBlockPools:
                    description: ManageCephBlockPools defines how to reconcile CephBlockPools
                    properties:
                      defaultStorageClass:
                        description: if set to true, the storageClass created for
                          cephBlockPools will be annotated as the default for the
                          whole cluster
                        type: boolean
                      defaultVirtualizationStorageClass:
                        description: if set to true, the virtualization storageClass
                          will be annotated as the default for kubevirt workloads
                        type: boolean
                      disableSnapshotClass:
                        type: boolean
                      disableStorageClass:
                        type: boolean
                      poolSpec:
                        description: PoolSpec specifies the pool specification for
                          the default cephBlockPool
                        properties:
                          application:
                            description: The application name to set on the pool.
                              Only expected to be set for rgw pools.
                            type: string
                          compressionMode:
                            description: |-
                              DEPRECATED: use Parameters instead, e.g., Parameters["compression_mode"] = "force"
                              The inline compression mode in Bluestore OSD to set to (options are: none, passive, aggressive, force)
                              Do NOT set a default value for kubebuilder as this will override the Parameters
                            enum:
                            - none
                            - passive
                            - aggressive
                            - force
                            - ""
                            nullable: true
                            type: string
                          crushRoot:
                            description: The root of the crush hierarchy utilized
                              by the pool
                            nullable: true
                            type: string
                          deviceClass:
                            description: The device class the OSD should set to for
                              use in the pool
                            nullable: true
                            type: string
                          enableCrushUpdates:
                            description: Allow rook operator to change the pool CRUSH
                              tunables once the pool is created
                            type: boolean
                          enableRBDStats:
                            description: EnableRBDStats is used to enable gathering
                              of statistics for all RBD images in the pool
                            type: boolean
                          erasureCoded:
                            description: The erasure code settings
                            properties:
                              algorithm:
                                description: The algorithm for erasure coding
                                type: string
                              codingChunks:
                                description: |-
                                  Number of coding chunks per object in an erasure coded storage pool (required for erasure-coded pool type).
                                  This is the number of OSDs that can be lost simultaneously before data cannot be recovered.
                                minimum: 0
                                type: integer
                              dataChunks:
                                description: |-
                                  Number of data chunks per object in an erasure coded storage pool (required for erasure-coded pool type).
                                  The number of chunks required to recover an object when any single OSD is lost is the same
                                  as dataChunks so be aware that the larger the number of data chunks, the higher the cost of recovery.
                                minimum: 0
                                type: integer
                            required:
                            - codingChunks
                            - dataChunks
                            type: object
                          failureDomain:
                            description: 'The failure domain: osd/host/(region or
                              zone if available) - technically also any type in the
                              crush map'
                            type: string
                          mirroring:
                            description: The mirroring settings
                            properties:
                              enabled:
                                description: Enabled whether this pool is mirrored
                                  or not
                                type: boolean
                              mode:
                                description: 'Mode is the mirroring mode: either pool
                                  or image'
                                type: string
                              peers:
                                description: Peers represents the peers spec
                                nullable: true
                                properties:
                                  secretNames:
                                    description: SecretNames represents the Kubernetes
                                      Secret names to add rbd-mirror or cephfs-mirror
                                      peers
                                    items:
                                      type: string
                                    type: array
                                type: object
                              snapshotSchedules:
                                description: SnapshotSchedules is the scheduling of
                                  snapshot for mirrored images/pools
                                items:
                                  description: SnapshotScheduleSpec represents the
                                    snapshot scheduling settings of a mirrored pool
                                  properties:
                                    interval:
                                      description: Interval represent the periodicity
                                        of the snapshot.
                                      type: string
                                    path:
                                      description: Path is the path to snapshot, only
                                        valid for CephFS
                                      type: string
                                    startTime:
                                      description: StartTime indicates when to start
                                        the snapshot
                                      type: string
                                  type: object
                                type: array
                            type: object
                          parameters:
                            additionalProperties:
                              type: string
                            description: Parameters is a list of properties to enable
                              on a given pool
                            nullable: true
                            type: object
                            x-kubernetes-preserve-unknown-fields: true
                          quotas:
                            description: The quota settings
                            nullable: true
                            properties:
                              maxBytes:
                                description: |-
                                  MaxBytes represents the quota in bytes
                                  Deprecated in favor of MaxSize
                                format: int64
                                type: integer
                              maxObjects:
                                description: MaxObjects represents the quota in objects
                                format: int64
                                type: integer
                              maxSize:
                                description: MaxSize represents the quota in bytes
                                  as a string
                                pattern: ^[0-9]+[\.]?[0-9]*([KMGTPE]i|[kMGTPE])?$
                                type: string
                            type: object
                          replicated:
                            description: The replication settings
                            properties:
                              hybridStorage:
                                description: HybridStorage represents hybrid storage
                                  tier settings
                                nullable: true
                                properties:
                                  primaryDeviceClass:
                                    description: PrimaryDeviceClass represents high
                                      performance tier (for example SSD or NVME) for
                                      Primary OSD
                                    minLength: 1
                                    type: string
                                  secondaryDeviceClass:
                                    description: SecondaryDeviceClass represents low
                                      performance tier (for example HDDs) for remaining
                                      OSDs
                                    minLength: 1
                                    type: string
                                required:
                                - primaryDeviceClass
                                - secondaryDeviceClass
                                type: object
                              replicasPerFailureDomain:
                                description: ReplicasPerFailureDomain the number of
                                  replica in the specified failure domain
                                minimum: 1
                                type: integer
                              requireSafeReplicaSize:
                                description: RequireSafeReplicaSize if false allows
                                  you to set replica 1
                                type: boolean
                              size:
                                description: Size - Number of copies per object in
                                  a replicated storage pool, including the object
                                  itself (required for replicated pool type)
                                minimum: 0
                                type: integer
                              subFailureDomain:
                                description: SubFailureDomain the name of the sub-failure
                                  domain
                                type: string
                              targetSizeRatio:
                                description: TargetSizeRatio gives a hint (%) to Ceph
                                  in terms of expected consumption of the total cluster
                                  capacity
                                type: number
                            required:
                            - size
                            type: object
                          statusCheck:
                            description: The mirroring statusCheck
                            properties:
                              mirror:
                                description: HealthCheckSpec represents the health
                                  check of an object store bucket
                                nullable: true
                                properties:
                                  disabled:
                                    type: boolean
                                  interval:
                                    description: Interval is the internal in second
                                      or minute for the health check to run like 60s
                                      for 60 seconds
                                    type: string
                                  timeout:
                                    type: string
                                type: object
                            type: object
                            x-kubernetes-preserve-unknown-fields: true
                        type: object
                      reconcileStrategy:
                        type: string
                      storageClassName:
                        description: StorageClassName specifies the name of the storage
                          class created for ceph block pools
                        maxLength: 253
                        pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
                        type: string
                      virtualizationStorageClassName:
                        description: |-
                          VirtualizationStorageClassName specifies the name of the storage class created for ceph block pools
                          for virtualization environment
                        maxLength: 253
                        pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
                        type: string
                    type: object
                  cephCluster:
                    description: ManageCephCluster defines how to reconcile the Ceph
                      cluster definition
                    properties:
                      allowDeviceClassUpdate:
                        description: Whether to allow updating the device class after
                          the OSD is initially provisioned
                        type: boolean
                      backfillFullRatio:
                        description: BackfillFullRatio is the ratio at which the cluster
                          is too full for backfill. Backfill will be disabled if above
                          this threshold. Default is 0.80.
                        maximum: 1
                        minimum: 0
                        nullable: true
                        type: number
                      cephConfig:
                        additionalProperties:
                          additionalProperties:
                            type: string
                          type: object
                        description: Ceph Config options
                        type: object
                      continueUpgradeAfterChecksEvenIfNotHealthy:
                        description: Whether or not continue if PGs are not clean
                          during an upgrade
                        type: boolean
                      fullRatio:
                        description: FullRatio is the ratio at which the cluster is
                          considered full and ceph will stop accepting writes. Default
                          is 0.85.
                        maximum: 1
                        minimum: 0
                        nullable: true
                        type: number
                      healthCheck:
                        description: CephClusterHealthCheckSpec represent the healthcheck
                          for Ceph daemons
                        properties:
                          daemonHealth:
                            description: DaemonHealth is the health check for a given
                              daemon
                            nullable: true
                            properties:
                              mon:
                                description: Monitor represents the health check settings
                                  for the Ceph monitor
                                nullable: true
                                properties:
                                  disabled:
                                    type: boolean
                                  interval:
                                    description: Interval is the internal in second
                                      or minute for the health check to run like 60s
                                      for 60 seconds
                                    type: string
                                  timeout:
                                    type: string
                                type: object
                              osd:
                                description: ObjectStorageDaemon represents the health
                                  check settings for the Ceph OSDs
                                nullable: true
                                properties:
                                  disabled:
                                    type: boolean
                                  interval:
                                    description: Interval is the internal in second
                                      or minute for the health check to run like 60s
                                      for 60 seconds
                                    type: string
                                  timeout:
                                    type: string
                                type: object
                              status:
                                description: Status represents the health check settings
                                  for the Ceph health
                                nullable: true
                                properties:
                                  disabled:
                                    type: boolean
                                  interval:
                                    description: Interval is the internal in second
                                      or minute for the health check to run like 60s
                                      for 60 seconds
                                    type: string
                                  timeout:
                                    type: string
                                type: object
                            type: object
                          livenessProbe:
                            additionalProperties:
                              description: ProbeSpec is a wrapper around Probe so
                                it can be enabled or disabled for a Ceph daemon
                              properties:
                                disabled:
                                  description: Disabled determines whether probe is
                                    disable or not
                                  type: boolean
                                probe:
                                  description: |-
                                    Probe describes a health check to be performed against a container to determine whether it is
                                    alive or ready to receive traffic.
                                  properties:
                                    exec:
                                      description: Exec specifies a command to execute
                                        in the container.
                                      properties:
                                        command:
                                          description: |-
                                            Command is the command line to execute inside the container, the working directory for the
                                            command  is root ('/') in the container's filesystem. The command is simply exec'd, it is
                                            not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use
                                            a shell, you need to explicitly call out to that shell.
                                            Exit status of 0 is treated as live/healthy and non-zero is unhealthy.
                                          items:
                                            type: string
                                          type: array
                                          x-kubernetes-list-type: atomic
                                      type: object
                                    failureThreshold:
                                      description: |-
                                        Minimum consecutive failures for the probe to be considered failed after having succeeded.
                                        Defaults to 3. Minimum value is 1.
                                      format: int32
                                      type: integer
                                    grpc:
                                      description: GRPC specifies a GRPC HealthCheckRequest.
                                      properties:
                                        port:
                                          description: Port number of the gRPC service.
                                            Number must be in the range 1 to 65535.
                                          format: int32
                                          type: integer
                                        service:
                                          default: ""
                                          description: |-
                                            Service is the name of the service to place in the gRPC HealthCheckRequest
                                            (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md).

                                            If this is not specified, the default behavior is defined by gRPC.
                                          type: string
                                      required:
                                      - port
                                      type: object
                                    httpGet:
                                      description: HTTPGet specifies an HTTP GET request
                                        to perform.
                                      properties:
                                        host:
                                          description: |-
                                            Host name to connect to, defaults to the pod IP. You probably want to set
                                            "Host" in httpHeaders instead.
                                          type: string
                                        httpHeaders:
                                          description: Custom headers to set in the
                                            request. HTTP allows repeated headers.
                                          items:
                                            description: HTTPHeader describes a custom
                                              header to be used in HTTP probes
                                            properties:
                                              name:
                                                description: |-
                                                  The header field name.
                                                  This will be canonicalized upon output, so case-variant names will be understood as the same header.
                                                type: string
                                              value:
                                                description: The header field value
                                                type: string
                                            required:
                                            - name
                                            - value
                                            type: object
                                          type: array
                                          x-kubernetes-list-type: atomic
                                        path:
                                          description: Path to access on the HTTP
                                            server.
                                          type: string
                                        port:
                                          anyOf:
                                          - type: integer
                                          - type: string
                                          description: |-
                                            Name or number of the port to access on the container.
                                            Number must be in the range 1 to 65535.
                                            Name must be an IANA_SVC_NAME.
                                          x-kubernetes-int-or-string: true
                                        scheme:
                                          description: |-
                                            Scheme to use for connecting to the host.
                                            Defaults to HTTP.
                                          type: string
                                      required:
                                      - port
                                      type: object
                                    initialDelaySeconds:
                                      description: |-
                                        Number of seconds after the container has started before liveness probes are initiated.
                                        More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
                                      format: int32
                                      type: integer
                                    periodSeconds:
                                      description: |-
                                        How often (in seconds) to perform the probe.
                                        Default to 10 seconds. Minimum value is 1.
                                      format: int32
                                      type: integer
                                    successThreshold:
                                      description: |-
                                        Minimum consecutive successes for the probe to be considered successful after having failed.
                                        Defaults to 1. Must be 1 for liveness and startup. Minimum value is 1.
                                      format: int32
                                      type: integer
                                    tcpSocket:
                                      description: TCPSocket specifies a connection
                                        to a TCP port.
                                      properties:
                                        host:
                                          description: 'Optional: Host name to connect
                                            to, defaults to the pod IP.'
                                          type: string
                                        port:
                                          anyOf:
                                          - type: integer
                                          - type: string
                                          description: |-
                                            Number or name of the port to access on the container.
                                            Number must be in the range 1 to 65535.
                                            Name must be an IANA_SVC_NAME.
                                          x-kubernetes-int-or-string: true
                                      required:
                                      - port
                                      type: object
                                    terminationGracePeriodSeconds:
                                      description: |-
                                        Optional duration in seconds the pod needs to terminate gracefully upon probe failure.
                                        The grace period is the duration in seconds after the processes running in the pod are sent
                                        a termination signal and the time when the processes are forcibly halted with a kill signal.
                                        Set this value longer than the expected cleanup time for your process.
                                        If this value is nil, the pod's terminationGracePeriodSeconds will be used. Otherwise, this
                                        value overrides the value provided by the pod spec.
                                        Value must be non-negative integer. The value zero indicates stop immediately via
                                        the kill signal (no opportunity to shut down).
                                        This is a beta field and requires enabling ProbeTerminationGracePeriod feature gate.
                                        Minimum value is 1. spec.terminationGracePeriodSeconds is used if unset.
                                      format: int64
                                      type: integer
                                    timeoutSeconds:
                                      description: |-
                                        Number of seconds after which the probe times out.
                                        Defaults to 1 second. Minimum value is 1.
                                        More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
                                      format: int32
                                      type: integer
                                  type: object
                              type: object
                            description: LivenessProbe allows changing the livenessProbe
                              configuration for a given daemon
                            type: object
                          startupProbe:
                            additionalProperties:
                              description: ProbeSpec is a wrapper around Probe so
                                it can be enabled or disabled for a Ceph daemon
                              properties:
                                disabled:
                                  description: Disabled determines whether probe is
                                    disable or not
                                  type: boolean
                                probe:
                                  description: |-
                                    Probe describes a health check to be performed against a container to determine whether it is
                                    alive or ready to receive traffic.
                                  properties:
                                    exec:
                                      description: Exec specifies a command to execute
                                        in the container.
                                      properties:
                                        command:
                                          description: |-
                                            Command is the command line to execute inside the container, the working directory for the
                                            command  is root ('/') in the container's filesystem. The command is simply exec'd, it is
                                            not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use
                                            a shell, you need to explicitly call out to that shell.
                                            Exit status of 0 is treated as live/healthy and non-zero is unhealthy.
                                          items:
                                            type: string
                                          type: array
                                          x-kubernetes-list-type: atomic
                                      type: object
                                    failureThreshold:
                                      description: |-
                                        Minimum consecutive failures for the probe to be considered failed after having succeeded.
                                        Defaults to 3. Minimum value is 1.
                                      format: int32
                                      type: integer
                                    grpc:
                                      description: GRPC specifies a GRPC HealthCheckRequest.
                                      properties:
                                        port:
                                          description: Port number of the gRPC service.
                                            Number must be in the range 1 to 65535.
                                          format: int32
                                          type: integer
                                        service:
                                          default: ""
                                          description: |-
                                            Service is the name of the service to place in the gRPC HealthCheckRequest
                                            (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md).

                                            If this is not specified, the default behavior is defined by gRPC.
                                          type: string
                                      required:
                                      - port
                                      type: object
                                    httpGet:
                                      description: HTTPGet specifies an HTTP GET request
                                        to perform.
                                      properties:
                                        host:
                                          description: |-
                                            Host name to connect to, defaults to the pod IP. You probably want to set
                                            "Host" in httpHeaders instead.
                                          type: string
                                        httpHeaders:
                                          description: Custom headers to set in the
                                            request. HTTP allows repeated headers.
                                          items:
                                            description: HTTPHeader describes a custom
                                              header to be used in HTTP probes
                                            properties:
                                              name:
                                                description: |-
                                                  The header field name.
                                                  This will be canonicalized upon output, so case-variant names will be understood as the same header.
                                                type: string
                                              value:
                                                description: The header field value
                                                type: string
                                            required:
                                            - name
                                            - value
                                            type: object
                                          type: array
                                          x-kubernetes-list-type: atomic
                                        path:
                                          description: Path to access on the HTTP
                                            server.
                                          type: string
                                        port:
                                          anyOf:
                                          - type: integer
                                          - type: string
                                          description: |-
                                            Name or number of the port to access on the container.
                                            Number must be in the range 1 to 65535.
                                            Name must be an IANA_SVC_NAME.
                                          x-kubernetes-int-or-string: true
                                        scheme:
                                          description: |-
                                            Scheme to use for connecting to the host.
                                            Defaults to HTTP.
                                          type: string
                                      required:
                                      - port
                                      type: object
                                    initialDelaySeconds:
                                      description: |-
                                        Number of seconds after the container has started before liveness probes are initiated.
                                        More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
                                      format: int32
                                      type: integer
                                    periodSeconds:
                                      description: |-
                                        How often (in seconds) to perform the probe.
                                        Default to 10 seconds. Minimum value is 1.
                                      format: int32
                                      type: integer
                                    successThreshold:
                                      description: |-
                                        Minimum consecutive successes for the probe to be considered successful after having failed.
                                        Defaults to 1. Must be 1 for liveness and startup. Minimum value is 1.
                                      format: int32
                                      type: integer
                                    tcpSocket:
                                      description: TCPSocket specifies a connection
                                        to a TCP port.
                                      properties:
                                        host:
                                          description: 'Optional: Host name to connect
                                            to, defaults to the pod IP.'
                                          type: string
                                        port:
                                          anyOf:
                                          - type: integer
                                          - type: string
                                          description: |-
                                            Number or name of the port to access on the container.
                                            Number must be in the range 1 to 65535.
                                            Name must be an IANA_SVC_NAME.
                                          x-kubernetes-int-or-string: true
                                      required:
                                      - port
                                      type: object
                                    terminationGracePeriodSeconds:
                                      description: |-
                                        Optional duration in seconds the pod needs to terminate gracefully upon probe failure.
                                        The grace period is the duration in seconds after the processes running in the pod are sent
                                        a termination signal and the time when the processes are forcibly halted with a kill signal.
                                        Set this value longer than the expected cleanup time for your process.
                                        If this value is nil, the pod's terminationGracePeriodSeconds will be used. Otherwise, this
                                        value overrides the value provided by the pod spec.
                                        Value must be non-negative integer. The value zero indicates stop immediately via
                                        the kill signal (no opportunity to shut down).
                                        This is a beta field and requires enabling ProbeTerminationGracePeriod feature gate.
                                        Minimum value is 1. spec.terminationGracePeriodSeconds is used if unset.
                                      format: int64
                                      type: integer
                                    timeoutSeconds:
                                      description: |-
                                        Number of seconds after which the probe times out.
                                        Defaults to 1 second. Minimum value is 1.
                                        More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
                                      format: int32
                                      type: integer
                                  type: object
                              type: object
                            description: StartupProbe allows changing the startupProbe
                              configuration for a given daemon
                            type: object
                        type: object
                      mgrCount:
                        enum:
                        - 1
                        - 2
                        type: integer
                      monCount:
                        enum:
                        - 3
                        - 5
                        type: integer
                      nearFullRatio:
                        description: NearFullRatio is the ratio at which the cluster
                          is considered nearly full and will raise a ceph health warning.
                          Default is 0.75.
                        maximum: 1
                        minimum: 0
                        nullable: true
                        type: number
                      osdMaintenanceTimeout:
                        description: |-
                          A duration in minutes that determines how long an entire failureDomain like `region/zone/host` will be held in `noout` (in addition to the
                          default DOWN/OUT interval) when it is draining. This is only relevant when  `managePodBudgets` is `true` in cephCluster CR.
                          The default value is `30` minutes.
                        format: int64
                        type: integer
                      reconcileStrategy:
                        type: string
                      skipUpgradeChecks:
                        description: |-
                          Whether or not upgrade should continue even if a check fails
                          This means Ceph's status could be degraded and we don't recommend upgrading but you might decide otherwise
                          Use at your OWN risk
                        type: boolean
                      upgradeOSDRequiresHealthyPGs:
                        description: |-
                          Whether or not requires PGs are clean before an OSD upgrade. If set to `true` OSD upgrade process won't start until PGs are healthy.
                          This configuration will be ignored if `skipUpgradeChecks` is `true`.
                        type: boolean
                      waitTimeoutForHealthyOSDInMinutes:
                        description: |-
                          WaitTimeoutForHealthyOSDInMinutes defines the time the operator would wait before an OSD can be stopped for upgrade or restart.
                          If `continueUpgradeAfterChecksEvenIfNotHealthy` is `false` and the timeout exceeds and OSD is not ok to stop, then the operator
                          would skip upgrade for the current OSD and proceed with the next one.
                          If `continueUpgradeAfterChecksEvenIfNotHealthy` is `true`, then operator would continue with the upgrade of an OSD even if its
                          not ok to stop after the timeout.
                          This timeout won't be applied if `skipUpgradeChecks` is `true`.
                          The default wait timeout is 10 minutes.
                        format: int64
                        type: integer
                    type: object
                  cephConfig:
                    description: ManageCephConfig defines how to reconcile the Ceph
                      configuration
                    properties:
                      reconcileStrategy:
                        type: string
                    type: object
                  cephDashboard:
                    description: ManageCephDashboard defines how to reconcile Ceph
                      dashboard
                    properties:
                      enable:
                        type: boolean
                      ssl:
                        description: serve the dashboard using SSL
                        type: boolean
                    type: object
                  cephFilesystems:
                    description: ManageCephFilesystems defines how to reconcile CephFilesystems
                    properties:
                      activeMetadataServers:
                        type: integer
                      additionalDataPools:
                        description: AdditionalDataPools specifies list of additional
                          named cephfs data pools
                        items:
                          description: NamedPoolSpec represents the named ceph pool
                            spec
                          properties:
                            application:
                              description: The application name to set on the pool.
                                Only expected to be set for rgw pools.
                              type: string
                            compressionMode:
                              description: |-
                                DEPRECATED: use Parameters instead, e.g., Parameters["compression_mode"] = "force"
                                The inline compression mode in Bluestore OSD to set to (options are: none, passive, aggressive, force)
                                Do NOT set a default value for kubebuilder as this will override the Parameters
                              enum:
                              - none
                              - passive
                              - aggressive
                              - force
                              - ""
                              nullable: true
                              type: string
                            crushRoot:
                              description: The root of the crush hierarchy utilized
                                by the pool
                              nullable: true
                              type: string
                            deviceClass:
                              description: The device class the OSD should set to
                                for use in the pool
                              nullable: true
                              type: string
                            enableCrushUpdates:
                              description: Allow rook operator to change the pool
                                CRUSH tunables once the pool is created
                              type: boolean
                            enableRBDStats:
                              description: EnableRBDStats is used to enable gathering
                                of statistics for all RBD images in the pool
                              type: boolean
                            erasureCoded:
                              description: The erasure code settings
                              properties:
                                algorithm:
                                  description: The algorithm for erasure coding
                                  type: string
                                codingChunks:
                                  description: |-
                                    Number of coding chunks per object in an erasure coded storage pool (required for erasure-coded pool type).
                                    This is the number of OSDs that can be lost simultaneously before data cannot be recovered.
                                  minimum: 0
                                  type: integer
                                dataChunks:
                                  description: |-
                                    Number of data chunks per object in an erasure coded storage pool (required for erasure-coded pool type).
                                    The number of chunks required to recover an object when any single OSD is lost is the same
                                    as dataChunks so be aware that the larger the number of data chunks, the higher the cost of recovery.
                                  minimum: 0
                                  type: integer
                              required:
                              - codingChunks
                              - dataChunks
                              type: object
                            failureDomain:
                              description: 'The failure domain: osd/host/(region or
                                zone if available) - technically also any type in
                                the crush map'
                              type: string
                            mirroring:
                              description: The mirroring settings
                              properties:
                                enabled:
                                  description: Enabled whether this pool is mirrored
                                    or not
                                  type: boolean
                                mode:
                                  description: 'Mode is the mirroring mode: either
                                    pool or image'
                                  type: string
                                peers:
                                  description: Peers represents the peers spec
                                  nullable: true
                                  properties:
                                    secretNames:
                                      description: SecretNames represents the Kubernetes
                                        Secret names to add rbd-mirror or cephfs-mirror
                                        peers
                                      items:
                                        type: string
                                      type: array
                                  type: object
                                snapshotSchedules:
                                  description: SnapshotSchedules is the scheduling
                                    of snapshot for mirrored images/pools
                                  items:
                                    description: SnapshotScheduleSpec represents the
                                      snapshot scheduling settings of a mirrored pool
                                    properties:
                                      interval:
                                        description: Interval represent the periodicity
                                          of the snapshot.
                                        type: string
                                      path:
                                        description: Path is the path to snapshot,
                                          only valid for CephFS
                                        type: string
                                      startTime:
                                        description: StartTime indicates when to start
                                          the snapshot
                                        type: string
                                    type: object
                                  type: array
                              type: object
                            name:
                              description: Name of the pool
                              type: string
                            parameters:
                              additionalProperties:
                                type: string
                              description: Parameters is a list of properties to enable
                                on a given pool
                              nullable: true
                              type: object
                              x-kubernetes-preserve-unknown-fields: true
                            quotas:
                              description: The quota settings
                              nullable: true
                              properties:
                                maxBytes:
                                  description: |-
                                    MaxBytes represents the quota in bytes
                                    Deprecated in favor of MaxSize
                                  format: int64
                                  type: integer
                                maxObjects:
                                  description: MaxObjects represents the quota in
                                    objects
                                  format: int64
                                  type: integer
                                maxSize:
                                  description: MaxSize represents the quota in bytes
                                    as a string
                                  pattern: ^[0-9]+[\.]?[0-9]*([KMGTPE]i|[kMGTPE])?$
                                  type: string
                              type: object
                            replicated:
                              description: The replication settings
                              properties:
                                hybridStorage:
                                  description: HybridStorage represents hybrid storage
                                    tier settings
                                  nullable: true
                                  properties:
                                    primaryDeviceClass:
                                      description: PrimaryDeviceClass represents high
                                        performance tier (for example SSD or NVME)
                                        for Primary OSD
                                      minLength: 1
                                      type: string
                                    secondaryDeviceClass:
                                      description: SecondaryDeviceClass represents
                                        low performance tier (for example HDDs) for
                                        remaining OSDs
                                      minLength: 1
                                      type: string
                                  required:
                                  - primaryDeviceClass
                                  - secondaryDeviceClass
                                  type: object
                                replicasPerFailureDomain:
                                  description: ReplicasPerFailureDomain the number
                                    of replica in the specified failure domain
                                  minimum: 1
                                  type: integer
                                requireSafeReplicaSize:
                                  description: RequireSafeReplicaSize if false allows
                                    you to set replica 1
                                  type: boolean
                                size:
                                  description: Size - Number of copies per object
                                    in a replicated storage pool, including the object
                                    itself (required for replicated pool type)
                                  minimum: 0
                                  type: integer
                                subFailureDomain:
                                  description: SubFailureDomain the name of the sub-failure
                                    domain
                                  type: string
                                targetSizeRatio:
                                  description: TargetSizeRatio gives a hint (%) to
                                    Ceph in terms of expected consumption of the total
                                    cluster capacity
                                  type: number
                              required:
                              - size
                              type: object
                            statusCheck:
                              description: The mirroring statusCheck
                              properties:
                                mirror:
                                  description: HealthCheckSpec represents the health
                                    check of an object store bucket
                                  nullable: true
                                  properties:
                                    disabled:
                                      type: boolean
                                    interval:
                                      description: Interval is the internal in second
                                        or minute for the health check to run like
                                        60s for 60 seconds
                                      type: string
                                    timeout:
                                      type: string
                                  type: object
                              type: object
                              x-kubernetes-preserve-unknown-fields: true
                          type: object
                        type: array
                      dataPoolSpec:
                        description: DataPoolSpec specifies the pool specification
                          for the default cephfs data pool
                        properties:
                          application:
                            description: The application name to set on the pool.
                              Only expected to be set for rgw pools.
                            type: string
                          compressionMode:
                            description: |-
                              DEPRECATED: use Parameters instead, e.g., Parameters["compression_mode"] = "force"
                              The inline compression mode in Bluestore OSD to set to (options are: none, passive, aggressive, force)
                              Do NOT set a default value for kubebuilder as this will override the Parameters
                            enum:
                            - none
                            - passive
                            - aggressive
                            - force
                            - ""
                            nullable: true
                            type: string
                          crushRoot:
                            description: The root of the crush hierarchy utilized
                              by the pool
                            nullable: true
                            type: string
                          deviceClass:
                            description: The device class the OSD should set to for
                              use in the pool
                            nullable: true
                            type: string
                          enableCrushUpdates:
                            description: Allow rook operator to change the pool CRUSH
                              tunables once the pool is created
                            type: boolean
                          enableRBDStats:
                            description: EnableRBDStats is used to enable gathering
                              of statistics for all RBD images in the pool
                            type: boolean
                          erasureCoded:
                            description: The erasure code settings
                            properties:
                              algorithm:
                                description: The algorithm for erasure coding
                                type: string
                              codingChunks:
                                description: |-
                                  Number of coding chunks per object in an erasure coded storage pool (required for erasure-coded pool type).
                                  This is the number of OSDs that can be lost simultaneously before data cannot be recovered.
                                minimum: 0
                                type: integer
                              dataChunks:
                                description: |-
                                  Number of data chunks per object in an erasure coded storage pool (required for erasure-coded pool type).
                                  The number of chunks required to recover an object when any single OSD is lost is the same
                                  as dataChunks so be aware that the larger the number of data chunks, the higher the cost of recovery.
                                minimum: 0
                                type: integer
                            required:
                            - codingChunks
                            - dataChunks
                            type: object
                          failureDomain:
                            description: 'The failure domain: osd/host/(region or
                              zone if available) - technically also any type in the
                              crush map'
                            type: string
                          mirroring:
                            description: The mirroring settings
                            properties:
                              enabled:
                                description: Enabled whether this pool is mirrored
                                  or not
                                type: boolean
                              mode:
                                description: 'Mode is the mirroring mode: either pool
                                  or image'
                                type: string
                              peers:
                                description: Peers represents the peers spec
                                nullable: true
                                properties:
                                  secretNames:
                                    description: SecretNames represents the Kubernetes
                                      Secret names to add rbd-mirror or cephfs-mirror
                                      peers
                                    items:
                                      type: string
                                    type: array
                                type: object
                              snapshotSchedules:
                                description: SnapshotSchedules is the scheduling of
                                  snapshot for mirrored images/pools
                                items:
                                  description: SnapshotScheduleSpec represents the
                                    snapshot scheduling settings of a mirrored pool
                                  properties:
                                    interval:
                                      description: Interval represent the periodicity
                                        of the snapshot.
                                      type: string
                                    path:
                                      description: Path is the path to snapshot, only
                                        valid for CephFS
                                      type: string
                                    startTime:
                                      description: StartTime indicates when to start
                                        the snapshot
                                      type: string
                                  type: object
                                type: array
                            type: object
                          parameters:
                            additionalProperties:
                              type: string
                            description: Parameters is a list of properties to enable
                              on a given pool
                            nullable: true
                            type: object
                            x-kubernetes-preserve-unknown-fields: true
                          quotas:
                            description: The quota settings
                            nullable: true
                            properties:
                              maxBytes:
                                description: |-
                                  MaxBytes represents the quota in bytes
                                  Deprecated in favor of MaxSize
                                format: int64
                                type: integer
                              maxObjects:
                                description: MaxObjects represents the quota in objects
                                format: int64
                                type: integer
                              maxSize:
                                description: MaxSize represents the quota in bytes
                                  as a string
                                pattern: ^[0-9]+[\.]?[0-9]*([KMGTPE]i|[kMGTPE])?$
                                type: string
                            type: object
                          replicated:
                            description: The replication settings
                            properties:
                              hybridStorage:
                                description: HybridStorage represents hybrid storage
                                  tier settings
                                nullable: true
                                properties:
                                  primaryDeviceClass:
                                    description: PrimaryDeviceClass represents high
                                      performance tier (for example SSD or NVME) for
                                      Primary OSD
                                    minLength: 1
                                    type: string
                                  secondaryDeviceClass:
                                    description: SecondaryDeviceClass represents low
                                      performance tier (for example HDDs) for remaining
                                      OSDs
                                    minLength: 1
                                    type: string
                                required:
                                - primaryDeviceClass
                                - secondaryDeviceClass
                                type: object
                              replicasPerFailureDomain:
                                description: ReplicasPerFailureDomain the number of
                                  replica in the specified failure domain
                                minimum: 1
                                type: integer
                              requireSafeReplicaSize:
                                description: RequireSafeReplicaSize if false allows
                                  you to set replica 1
                                type: boolean
                              size:
                                description: Size - Number of copies per object in
                                  a replicated storage pool, including the object
                                  itself (required for replicated pool type)
                                minimum: 0
                                type: integer
                              subFailureDomain:
                                description: SubFailureDomain the name of the sub-failure
                                  domain
                                type: string
                              targetSizeRatio:
                                description: TargetSizeRatio gives a hint (%) to Ceph
                                  in terms of expected consumption of the total cluster
                                  capacity
                                type: number
                            required:
                            - size
                            type: object
                          statusCheck:
                            description: The mirroring statusCheck
                            properties:
                              mirror:
                                description: HealthCheckSpec represents the health
                                  check of an object store bucket
                                nullable: true
                                properties:
                                  disabled:
                                    type: boolean
                                  interval:
                                    description: Interval is the internal in second
                                      or minute for the health check to run like 60s
                                      for 60 seconds
                                    type: string
                                  timeout:
                                    type: string
                                type: object
                            type: object
                            x-kubernetes-preserve-unknown-fields: true
                        type: object
                      disableSnapshotClass:
                        type: boolean
                      disableStorageClass:
                        type: boolean
                      metadataPoolSpec:
                        description: MetadataPoolSpec specifies the pool specification
                          for the default cephFS metadata pool
                        properties:
                          application:
                            description: The application name to set on the pool.
                              Only expected to be set for rgw pools.
                            type: string
                          compressionMode:
                            description: |-
                              DEPRECATED: use Parameters instead, e.g., Parameters["compression_mode"] = "force"
                              The inline compression mode in Bluestore OSD to set to (options are: none, passive, aggressive, force)
                              Do NOT set a default value for kubebuilder as this will override the Parameters
                            enum:
                            - none
                            - passive
                            - aggressive
                            - force
                            - ""
                            nullable: true
                            type: string
                          crushRoot:
                            description: The root of the crush hierarchy utilized
                              by the pool
                            nullable: true
                            type: string
                          deviceClass:
                            description: The device class the OSD should set to for
                              use in the pool
                            nullable: true
                            type: string
                          enableCrushUpdates:
                            description: Allow rook operator to change the pool CRUSH
                              tunables once the pool is created
                            type: boolean
                          enableRBDStats:
                            description: EnableRBDStats is used to enable gathering
                              of statistics for all RBD images in the pool
                            type: boolean
                          erasureCoded:
                            description: The erasure code settings
                            properties:
                              algorithm:
                                description: The algorithm for erasure coding
                                type: string
                              codingChunks:
                                description: |-
                                  Number of coding chunks per object in an erasure coded storage pool (required for erasure-coded pool type).
                                  This is the number of OSDs that can be lost simultaneously before data cannot be recovered.
                                minimum: 0
                                type: integer
                              dataChunks:
                                description: |-
                                  Number of data chunks per object in an erasure coded storage pool (required for erasure-coded pool type).
                                  The number of chunks required to recover an object when any single OSD is lost is the same
                                  as dataChunks so be aware that the larger the number of data chunks, the higher the cost of recovery.
                                minimum: 0
                                type: integer
                            required:
                            - codingChunks
                            - dataChunks
                            type: object
                          failureDomain:
                            description: 'The failure domain: osd/host/(region or
                              zone if available) - technically also any type in the
                              crush map'
                            type: string
                          mirroring:
                            description: The mirroring settings
                            properties:
                              enabled:
                                description: Enabled whether this pool is mirrored
                                  or not
                                type: boolean
                              mode:
                                description: 'Mode is the mirroring mode: either pool
                                  or image'
                                type: string
                              peers:
                                description: Peers represents the peers spec
                                nullable: true
                                properties:
                                  secretNames:
                                    description: SecretNames represents the Kubernetes
                                      Secret names to add rbd-mirror or cephfs-mirror
                                      peers
                                    items:
                                      type: string
                                    type: array
                                type: object
                              snapshotSchedules:
                                description: SnapshotSchedules is the scheduling of
                                  snapshot for mirrored images/pools
                                items:
                                  description: SnapshotScheduleSpec represents the
                                    snapshot scheduling settings of a mirrored pool
                                  properties:
                                    interval:
                                      description: Interval represent the periodicity
                                        of the snapshot.
                                      type: string
                                    path:
                                      description: Path is the path to snapshot, only
                                        valid for CephFS
                                      type: string
                                    startTime:
                                      description: StartTime indicates when to start
                                        the snapshot
                                      type: string
                                  type: object
                                type: array
                            type: object
                          parameters:
                            additionalProperties:
                              type: string
                            description: Parameters is a list of properties to enable
                              on a given pool
                            nullable: true
                            type: object
                            x-kubernetes-preserve-unknown-fields: true
                          quotas:
                            description: The quota settings
                            nullable: true
                            properties:
                              maxBytes:
                                description: |-
                                  MaxBytes represents the quota in bytes
                                  Deprecated in favor of MaxSize
                                format: int64
                                type: integer
                              maxObjects:
                                description: MaxObjects represents the quota in objects
                                format: int64
                                type: integer
                              maxSize:
                                description: MaxSize represents the quota in bytes
                                  as a string
                                pattern: ^[0-9]+[\.]?[0-9]*([KMGTPE]i|[kMGTPE])?$
                                type: string
                            type: object
                          replicated:
                            description: The replication settings
                            properties:
                              hybridStorage:
                                description: HybridStorage represents hybrid storage
                                  tier settings
                                nullable: true
                                properties:
                                  primaryDeviceClass:
                                    description: PrimaryDeviceClass represents high
                                      performance tier (for example SSD or NVME) for
                                      Primary OSD
                                    minLength: 1
                                    type: string
                                  secondaryDeviceClass:
                                    description: SecondaryDeviceClass represents low
                                      performance tier (for example HDDs) for remaining
                                      OSDs
                                    minLength: 1
                                    type: string
                                required:
                                - primaryDeviceClass
                                - secondaryDeviceClass
                                type: object
                              replicasPerFailureDomain:
                                description: ReplicasPerFailureDomain the number of
                                  replica in the specified failure domain
                                minimum: 1
                                type: integer
                              requireSafeReplicaSize:
                                description: RequireSafeReplicaSize if false allows
                                  you to set replica 1
                                type: boolean
                              size:
                                description: Size - Number of copies per object in
                                  a replicated storage pool, including the object
                                  itself (required for replicated pool type)
                                minimum: 0
                                type: integer
                              subFailureDomain:
                                description: SubFailureDomain the name of the sub-failure
                                  domain
                                type: string
                              targetSizeRatio:
                                description: TargetSizeRatio gives a hint (%) to Ceph
                                  in terms of expected consumption of the total cluster
                                  capacity
                                type: number
                            required:
                            - size
                            type: object
                          statusCheck:
                            description: The mirroring statusCheck
                            properties:
                              mirror:
                                description: HealthCheckSpec represents the health
                                  check of an object store bucket
                                nullable: true
                                properties:
                                  disabled:
                                    type: boolean
                                  interval:
                                    description: Interval is the internal in second
                                      or minute for the health check to run like 60s
                                      for 60 seconds
                                    type: string
                                  timeout:
                                    type: string
                                type: object
                            type: object
                            x-kubernetes-preserve-unknown-fields: true
                        type: object
                      reconcileStrategy:
                        type: string
                      storageClassName:
                        description: StorageClassName specifies the name of the storage
                          class created for cephfs
                        maxLength: 253
                        pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
                        type: string
                    type: object
                  cephNonResilientPools:
                    description: ManageCephNonResilientPools defines how to reconcile
                      ceph non-resilient pools
                    properties:
                      count:
                        description: Count is the number of devices in this set
                        minimum: 1
                        type: integer
                      enable:
                        type: boolean
                      parameters:
                        additionalProperties:
                          type: string
                        description: Parameters is a list of properties to enable
                          on the non-resilient cephBlockPools
                        nullable: true
                        type: object
                        x-kubernetes-preserve-unknown-fields: true
                      resources:
                        description: ResourceRequirements (requests/limits) for the
                          devices
                        properties:
                          claims:
                            description: |-
                              Claims lists the names of resources, defined in spec.resourceClaims,
                              that are used by this container.

                              This is an alpha field and requires enabling the
                              DynamicResourceAllocation feature gate.

                              This field is immutable. It can only be set for containers.
                            items:
                              description: ResourceClaim references one entry in PodSpec.ResourceClaims.
                              properties:
                                name:
                                  description: |-
                                    Name must match the name of one entry in pod.spec.resourceClaims of
                                    the Pod where this field is used. It makes that resource available
                                    inside a container.
                                  type: string
                                request:
                                  description: |-
                                    Request is the name chosen for a request in the referenced claim.
                                    If empty, everything from the claim is made available, otherwise
                                    only the result of this request.
                                  type: string
                              required:
                              - name
                              type: object
                            type: array
                            x-kubernetes-list-map-keys:
                            - name
                            x-kubernetes-list-type: map
                          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-resources-containers/
                            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. Requests cannot exceed Limits.
                              More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
                            type: object
                        type: object
                      storageClassName:
                        description: StorageClassName specifies the name of the storage
                          class created for ceph non-resilient pools
                        maxLength: 253
                        pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
                        type: string
                      volumeClaimTemplate:
                        description: VolumeClaimTemplates is a PVC template for the
                          underlying storage devices
                        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:
                            description: |-
                              Standard object's metadata.
                              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
                            properties:
                              annotations:
                                additionalProperties:
                                  type: string
                                type: object
                              finalizers:
                                items:
                                  type: string
                                type: array
                              labels:
                                additionalProperties:
                                  type: string
                                type: object
                              name:
                                type: string
                              namespace:
                                type: string
                            type: object
                          spec:
                            description: |-
                              spec defines the desired characteristics of a volume requested by a pod author.
                              More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims
                            properties:
                              accessModes:
                                description: |-
                                  accessModes contains the desired access modes the volume should have.
                                  More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1
                                items:
                                  type: string
                                type: array
                                x-kubernetes-list-type: atomic
                              dataSource:
                                description: |-
                                  dataSource field can be used to specify either:
                                  * An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot)
                                  * An existing PVC (PersistentVolumeClaim)
                                  If the provisioner or an external controller can support the specified data source,
                                  it will create a new volume based on the contents of the specified data source.
                                  When the AnyVolumeDataSource feature gate is enabled, dataSource contents will be copied to dataSourceRef,
                                  and dataSourceRef contents will be copied to dataSource when dataSourceRef.namespace is not specified.
                                  If the namespace is specified, then dataSourceRef will not be copied to dataSource.
                                properties:
                                  apiGroup:
                                    description: |-
                                      APIGroup is the group for the resource being referenced.
                                      If APIGroup is not specified, the specified Kind must be in the core API group.
                                      For any other third-party types, APIGroup is required.
                                    type: string
                                  kind:
                                    description: Kind is the type of resource being
                                      referenced
                                    type: string
                                  name:
                                    description: Name is the name of resource being
                                      referenced
                                    type: string
                                required:
                                - kind
                                - name
                                type: object
                                x-kubernetes-map-type: atomic
                              dataSourceRef:
                                description: |-
                                  dataSourceRef specifies the object from which to populate the volume with data, if a non-empty
                                  volume is desired. This may be any object from a non-empty API group (non
                                  core object) or a PersistentVolumeClaim object.
                                  When this field is specified, volume binding will only succeed if the type of
                                  the specified object matches some installed volume populator or dynamic
                                  provisioner.
                                  This field will replace the functionality of the dataSource field and as such
                                  if both fields are non-empty, they must have the same value. For backwards
                                  compatibility, when namespace isn't specified in dataSourceRef,
                                  both fields (dataSource and dataSourceRef) will be set to the same
                                  value automatically if one of them is empty and the other is non-empty.
                                  When namespace is specified in dataSourceRef,
                                  dataSource isn't set to the same value and must be empty.
                                  There are three important differences between dataSource and dataSourceRef:
                                  * While dataSource only allows two specific types of objects, dataSourceRef
                                    allows any non-core object, as well as PersistentVolumeClaim objects.
                                  * While dataSource ignores disallowed values (dropping them), dataSourceRef
                                    preserves all values, and generates an error if a disallowed value is
                                    specified.
                                  * While dataSource only allows local objects, dataSourceRef allows objects
                                    in any namespaces.
                                  (Beta) Using this field requires the AnyVolumeDataSource feature gate to be enabled.
                                  (Alpha) Using the namespace field of dataSourceRef requires the CrossNamespaceVolumeDataSource feature gate to be enabled.
                                properties:
                                  apiGroup:
                                    description: |-
                                      APIGroup is the group for the resource being referenced.
                                      If APIGroup is not specified, the specified Kind must be in the core API group.
                                      For any other third-party types, APIGroup is required.
                                    type: string
                                  kind:
                                    description: Kind is the type of resource being
                                      referenced
                                    type: string
                                  name:
                                    description: Name is the name of resource being
                                      referenced
                                    type: string
                                  namespace:
                                    description: |-
                                      Namespace is the namespace of resource being referenced
                                      Note that when a namespace is specified, a gateway.networking.k8s.io/ReferenceGrant object is required in the referent namespace to allow that namespace's owner to accept the reference. See the ReferenceGrant documentation for details.
                                      (Alpha) This field requires the CrossNamespaceVolumeDataSource feature gate to be enabled.
                                    type: string
                                required:
                                - kind
                                - name
                                type: object
                              resources:
                                description: |-
                                  resources represents the minimum resources the volume should have.
                                  If RecoverVolumeExpansionFailure feature is enabled users are allowed to specify resource requirements
                                  that are lower than previous value but must still be higher than capacity recorded in the
                                  status field of the claim.
                                  More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources
                                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-resources-containers/
                                    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. Requests cannot exceed Limits.
                                      More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
                                    type: object
                                type: object
                              selector:
                                description: selector is a label query over volumes
                                  to consider for binding.
                                properties:
                                  matchExpressions:
                                    description: matchExpressions is a list of label
                                      selector requirements. The requirements are
                                      ANDed.
                                    items:
                                      description: |-
                                        A label selector requirement is a selector that contains values, a key, and an operator that
                                        relates the key and values.
                                      properties:
                                        key:
                                          description: key is the label key that the
                                            selector applies to.
                                          type: string
                                        operator:
                                          description: |-
                                            operator represents a key's relationship to a set of values.
                                            Valid operators are In, NotIn, Exists and DoesNotExist.
                                          type: string
                                        values:
                                          description: |-
                                            values is an array of string values. If the operator is In or NotIn,
                                            the values array must be non-empty. If the operator is Exists or DoesNotExist,
                                            the values array must be empty. This array is replaced during a strategic
                                            merge patch.
                                          items:
                                            type: string
                                          type: array
                                          x-kubernetes-list-type: atomic
                                      required:
                                      - key
                                      - operator
                                      type: object
                                    type: array
                                    x-kubernetes-list-type: atomic
                                  matchLabels:
                                    additionalProperties:
                                      type: string
                                    description: |-
                                      matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
                                      map is equivalent to an element of matchExpressions, whose key field is "key", the
                                      operator is "In", and the values array contains only "value". The requirements are ANDed.
                                    type: object
                                type: object
                                x-kubernetes-map-type: atomic
                              storageClassName:
                                description: |-
                                  storageClassName is the name of the StorageClass required by the claim.
                                  More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1
                                type: string
                              volumeAttributesClassName:
                                description: |-
                                  volumeAttributesClassName may be used to set the VolumeAttributesClass used by this claim.
                                  If specified, the CSI driver will create or update the volume with the attributes defined
                                  in the corresponding VolumeAttributesClass. This has a different purpose than storageClassName,
                                  it can be changed after the claim is created. An empty string value means that no VolumeAttributesClass
                                  will be applied to the claim but it's not allowed to reset this field to empty string once it is set.
                                  If unspecified and the PersistentVolumeClaim is unbound, the default VolumeAttributesClass
                                  will be set by the persistentvolume controller if it exists.
                                  If the resource referred to by volumeAttributesClass does not exist, this PersistentVolumeClaim will be
                                  set to a Pending state, as reflected by the modifyVolumeStatus field, until such as a resource
                                  exists.
                                  More info: https://kubernetes.io/docs/concepts/storage/volume-attributes-classes/
                                  (Beta) Using this field requires the VolumeAttributesClass feature gate to be enabled (off by default).
                                type: string
                              volumeMode:
                                description: |-
                                  volumeMode defines what type of volume is required by the claim.
                                  Value of Filesystem is implied when not included in claim spec.
                                type: string
                              volumeName:
                                description: volumeName is the binding reference to
                                  the PersistentVolume backing this claim.
                                type: string
                            type: object
                          status:
                            description: |-
                              status represents the current information/status of a persistent volume claim.
                              Read-only.
                              More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims
                            properties:
                              accessModes:
                                description: |-
                                  accessModes contains the actual access modes the volume backing the PVC has.
                                  More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1
                                items:
                                  type: string
                                type: array
                                x-kubernetes-list-type: atomic
                              allocatedResourceStatuses:
                                additionalProperties:
                                  description: |-
                                    When a controller receives persistentvolume claim update with ClaimResourceStatus for a resource
                                    that it does not recognizes, then it should ignore that update and let other controllers
                                    handle it.
                                  type: string
                                description: "allocatedResourceStatuses stores status
                                  of resource being resized for the given PVC.\nKey
                                  names follow standard Kubernetes label syntax. Valid
                                  values are either:\n\t* Un-prefixed keys:\n\t\t-
                                  storage - the capacity of the volume.\n\t* Custom
                                  resources must use implementation-defined prefixed
                                  names such as \"example.com/my-custom-resource\"\nApart
                                  from above values - keys that are unprefixed or
                                  have kubernetes.io prefix are considered\nreserved
                                  and hence may not be used.\n\nClaimResourceStatus
                                  can be in any of following states:\n\t- ControllerResizeInProgress:\n\t\tState
                                  set when resize controller starts resizing the volume
                                  in control-plane.\n\t- ControllerResizeFailed:\n\t\tState
                                  set when resize has failed in resize controller
                                  with a terminal error.\n\t- NodeResizePending:\n\t\tState
                                  set when resize controller has finished resizing
                                  the volume but further resizing of\n\t\tvolume is
                                  needed on the node.\n\t- NodeResizeInProgress:\n\t\tState
                                  set when kubelet starts resizing the volume.\n\t-
                                  NodeResizeFailed:\n\t\tState set when resizing has
                                  failed in kubelet with a terminal error. Transient
                                  errors don't set\n\t\tNodeResizeFailed.\nFor example:
                                  if expanding a PVC for more capacity - this field
                                  can be one of the following states:\n\t- pvc.status.allocatedResourceStatus['storage']
                                  = \"ControllerResizeInProgress\"\n     - pvc.status.allocatedResourceStatus['storage']
                                  = \"ControllerResizeFailed\"\n     - pvc.status.allocatedResourceStatus['storage']
                                  = \"NodeResizePending\"\n     - pvc.status.allocatedResourceStatus['storage']
                                  = \"NodeResizeInProgress\"\n     - pvc.status.allocatedResourceStatus['storage']
                                  = \"NodeResizeFailed\"\nWhen this field is not set,
                                  it means that no resize operation is in progress
                                  for the given PVC.\n\nA controller that receives
                                  PVC update with previously unknown resourceName
                                  or ClaimResourceStatus\nshould ignore the update
                                  for the purpose it was designed. For example - a
                                  controller that\nonly is responsible for resizing
                                  capacity of the volume, should ignore PVC updates
                                  that change other valid\nresources associated with
                                  PVC.\n\nThis is an alpha field and requires enabling
                                  RecoverVolumeExpansionFailure feature."
                                type: object
                                x-kubernetes-map-type: granular
                              allocatedResources:
                                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: "allocatedResources tracks the resources
                                  allocated to a PVC including its capacity.\nKey
                                  names follow standard Kubernetes label syntax. Valid
                                  values are either:\n\t* Un-prefixed keys:\n\t\t-
                                  storage - the capacity of the volume.\n\t* Custom
                                  resources must use implementation-defined prefixed
                                  names such as \"example.com/my-custom-resource\"\nApart
                                  from above values - keys that are unprefixed or
                                  have kubernetes.io prefix are considered\nreserved
                                  and hence may not be used.\n\nCapacity reported
                                  here may be larger than the actual capacity when
                                  a volume expansion operation\nis requested.\nFor
                                  storage quota, the larger value from allocatedResources
                                  and PVC.spec.resources is used.\nIf allocatedResources
                                  is not set, PVC.spec.resources alone is used for
                                  quota calculation.\nIf a volume expansion capacity
                                  request is lowered, allocatedResources is only\nlowered
                                  if there are no expansion operations in progress
                                  and if the actual volume capacity\nis equal or lower
                                  than the requested capacity.\n\nA controller that
                                  receives PVC update with previously unknown resourceName\nshould
                                  ignore the update for the purpose it was designed.
                                  For example - a controller that\nonly is responsible
                                  for resizing capacity of the volume, should ignore
                                  PVC updates that change other valid\nresources associated
                                  with PVC.\n\nThis is an alpha field and requires
                                  enabling RecoverVolumeExpansionFailure feature."
                                type: object
                              capacity:
                                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: capacity represents the actual resources
                                  of the underlying volume.
                                type: object
                              conditions:
                                description: |-
                                  conditions is the current Condition of persistent volume claim. If underlying persistent volume is being
                                  resized then the Condition will be set to 'Resizing'.
                                items:
                                  description: PersistentVolumeClaimCondition contains
                                    details about state of pvc
                                  properties:
                                    lastProbeTime:
                                      description: lastProbeTime is the time we probed
                                        the condition.
                                      format: date-time
                                      type: string
                                    lastTransitionTime:
                                      description: lastTransitionTime is the time
                                        the condition transitioned from one status
                                        to another.
                                      format: date-time
                                      type: string
                                    message:
                                      description: message is the human-readable message
                                        indicating details about last transition.
                                      type: string
                                    reason:
                                      description: |-
                                        reason is a unique, this should be a short, machine understandable string that gives the reason
                                        for condition's last transition. If it reports "Resizing" that means the underlying
                                        persistent volume is being resized.
                                      type: string
                                    status:
                                      description: |-
                                        Status is the status of the condition.
                                        Can be True, False, Unknown.
                                        More info: https://kubernetes.io/docs/reference/kubernetes-api/config-and-storage-resources/persistent-volume-claim-v1/#:~:text=state%20of%20pvc-,conditions.status,-(string)%2C%20required
                                      type: string
                                    type:
                                      description: |-
                                        Type is the type of the condition.
                                        More info: https://kubernetes.io/docs/reference/kubernetes-api/config-and-storage-resources/persistent-volume-claim-v1/#:~:text=set%20to%20%27ResizeStarted%27.-,PersistentVolumeClaimCondition,-contains%20details%20about
                                      type: string
                                  required:
                                  - status
                                  - type
                                  type: object
                                type: array
                                x-kubernetes-list-map-keys:
                                - type
                                x-kubernetes-list-type: map
                              currentVolumeAttributesClassName:
                                description: |-
                                  currentVolumeAttributesClassName is the current name of the VolumeAttributesClass the PVC is using.
                                  When unset, there is no VolumeAttributeClass applied to this PersistentVolumeClaim
                                  This is a beta field and requires enabling VolumeAttributesClass feature (off by default).
                                type: string
                              modifyVolumeStatus:
                                description: |-
                                  ModifyVolumeStatus represents the status object of ControllerModifyVolume operation.
                                  When this is unset, there is no ModifyVolume operation being attempted.
                                  This is a beta field and requires enabling VolumeAttributesClass feature (off by default).
                                properties:
                                  status:
                                    description: "status is the status of the ControllerModifyVolume
                                      operation. It can be in any of following states:\n
                                      - Pending\n   Pending indicates that the PersistentVolumeClaim
                                      cannot be modified due to unmet requirements,
                                      such as\n   the specified VolumeAttributesClass
                                      not existing.\n - InProgress\n   InProgress
                                      indicates that the volume is being modified.\n
                                      - Infeasible\n  Infeasible indicates that the
                                      request has been rejected as invalid by the
                                      CSI driver. To\n\t  resolve the error, a valid
                                      VolumeAttributesClass needs to be specified.\nNote:
                                      New statuses can be added in the future. Consumers
                                      should check for unknown statuses and fail appropriately."
                                    type: string
                                  targetVolumeAttributesClassName:
                                    description: targetVolumeAttributesClassName is
                                      the name of the VolumeAttributesClass the PVC
                                      currently being reconciled
                                    type: string
                                required:
                                - status
                                type: object
                              phase:
                                description: phase represents the current phase of
                                  PersistentVolumeClaim.
                                type: string
                            type: object
                        type: object
                    type: object
                  cephObjectStoreUsers:
                    description: ManageCephObjectStoreUsers defines how to reconcile
                      CephObjectStoreUsers
                    properties:
                      reconcileStrategy:
                        type: string
                    type: object
                  cephObjectStores:
                    description: ManageCephObjectStores defines how to reconcile CephObjectStores
                    properties:
                      dataPoolSpec:
                        description: DataPoolSpec specifies the pool specification
                          for the default cephObjectStore data pool
                        properties:
                          application:
                            description: The application name to set on the pool.
                              Only expected to be set for rgw pools.
                            type: string
                          compressionMode:
                            description: |-
                              DEPRECATED: use Parameters instead, e.g., Parameters["compression_mode"] = "force"
                              The inline compression mode in Bluestore OSD to set to (options are: none, passive, aggressive, force)
                              Do NOT set a default value for kubebuilder as this will override the Parameters
                            enum:
                            - none
                            - passive
                            - aggressive
                            - force
                            - ""
                            nullable: true
                            type: string
                          crushRoot:
                            description: The root of the crush hierarchy utilized
                              by the pool
                            nullable: true
                            type: string
                          deviceClass:
                            description: The device class the OSD should set to for
                              use in the pool
                            nullable: true
                            type: string
                          enableCrushUpdates:
                            description: Allow rook operator to change the pool CRUSH
                              tunables once the pool is created
                            type: boolean
                          enableRBDStats:
                            description: EnableRBDStats is used to enable gathering
                              of statistics for all RBD images in the pool
                            type: boolean
                          erasureCoded:
                            description: The erasure code settings
                            properties:
                              algorithm:
                                description: The algorithm for erasure coding
                                type: string
                              codingChunks:
                                description: |-
                                  Number of coding chunks per object in an erasure coded storage pool (required for erasure-coded pool type).
                                  This is the number of OSDs that can be lost simultaneously before data cannot be recovered.
                                minimum: 0
                                type: integer
                              dataChunks:
                                description: |-
                                  Number of data chunks per object in an erasure coded storage pool (required for erasure-coded pool type).
                                  The number of chunks required to recover an object when any single OSD is lost is the same
                                  as dataChunks so be aware that the larger the number of data chunks, the higher the cost of recovery.
                                minimum: 0
                                type: integer
                            required:
                            - codingChunks
                            - dataChunks
                            type: object
                          failureDomain:
                            description: 'The failure domain: osd/host/(region or
                              zone if available) - technically also any type in the
                              crush map'
                            type: string
                          mirroring:
                            description: The mirroring settings
                            properties:
                              enabled:
                                description: Enabled whether this pool is mirrored
                                  or not
                                type: boolean
                              mode:
                                description: 'Mode is the mirroring mode: either pool
                                  or image'
                                type: string
                              peers:
                                description: Peers represents the peers spec
                                nullable: true
                                properties:
                                  secretNames:
                                    description: SecretNames represents the Kubernetes
                                      Secret names to add rbd-mirror or cephfs-mirror
                                      peers
                                    items:
                                      type: string
                                    type: array
                                type: object
                              snapshotSchedules:
                                description: SnapshotSchedules is the scheduling of
                                  snapshot for mirrored images/pools
                                items:
                                  description: SnapshotScheduleSpec represents the
                                    snapshot scheduling settings of a mirrored pool
                                  properties:
                                    interval:
                                      description: Interval represent the periodicity
                                        of the snapshot.
                                      type: string
                                    path:
                                      description: Path is the path to snapshot, only
                                        valid for CephFS
                                      type: string
                                    startTime:
                                      description: StartTime indicates when to start
                                        the snapshot
                                      type: string
                                  type: object
                                type: array
                            type: object
                          parameters:
                            additionalProperties:
                              type: string
                            description: Parameters is a list of properties to enable
                              on a given pool
                            nullable: true
                            type: object
                            x-kubernetes-preserve-unknown-fields: true
                          quotas:
                            description: The quota settings
                            nullable: true
                            properties:
                              maxBytes:
                                description: |-
                                  MaxBytes represents the quota in bytes
                                  Deprecated in favor of MaxSize
                                format: int64
                                type: integer
                              maxObjects:
                                description: MaxObjects represents the quota in objects
                                format: int64
                                type: integer
                              maxSize:
                                description: MaxSize represents the quota in bytes
                                  as a string
                                pattern: ^[0-9]+[\.]?[0-9]*([KMGTPE]i|[kMGTPE])?$
                                type: string
                            type: object
                          replicated:
                            description: The replication settings
                            properties:
                              hybridStorage:
                                description: HybridStorage represents hybrid storage
                                  tier settings
                                nullable: true
                                properties:
                                  primaryDeviceClass:
                                    description: PrimaryDeviceClass represents high
                                      performance tier (for example SSD or NVME) for
                                      Primary OSD
                                    minLength: 1
                                    type: string
                                  secondaryDeviceClass:
                                    description: SecondaryDeviceClass represents low
                                      performance tier (for example HDDs) for remaining
                                      OSDs
                                    minLength: 1
                                    type: string
                                required:
                                - primaryDeviceClass
                                - secondaryDeviceClass
                                type: object
                              replicasPerFailureDomain:
                                description: ReplicasPerFailureDomain the number of
                                  replica in the specified failure domain
                                minimum: 1
                                type: integer
                              requireSafeReplicaSize:
                                description: RequireSafeReplicaSize if false allows
                                  you to set replica 1
                                type: boolean
                              size:
                                description: Size - Number of copies per object in
                                  a replicated storage pool, including the object
                                  itself (required for replicated pool type)
                                minimum: 0
                                type: integer
                              subFailureDomain:
                                description: SubFailureDomain the name of the sub-failure
                                  domain
                                type: string
                              targetSizeRatio:
                                description: TargetSizeRatio gives a hint (%) to Ceph
                                  in terms of expected consumption of the total cluster
                                  capacity
                                type: number
                            required:
                            - size
                            type: object
                          statusCheck:
                            description: The mirroring statusCheck
                            properties:
                              mirror:
                                description: HealthCheckSpec represents the health
                                  check of an object store bucket
                                nullable: true
                                properties:
                                  disabled:
                                    type: boolean
                                  interval:
                                    description: Interval is the internal in second
                                      or minute for the health check to run like 60s
                                      for 60 seconds
                                    type: string
                                  timeout:
                                    type: string
                                type: object
                            type: object
                            x-kubernetes-preserve-unknown-fields: true
                        type: object
                      disableRoute:
                        type: boolean
                      disableStorageClass:
                        type: boolean
                      gatewayInstances:
                        type: integer
                      hostNetwork:
                        type: boolean
                      metadataPoolSpec:
                        description: MetadataPoolSpec specifies the pool specification
                          for the default cephObjectStore metadata pool
                        properties:
                          application:
                            description: The application name to set on the pool.
                              Only expected to be set for rgw pools.
                            type: string
                          compressionMode:
                            description: |-
                              DEPRECATED: use Parameters instead, e.g., Parameters["compression_mode"] = "force"
                              The inline compression mode in Bluestore OSD to set to (options are: none, passive, aggressive, force)
                              Do NOT set a default value for kubebuilder as this will override the Parameters
                            enum:
                            - none
                            - passive
                            - aggressive
                            - force
                            - ""
                            nullable: true
                            type: string
                          crushRoot:
                            description: The root of the crush hierarchy utilized
                              by the pool
                            nullable: true
                            type: string
                          deviceClass:
                            description: The device class the OSD should set to for
                              use in the pool
                            nullable: true
                            type: string
                          enableCrushUpdates:
                            description: Allow rook operator to change the pool CRUSH
                              tunables once the pool is created
                            type: boolean
                          enableRBDStats:
                            description: EnableRBDStats is used to enable gathering
                              of statistics for all RBD images in the pool
                            type: boolean
                          erasureCoded:
                            description: The erasure code settings
                            properties:
                              algorithm:
                                description: The algorithm for erasure coding
                                type: string
                              codingChunks:
                                description: |-
                                  Number of coding chunks per object in an erasure coded storage pool (required for erasure-coded pool type).
                                  This is the number of OSDs that can be lost simultaneously before data cannot be recovered.
                                minimum: 0
                                type: integer
                              dataChunks:
                                description: |-
                                  Number of data chunks per object in an erasure coded storage pool (required for erasure-coded pool type).
                                  The number of chunks required to recover an object when any single OSD is lost is the same
                                  as dataChunks so be aware that the larger the number of data chunks, the higher the cost of recovery.
                                minimum: 0
                                type: integer
                            required:
                            - codingChunks
                            - dataChunks
                            type: object
                          failureDomain:
                            description: 'The failure domain: osd/host/(region or
                              zone if available) - technically also any type in the
                              crush map'
                            type: string
                          mirroring:
                            description: The mirroring settings
                            properties:
                              enabled:
                                description: Enabled whether this pool is mirrored
                                  or not
                                type: boolean
                              mode:
                                description: 'Mode is the mirroring mode: either pool
                                  or image'
                                type: string
                              peers:
                                description: Peers represents the peers spec
                                nullable: true
                                properties:
                                  secretNames:
                                    description: SecretNames represents the Kubernetes
                                      Secret names to add rbd-mirror or cephfs-mirror
                                      peers
                                    items:
                                      type: string
                                    type: array
                                type: object
                              snapshotSchedules:
                                description: SnapshotSchedules is the scheduling of
                                  snapshot for mirrored images/pools
                                items:
                                  description: SnapshotScheduleSpec represents the
                                    snapshot scheduling settings of a mirrored pool
                                  properties:
                                    interval:
                                      description: Interval represent the periodicity
                                        of the snapshot.
                                      type: string
                                    path:
                                      description: Path is the path to snapshot, only
                                        valid for CephFS
                                      type: string
                                    startTime:
                                      description: StartTime indicates when to start
                                        the snapshot
                                      type: string
                                  type: object
                                type: array
                            type: object
                          parameters:
                            additionalProperties:
                              type: string
                            description: Parameters is a list of properties to enable
                              on a given pool
                            nullable: true
                            type: object
                            x-kubernetes-preserve-unknown-fields: true
                          quotas:
                            description: The quota settings
                            nullable: true
                            properties:
                              maxBytes:
                                description: |-
                                  MaxBytes represents the quota in bytes
                                  Deprecated in favor of MaxSize
                                format: int64
                                type: integer
                              maxObjects:
                                description: MaxObjects represents the quota in objects
                                format: int64
                                type: integer
                              maxSize:
                                description: MaxSize represents the quota in bytes
                                  as a string
                                pattern: ^[0-9]+[\.]?[0-9]*([KMGTPE]i|[kMGTPE])?$
                                type: string
                            type: object
                          replicated:
                            description: The replication settings
                            properties:
                              hybridStorage:
                                description: HybridStorage represents hybrid storage
                                  tier settings
                                nullable: true
                                properties:
                                  primaryDeviceClass:
                                    description: PrimaryDeviceClass represents high
                                      performance tier (for example SSD or NVME) for
                                      Primary OSD
                                    minLength: 1
                                    type: string
                                  secondaryDeviceClass:
                                    description: SecondaryDeviceClass represents low
                                      performance tier (for example HDDs) for remaining
                                      OSDs
                                    minLength: 1
                                    type: string
                                required:
                                - primaryDeviceClass
                                - secondaryDeviceClass
                                type: object
                              replicasPerFailureDomain:
                                description: ReplicasPerFailureDomain the number of
                                  replica in the specified failure domain
                                minimum: 1
                                type: integer
                              requireSafeReplicaSize:
                                description: RequireSafeReplicaSize if false allows
                                  you to set replica 1
                                type: boolean
                              size:
                                description: Size - Number of copies per object in
                                  a replicated storage pool, including the object
                                  itself (required for replicated pool type)
                                minimum: 0
                                type: integer
                              subFailureDomain:
                                description: SubFailureDomain the name of the sub-failure
                                  domain
                                type: string
                              targetSizeRatio:
                                description: TargetSizeRatio gives a hint (%) to Ceph
                                  in terms of expected consumption of the total cluster
                                  capacity
                                type: number
                            required:
                            - size
                            type: object
                          statusCheck:
                            description: The mirroring statusCheck
                            properties:
                              mirror:
                                description: HealthCheckSpec represents the health
                                  check of an object store bucket
                                nullable: true
                                properties:
                                  disabled:
                                    type: boolean
                                  interval:
                                    description: Interval is the internal in second
                                      or minute for the health check to run like 60s
                                      for 60 seconds
                                    type: string
                                  timeout:
                                    type: string
                                type: object
                            type: object
                            x-kubernetes-preserve-unknown-fields: true
                        type: object
                      reconcileStrategy:
                        type: string
                      storageClassName:
                        description: StorageClassName specifies the name of the storage
                          class created for ceph obc's
                        maxLength: 253
                        pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
                        type: string
                    type: object
                  cephRBDMirror:
                    description: ManageCephRBDMirror defines how to reconcile Ceph
                      RBDMirror
                    properties:
                      daemonCount:
                        minimum: 1
                        type: integer
                      reconcileStrategy:
                        type: string
                    type: object
                  cephToolbox:
                    description: ManageCephToolbox defines how to reconcile Ceph toolbox
                    properties:
                      reconcileStrategy:
                        type: string
                    type: object
                type: object
              mgr:
                description: MgrSpec defines the settings for the Ceph Manager
                properties:
                  enableActivePassive:
                    description: |-
                      EnableActivePassive can be set as true to deploy 2 ceph manager pods, one active and one standby
                      Ceph will promote the standby mgr when the active mgr goes down due to any reason
                    type: boolean
                type: object
              mirroring:
                description: |-
                  Mirroring specifies data mirroring configuration for the storage cluster.
                  This configuration will only be applied to resources managed by the operator.
                properties:
                  enabled:
                    description: |-
                      If true, data mirroring is enabled for the StorageCluster.
                      This configuration will only be applied to resources (such as CephBlockPool)
                      managed by the operator.
                      It is optional and defaults to false.
                    type: boolean
                  peerSecretNames:
                    description: PeerSecretNames represents the Kubernetes Secret
                      names of rbd-mirror peers tokens
                    items:
                      type: string
                    type: array
                type: object
              monDataDirHostPath:
                type: string
              monPVCTemplate:
                description: PersistentVolumeClaim is a user's request for and claim
                  to a persistent volume
                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:
                    description: |-
                      Standard object's metadata.
                      More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
                    properties:
                      annotations:
                        additionalProperties:
                          type: string
                        type: object
                      finalizers:
                        items:
                          type: string
                        type: array
                      labels:
                        additionalProperties:
                          type: string
                        type: object
                      name:
                        type: string
                      namespace:
                        type: string
                    type: object
                  spec:
                    description: |-
                      spec defines the desired characteristics of a volume requested by a pod author.
                      More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims
                    properties:
                      accessModes:
                        description: |-
                          accessModes contains the desired access modes the volume should have.
                          More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1
                        items:
                          type: string
                        type: array
                        x-kubernetes-list-type: atomic
                      dataSource:
                        description: |-
                          dataSource field can be used to specify either:
                          * An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot)
                          * An existing PVC (PersistentVolumeClaim)
                          If the provisioner or an external controller can support the specified data source,
                          it will create a new volume based on the contents of the specified data source.
                          When the AnyVolumeDataSource feature gate is enabled, dataSource contents will be copied to dataSourceRef,
                          and dataSourceRef contents will be copied to dataSource when dataSourceRef.namespace is not specified.
                          If the namespace is specified, then dataSourceRef will not be copied to dataSource.
                        properties:
                          apiGroup:
                            description: |-
                              APIGroup is the group for the resource being referenced.
                              If APIGroup is not specified, the specified Kind must be in the core API group.
                              For any other third-party types, APIGroup is required.
                            type: string
                          kind:
                            description: Kind is the type of resource being referenced
                            type: string
                          name:
                            description: Name is the name of resource being referenced
                            type: string
                        required:
                        - kind
                        - name
                        type: object
                        x-kubernetes-map-type: atomic
                      dataSourceRef:
                        description: |-
                          dataSourceRef specifies the object from which to populate the volume with data, if a non-empty
                          volume is desired. This may be any object from a non-empty API group (non
                          core object) or a PersistentVolumeClaim object.
                          When this field is specified, volume binding will only succeed if the type of
                          the specified object matches some installed volume populator or dynamic
                          provisioner.
                          This field will replace the functionality of the dataSource field and as such
                          if both fields are non-empty, they must have the same value. For backwards
                          compatibility, when namespace isn't specified in dataSourceRef,
                          both fields (dataSource and dataSourceRef) will be set to the same
                          value automatically if one of them is empty and the other is non-empty.
                          When namespace is specified in dataSourceRef,
                          dataSource isn't set to the same value and must be empty.
                          There are three important differences between dataSource and dataSourceRef:
                          * While dataSource only allows two specific types of objects, dataSourceRef
                            allows any non-core object, as well as PersistentVolumeClaim objects.
                          * While dataSource ignores disallowed values (dropping them), dataSourceRef
                            preserves all values, and generates an error if a disallowed value is
                            specified.
                          * While dataSource only allows local objects, dataSourceRef allows objects
                            in any namespaces.
                          (Beta) Using this field requires the AnyVolumeDataSource feature gate to be enabled.
                          (Alpha) Using the namespace field of dataSourceRef requires the CrossNamespaceVolumeDataSource feature gate to be enabled.
                        properties:
                          apiGroup:
                            description: |-
                              APIGroup is the group for the resource being referenced.
                              If APIGroup is not specified, the specified Kind must be in the core API group.
                              For any other third-party types, APIGroup is required.
                            type: string
                          kind:
                            description: Kind is the type of resource being referenced
                            type: string
                          name:
                            description: Name is the name of resource being referenced
                            type: string
                          namespace:
                            description: |-
                              Namespace is the namespace of resource being referenced
                              Note that when a namespace is specified, a gateway.networking.k8s.io/ReferenceGrant object is required in the referent namespace to allow that namespace's owner to accept the reference. See the ReferenceGrant documentation for details.
                              (Alpha) This field requires the CrossNamespaceVolumeDataSource feature gate to be enabled.
                            type: string
                        required:
                        - kind
                        - name
                        type: object
                      resources:
                        description: |-
                          resources represents the minimum resources the volume should have.
                          If RecoverVolumeExpansionFailure feature is enabled users are allowed to specify resource requirements
                          that are lower than previous value but must still be higher than capacity recorded in the
                          status field of the claim.
                          More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources
                        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-resources-containers/
                            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. Requests cannot exceed Limits.
                              More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
                            type: object
                        type: object
                      selector:
                        description: selector is a label query over volumes to consider
                          for binding.
                        properties:
                          matchExpressions:
                            description: matchExpressions is a list of label selector
                              requirements. The requirements are ANDed.
                            items:
                              description: |-
                                A label selector requirement is a selector that contains values, a key, and an operator that
                                relates the key and values.
                              properties:
                                key:
                                  description: key is the label key that the selector
                                    applies to.
                                  type: string
                                operator:
                                  description: |-
                                    operator represents a key's relationship to a set of values.
                                    Valid operators are In, NotIn, Exists and DoesNotExist.
                                  type: string
                                values:
                                  description: |-
                                    values is an array of string values. If the operator is In or NotIn,
                                    the values array must be non-empty. If the operator is Exists or DoesNotExist,
                                    the values array must be empty. This array is replaced during a strategic
                                    merge patch.
                                  items:
                                    type: string
                                  type: array
                                  x-kubernetes-list-type: atomic
                              required:
                              - key
                              - operator
                              type: object
                            type: array
                            x-kubernetes-list-type: atomic
                          matchLabels:
                            additionalProperties:
                              type: string
                            description: |-
                              matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
                              map is equivalent to an element of matchExpressions, whose key field is "key", the
                              operator is "In", and the values array contains only "value". The requirements are ANDed.
                            type: object
                        type: object
                        x-kubernetes-map-type: atomic
                      storageClassName:
                        description: |-
                          storageClassName is the name of the StorageClass required by the claim.
                          More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1
                        type: string
                      volumeAttributesClassName:
                        description: |-
                          volumeAttributesClassName may be used to set the VolumeAttributesClass used by this claim.
                          If specified, the CSI driver will create or update the volume with the attributes defined
                          in the corresponding VolumeAttributesClass. This has a different purpose than storageClassName,
                          it can be changed after the claim is created. An empty string value means that no VolumeAttributesClass
                          will be applied to the claim but it's not allowed to reset this field to empty string once it is set.
                          If unspecified and the PersistentVolumeClaim is unbound, the default VolumeAttributesClass
                          will be set by the persistentvolume controller if it exists.
                          If the resource referred to by volumeAttributesClass does not exist, this PersistentVolumeClaim will be
                          set to a Pending state, as reflected by the modifyVolumeStatus field, until such as a resource
                          exists.
                          More info: https://kubernetes.io/docs/concepts/storage/volume-attributes-classes/
                          (Beta) Using this field requires the VolumeAttributesClass feature gate to be enabled (off by default).
                        type: string
                      volumeMode:
                        description: |-
                          volumeMode defines what type of volume is required by the claim.
                          Value of Filesystem is implied when not included in claim spec.
                        type: string
                      volumeName:
                        description: volumeName is the binding reference to the PersistentVolume
                          backing this claim.
                        type: string
                    type: object
                  status:
                    description: |-
                      status represents the current information/status of a persistent volume claim.
                      Read-only.
                      More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims
                    properties:
                      accessModes:
                        description: |-
                          accessModes contains the actual access modes the volume backing the PVC has.
                          More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1
                        items:
                          type: string
                        type: array
                        x-kubernetes-list-type: atomic
                      allocatedResourceStatuses:
                        additionalProperties:
                          description: |-
                            When a controller receives persistentvolume claim update with ClaimResourceStatus for a resource
                            that it does not recognizes, then it should ignore that update and let other controllers
                            handle it.
                          type: string
                        description: "allocatedResourceStatuses stores status of resource
                          being resized for the given PVC.\nKey names follow standard
                          Kubernetes label syntax. Valid values are either:\n\t* Un-prefixed
                          keys:\n\t\t- storage - the capacity of the volume.\n\t*
                          Custom resources must use implementation-defined prefixed
                          names such as \"example.com/my-custom-resource\"\nApart
                          from above values - keys that are unprefixed or have kubernetes.io
                          prefix are considered\nreserved and hence may not be used.\n\nClaimResourceStatus
                          can be in any of following states:\n\t- ControllerResizeInProgress:\n\t\tState
                          set when resize controller starts resizing the volume in
                          control-plane.\n\t- ControllerResizeFailed:\n\t\tState set
                          when resize has failed in resize controller with a terminal
                          error.\n\t- NodeResizePending:\n\t\tState set when resize
                          controller has finished resizing the volume but further
                          resizing of\n\t\tvolume is needed on the node.\n\t- NodeResizeInProgress:\n\t\tState
                          set when kubelet starts resizing the volume.\n\t- NodeResizeFailed:\n\t\tState
                          set when resizing has failed in kubelet with a terminal
                          error. Transient errors don't set\n\t\tNodeResizeFailed.\nFor
                          example: if expanding a PVC for more capacity - this field
                          can be one of the following states:\n\t- pvc.status.allocatedResourceStatus['storage']
                          = \"ControllerResizeInProgress\"\n     - pvc.status.allocatedResourceStatus['storage']
                          = \"ControllerResizeFailed\"\n     - pvc.status.allocatedResourceStatus['storage']
                          = \"NodeResizePending\"\n     - pvc.status.allocatedResourceStatus['storage']
                          = \"NodeResizeInProgress\"\n     - pvc.status.allocatedResourceStatus['storage']
                          = \"NodeResizeFailed\"\nWhen this field is not set, it means
                          that no resize operation is in progress for the given PVC.\n\nA
                          controller that receives PVC update with previously unknown
                          resourceName or ClaimResourceStatus\nshould ignore the update
                          for the purpose it was designed. For example - a controller
                          that\nonly is responsible for resizing capacity of the volume,
                          should ignore PVC updates that change other valid\nresources
                          associated with PVC.\n\nThis is an alpha field and requires
                          enabling RecoverVolumeExpansionFailure feature."
                        type: object
                        x-kubernetes-map-type: granular
                      allocatedResources:
                        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: "allocatedResources tracks the resources allocated
                          to a PVC including its capacity.\nKey names follow standard
                          Kubernetes label syntax. Valid values are either:\n\t* Un-prefixed
                          keys:\n\t\t- storage - the capacity of the volume.\n\t*
                          Custom resources must use implementation-defined prefixed
                          names such as \"example.com/my-custom-resource\"\nApart
                          from above values - keys that are unprefixed or have kubernetes.io
                          prefix are considered\nreserved and hence may not be used.\n\nCapacity
                          reported here may be larger than the actual capacity when
                          a volume expansion operation\nis requested.\nFor storage
                          quota, the larger value from allocatedResources and PVC.spec.resources
                          is used.\nIf allocatedResources is not set, PVC.spec.resources
                          alone is used for quota calculation.\nIf a volume expansion
                          capacity request is lowered, allocatedResources is only\nlowered
                          if there are no expansion operations in progress and if
                          the actual volume capacity\nis equal or lower than the requested
                          capacity.\n\nA controller that receives PVC update with
                          previously unknown resourceName\nshould ignore the update
                          for the purpose it was designed. For example - a controller
                          that\nonly is responsible for resizing capacity of the volume,
                          should ignore PVC updates that change other valid\nresources
                          associated with PVC.\n\nThis is an alpha field and requires
                          enabling RecoverVolumeExpansionFailure feature."
                        type: object
                      capacity:
                        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: capacity represents the actual resources of the
                          underlying volume.
                        type: object
                      conditions:
                        description: |-
                          conditions is the current Condition of persistent volume claim. If underlying persistent volume is being
                          resized then the Condition will be set to 'Resizing'.
                        items:
                          description: PersistentVolumeClaimCondition contains details
                            about state of pvc
                          properties:
                            lastProbeTime:
                              description: lastProbeTime is the time we probed the
                                condition.
                              format: date-time
                              type: string
                            lastTransitionTime:
                              description: lastTransitionTime is the time the condition
                                transitioned from one status to another.
                              format: date-time
                              type: string
                            message:
                              description: message is the human-readable message indicating
                                details about last transition.
                              type: string
                            reason:
                              description: |-
                                reason is a unique, this should be a short, machine understandable string that gives the reason
                                for condition's last transition. If it reports "Resizing" that means the underlying
                                persistent volume is being resized.
                              type: string
                            status:
                              description: |-
                                Status is the status of the condition.
                                Can be True, False, Unknown.
                                More info: https://kubernetes.io/docs/reference/kubernetes-api/config-and-storage-resources/persistent-volume-claim-v1/#:~:text=state%20of%20pvc-,conditions.status,-(string)%2C%20required
                              type: string
                            type:
                              description: |-
                                Type is the type of the condition.
                                More info: https://kubernetes.io/docs/reference/kubernetes-api/config-and-storage-resources/persistent-volume-claim-v1/#:~:text=set%20to%20%27ResizeStarted%27.-,PersistentVolumeClaimCondition,-contains%20details%20about
                              type: string
                          required:
                          - status
                          - type
                          type: object
                        type: array
                        x-kubernetes-list-map-keys:
                        - type
                        x-kubernetes-list-type: map
                      currentVolumeAttributesClassName:
                        description: |-
                          currentVolumeAttributesClassName is the current name of the VolumeAttributesClass the PVC is using.
                          When unset, there is no VolumeAttributeClass applied to this PersistentVolumeClaim
                          This is a beta field and requires enabling VolumeAttributesClass feature (off by default).
                        type: string
                      modifyVolumeStatus:
                        description: |-
                          ModifyVolumeStatus represents the status object of ControllerModifyVolume operation.
                          When this is unset, there is no ModifyVolume operation being attempted.
                          This is a beta field and requires enabling VolumeAttributesClass feature (off by default).
                        properties:
                          status:
                            description: "status is the status of the ControllerModifyVolume
                              operation. It can be in any of following states:\n -
                              Pending\n   Pending indicates that the PersistentVolumeClaim
                              cannot be modified due to unmet requirements, such as\n
                              \  the specified VolumeAttributesClass not existing.\n
                              - InProgress\n   InProgress indicates that the volume
                              is being modified.\n - Infeasible\n  Infeasible indicates
                              that the request has been rejected as invalid by the
                              CSI driver. To\n\t  resolve the error, a valid VolumeAttributesClass
                              needs to be specified.\nNote: New statuses can be added
                              in the future. Consumers should check for unknown statuses
                              and fail appropriately."
                            type: string
                          targetVolumeAttributesClassName:
                            description: targetVolumeAttributesClassName is the name
                              of the VolumeAttributesClass the PVC currently being
                              reconciled
                            type: string
                        required:
                        - status
                        type: object
                      phase:
                        description: phase represents the current phase of PersistentVolumeClaim.
                        type: string
                    type: object
                type: object
              monitoring:
                description: Monitoring controls the configuration of resources for
                  exposing OCS metrics
                properties:
                  labels:
                    additionalProperties:
                      type: string
                    description: |-
                      Labels to add to monitoring resources created by operator.
                      These labels are used as LabelSelector for Prometheus
                    type: object
                  reconcileStrategy:
                    type: string
                type: object
              multiCloudGateway:
                description: MultiCloudGatewaySpec defines specific multi-cloud gateway
                  configuration options
                properties:
                  dbStorageClassName:
                    description: |-
                      DbStorageClassName specifies the default storage class
                      for nooba-db pods
                    type: string
                  denyHTTP:
                    description: DenyHTTP (optional) if given will deny access to
                      the NooBaa S3 service using HTTP (only HTTPS)
                    type: boolean
                  disableLoadBalancerService:
                    description: DisableLoadBalancerService (optional) sets the service
                      type to ClusterIP instead of LoadBalancer
                    nullable: true
                    type: boolean
                  endpoints:
                    description: |-
                      Endpoints (optional) sets configuration info for the noobaa endpoint
                      deployment.
                    properties:
                      additionalVirtualHosts:
                        description: |-
                          AdditionalVirtualHosts (optional) provide a list of additional hostnames
                          (on top of the builtin names defined by the cluster: service name, elb name, route name)
                          to be used as virtual hosts by the the endpoints in the endpoint deployment
                        items:
                          type: string
                        type: array
                      maxCount:
                        description: |-
                          MaxCount, the number of endpoint instances (pods)
                          to be used as the upper bound when autoscaling
                        format: int32
                        type: integer
                      minCount:
                        description: |-
                          MinCount, the number of endpoint instances (pods)
                          to be used as the lower bound when autoscaling
                        format: int32
                        type: integer
                      resources:
                        description: Resources (optional) overrides the default resource
                          requirements for every endpoint pod
                        properties:
                          claims:
                            description: |-
                              Claims lists the names of resources, defined in spec.resourceClaims,
                              that are used by this container.

                              This is an alpha field and requires enabling the
                              DynamicResourceAllocation feature gate.

                              This field is immutable. It can only be set for containers.
                            items:
                              description: ResourceClaim references one entry in PodSpec.ResourceClaims.
                              properties:
                                name:
                                  description: |-
                                    Name must match the name of one entry in pod.spec.resourceClaims of
                                    the Pod where this field is used. It makes that resource available
                                    inside a container.
                                  type: string
                                request:
                                  description: |-
                                    Request is the name chosen for a request in the referenced claim.
                                    If empty, everything from the claim is made available, otherwise
                                    only the result of this request.
                                  type: string
                              required:
                              - name
                              type: object
                            type: array
                            x-kubernetes-list-map-keys:
                            - name
                            x-kubernetes-list-type: map
                          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-resources-containers/
                            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. Requests cannot exceed Limits.
                              More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
                            type: object
                        type: object
                    type: object
                  externalPgConfig:
                    description: Allows Noobaa to connect to an external Postgres
                      server
                    properties:
                      allowSelfSignedCerts:
                        description: AllowSelfSignedCerts will allow the Postgres
                          server to use self signed certificates to authenticate
                        type: boolean
                      enableTls:
                        description: EnableTLS will allow the postgres server to connect
                          via TLS/SSL
                        type: boolean
                      pgSecretName:
                        description: PGSecret stores the secret name which contains
                          connection string of the Postgres server
                        type: string
                      tlsSecretName:
                        description: TLSSecret stores the secret name which contains
                          the client side certificates if enabled
                        type: string
                    type: object
                  reconcileStrategy:
                    description: |-
                      ReconcileStrategy specifies whether to reconcile NooBaa CRs. Valid
                      values are "manage", "standalone", "ignore" (same as "standalone"),
                      and "" (same as "manage").
                    type: string
                type: object
              network:
                description: Network represents cluster network settings
                properties:
                  addressRanges:
                    description: |-
                      AddressRanges specify a list of CIDRs that Rook will apply to Ceph's 'public_network' and/or
                      'cluster_network' configurations. This config section may be used for the "host" or "multus"
                      network providers.
                    nullable: true
                    properties:
                      cluster:
                        description: Cluster defines a list of CIDRs to use for Ceph
                          cluster network communication.
                        items:
                          description: |-
                            An IPv4 or IPv6 network CIDR.

                            This naive kubebuilder regex provides immediate feedback for some typos and for a common problem
                            case where the range spec is forgotten (e.g., /24). Rook does in-depth validation in code.
                          pattern: ^[0-9a-fA-F:.]{2,}\/[0-9]{1,3}$
                          type: string
                        type: array
                      public:
                        description: Public defines a list of CIDRs to use for Ceph
                          public network communication.
                        items:
                          description: |-
                            An IPv4 or IPv6 network CIDR.

                            This naive kubebuilder regex provides immediate feedback for some typos and for a common problem
                            case where the range spec is forgotten (e.g., /24). Rook does in-depth validation in code.
                          pattern: ^[0-9a-fA-F:.]{2,}\/[0-9]{1,3}$
                          type: string
                        type: array
                    type: object
                  connections:
                    description: |-
                      Settings for network connections such as compression and encryption across the
                      wire.
                    nullable: true
                    properties:
                      compression:
                        description: Compression settings for the network connections.
                        nullable: true
                        properties:
                          enabled:
                            description: |-
                              Whether to compress the data in transit across the wire.
                              The default is not set.
                            type: boolean
                        type: object
                      encryption:
                        description: Encryption settings for the network connections.
                        nullable: true
                        properties:
                          enabled:
                            description: |-
                              Whether to encrypt the data in transit across the wire to prevent eavesdropping
                              the data on the network. The default is not set. Even if encryption is not enabled,
                              clients still establish a strong initial authentication for the connection
                              and data integrity is still validated with a crc check. When encryption is enabled,
                              all communication between clients and Ceph daemons, or between Ceph daemons will
                              be encrypted.
                            type: boolean
                        type: object
                      requireMsgr2:
                        description: |-
                          Whether to require msgr2 (port 3300) even if compression or encryption are not enabled.
                          If true, the msgr1 port (6789) will be disabled.
                          Requires a kernel that supports msgr2 (kernel 5.11 or CentOS 8.4 or newer).
                        type: boolean
                    type: object
                  dualStack:
                    description: DualStack determines whether Ceph daemons should
                      listen on both IPv4 and IPv6
                    type: boolean
                  hostNetwork:
                    description: |-
                      HostNetwork to enable host network.
                      If host networking is enabled or disabled on a running cluster, then the operator will automatically fail over all the mons to
                      apply the new network settings.
                    type: boolean
                  ipFamily:
                    description: IPFamily is the single stack IPv6 or IPv4 protocol
                    enum:
                    - IPv4
                    - IPv6
                    nullable: true
                    type: string
                  multiClusterService:
                    description: Enable multiClusterService to export the Services
                      between peer clusters
                    properties:
                      clusterID:
                        description: |-
                          ClusterID uniquely identifies a cluster. It is used as a prefix to nslookup exported
                          services. For example: <clusterid>.<svc>.<ns>.svc.clusterset.local
                        type: string
                      enabled:
                        description: |-
                          Enable multiClusterService to export the mon and OSD services to peer cluster.
                          Ensure that peer clusters are connected using an MCS API compatible application,
                          like Globalnet Submariner.
                        type: boolean
                    type: object
                  provider:
                    description: |-
                      Provider is what provides network connectivity to the cluster e.g. "host" or "multus".
                      If the Provider is updated from being empty to "host" on a running cluster, then the operator will automatically fail over all the mons to apply the "host" network settings.
                    enum:
                    - ""
                    - host
                    - multus
                    nullable: true
                    type: string
                    x-kubernetes-validations:
                    - message: network provider must be disabled (reverted to empty
                        string) before a new provider is enabled
                      rule: self == '' || self == oldSelf
                  selectors:
                    additionalProperties:
                      type: string
                    description: |-
                      Selectors define NetworkAttachmentDefinitions to be used for Ceph public and/or cluster
                      networks when the "multus" network provider is used. This config section is not used for
                      other network providers.

                      Valid keys are "public" and "cluster". Refer to Ceph networking documentation for more:
                      https://docs.ceph.com/en/latest/rados/configuration/network-config-ref/

                      Refer to Multus network annotation documentation for help selecting values:
                      https://github.com/k8snetworkplumbingwg/multus-cni/blob/master/docs/how-to-use.md#run-pod-with-network-annotation

                      Rook will make a best-effort attempt to automatically detect CIDR address ranges for given
                      network attachment definitions. Rook's methods are robust but may be imprecise for
                      sufficiently complicated networks. Rook's auto-detection process obtains a new IP address
                      lease for each CephCluster reconcile. If Rook fails to detect, incorrectly detects, only
                      partially detects, or if underlying networks do not support reusing old IP addresses, it is
                      best to use the 'addressRanges' config section to specify CIDR ranges for the Ceph cluster.

                      As a contrived example, one can use a theoretical Kubernetes-wide network for Ceph client
                      traffic and a theoretical Rook-only network for Ceph replication traffic as shown:
                        selectors:
                          public: "default/cluster-fast-net"
                          cluster: "rook-ceph/ceph-backend-net"
                    nullable: true
                    type: object
                type: object
                x-kubernetes-validations:
                - message: at least one network selector must be specified when using
                    multus
                  rule: '!has(self.provider) || (self.provider != ''multus'' || (self.provider
                    == ''multus'' && size(self.selectors) > 0))'
                - message: the legacy hostNetwork setting can only be set if the network.provider
                    is set to the empty string
                  rule: '!has(self.hostNetwork) || self.hostNetwork == false || !has(self.provider)
                    || self.provider == ""'
              nfs:
                description: NFSSpec defines specific nfs configuration options
                properties:
                  enable:
                    description: Enable specifies whether to enable NFS.
                    type: boolean
                  logLevel:
                    description: |-
                      LogLevel set logging level
                      Log levels: NIV_NULL | NIV_FATAL | NIV_MAJ | NIV_CRIT | NIV_WARN | NIV_EVENT | NIV_INFO | NIV_DEBUG | NIV_MID_DEBUG | NIV_FULL_DEBUG | NB_LOG_LEVEL
                    type: string
                  reconcileStrategy:
                    type: string
                  storageClassName:
                    description: StorageClassName specifies the name of the storage
                      class created for NFS
                    maxLength: 253
                    pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
                    type: string
                type: object
              nodeTopologies:
                description: |-
                  NodeTopologies specifies the nodes available for the storage cluster,
                  preferred failure domain and location for the arbiter resources. This is
                  optional for non-arbiter clusters. For arbiter clusters, the
                  arbiterLocation is required; failure domain and the node labels are
                  optional. When the failure domain and the node labels are missing, the
                  ocs-operator makes a best effort to determine them automatically.
                properties:
                  arbiterLocation:
                    description: |-
                      ArbiterLocation is the chosen location in the failure domain for placing the arbiter resources.
                      When the failure domain is not provided as an input, ocs-operator determines the failure domain.
                    type: string
                  labels:
                    additionalProperties:
                      description: TopologyLabelValues is a list of values for a topology
                        label
                      items:
                        type: string
                      type: array
                    description: |-
                      Labels is a map of topology label keys
                      (e.g. "failure-domain.kubernetes.io") to a set of values for those
                      keys.
                    nullable: true
                    type: object
                type: object
              overprovisionControl:
                description: |-
                  OverprovisionControl specifies the allowed hard-limit PVs overprovisioning relative to
                  the effective usable storage capacity.
                items:
                  description: |-
                    OverprovisionControlSpec defines the allowed overprovisioning PVC consumption from the underlying cluster.
                    This may be an absolute value or as a percentage of the overall effective capacity.
                    One, and only one of those two (Capacity and Percentage) may be defined.
                  properties:
                    capacity:
                      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
                    quotaName:
                      type: string
                    selector:
                      description: |-
                        ClusterResourceQuotaSelector is used to select projects.  At least one of LabelSelector or AnnotationSelector
                        must present.  If only one is present, it is the only selection criteria.  If both are specified,
                        the project must match both restrictions.
                      properties:
                        annotations:
                          additionalProperties:
                            type: string
                          description: AnnotationSelector is used to select projects
                            by annotation.
                          nullable: true
                          type: object
                        labels:
                          description: LabelSelector is used to select projects by
                            label.
                          nullable: true
                          properties:
                            matchExpressions:
                              description: matchExpressions is a list of label selector
                                requirements. The requirements are ANDed.
                              items:
                                description: |-
                                  A label selector requirement is a selector that contains values, a key, and an operator that
                                  relates the key and values.
                                properties:
                                  key:
                                    description: key is the label key that the selector
                                      applies to.
                                    type: string
                                  operator:
                                    description: |-
                                      operator represents a key's relationship to a set of values.
                                      Valid operators are In, NotIn, Exists and DoesNotExist.
                                    type: string
                                  values:
                                    description: |-
                                      values is an array of string values. If the operator is In or NotIn,
                                      the values array must be non-empty. If the operator is Exists or DoesNotExist,
                                      the values array must be empty. This array is replaced during a strategic
                                      merge patch.
                                    items:
                                      type: string
                                    type: array
                                    x-kubernetes-list-type: atomic
                                required:
                                - key
                                - operator
                                type: object
                              type: array
                              x-kubernetes-list-type: atomic
                            matchLabels:
                              additionalProperties:
                                type: string
                              description: |-
                                matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
                                map is equivalent to an element of matchExpressions, whose key field is "key", the
                                operator is "In", and the values array contains only "value". The requirements are ANDed.
                              type: object
                          type: object
                          x-kubernetes-map-type: atomic
                      type: object
                    storageClassName:
                      type: string
                  type: object
                type: array
              placement:
                additionalProperties:
                  description: Placement is the placement for an object
                  properties:
                    nodeAffinity:
                      description: NodeAffinity is a group of node affinity scheduling
                        rules
                      properties:
                        preferredDuringSchedulingIgnoredDuringExecution:
                          description: |-
                            The scheduler will prefer to schedule pods to nodes that satisfy
                            the affinity expressions specified by this field, but it may choose
                            a node that violates one or more of the expressions. The node that is
                            most preferred is the one with the greatest sum of weights, i.e.
                            for each node that meets all of the scheduling requirements (resource
                            request, requiredDuringScheduling affinity expressions, etc.),
                            compute a sum by iterating through the elements of this field and adding
                            "weight" to the sum if the node matches the corresponding matchExpressions; the
                            node(s) with the highest sum are the most preferred.
                          items:
                            description: |-
                              An empty preferred scheduling term matches all objects with implicit weight 0
                              (i.e. it's a no-op). A null preferred scheduling term matches no objects (i.e. is also a no-op).
                            properties:
                              preference:
                                description: A node selector term, associated with
                                  the corresponding weight.
                                properties:
                                  matchExpressions:
                                    description: A list of node selector requirements
                                      by node's labels.
                                    items:
                                      description: |-
                                        A node selector requirement is a selector that contains values, a key, and an operator
                                        that relates the key and values.
                                      properties:
                                        key:
                                          description: The label key that the selector
                                            applies to.
                                          type: string
                                        operator:
                                          description: |-
                                            Represents a key's relationship to a set of values.
                                            Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.
                                          type: string
                                        values:
                                          description: |-
                                            An array of string values. If the operator is In or NotIn,
                                            the values array must be non-empty. If the operator is Exists or DoesNotExist,
                                            the values array must be empty. If the operator is Gt or Lt, the values
                                            array must have a single element, which will be interpreted as an integer.
                                            This array is replaced during a strategic merge patch.
                                          items:
                                            type: string
                                          type: array
                                          x-kubernetes-list-type: atomic
                                      required:
                                      - key
                                      - operator
                                      type: object
                                    type: array
                                    x-kubernetes-list-type: atomic
                                  matchFields:
                                    description: A list of node selector requirements
                                      by node's fields.
                                    items:
                                      description: |-
                                        A node selector requirement is a selector that contains values, a key, and an operator
                                        that relates the key and values.
                                      properties:
                                        key:
                                          description: The label key that the selector
                                            applies to.
                                          type: string
                                        operator:
                                          description: |-
                                            Represents a key's relationship to a set of values.
                                            Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.
                                          type: string
                                        values:
                                          description: |-
                                            An array of string values. If the operator is In or NotIn,
                                            the values array must be non-empty. If the operator is Exists or DoesNotExist,
                                            the values array must be empty. If the operator is Gt or Lt, the values
                                            array must have a single element, which will be interpreted as an integer.
                                            This array is replaced during a strategic merge patch.
                                          items:
                                            type: string
                                          type: array
                                          x-kubernetes-list-type: atomic
                                      required:
                                      - key
                                      - operator
                                      type: object
                                    type: array
                                    x-kubernetes-list-type: atomic
                                type: object
                                x-kubernetes-map-type: atomic
                              weight:
                                description: Weight associated with matching the corresponding
                                  nodeSelectorTerm, in the range 1-100.
                                format: int32
                                type: integer
                            required:
                            - preference
                            - weight
                            type: object
                          type: array
                          x-kubernetes-list-type: atomic
                        requiredDuringSchedulingIgnoredDuringExecution:
                          description: |-
                            If the affinity requirements specified by this field are not met at
                            scheduling time, the pod will not be scheduled onto the node.
                            If the affinity requirements specified by this field cease to be met
                            at some point during pod execution (e.g. due to an update), the system
                            may or may not try to eventually evict the pod from its node.
                          properties:
                            nodeSelectorTerms:
                              description: Required. A list of node selector terms.
                                The terms are ORed.
                              items:
                                description: |-
                                  A null or empty node selector term matches no objects. The requirements of
                                  them are ANDed.
                                  The TopologySelectorTerm type implements a subset of the NodeSelectorTerm.
                                properties:
                                  matchExpressions:
                                    description: A list of node selector requirements
                                      by node's labels.
                                    items:
                                      description: |-
                                        A node selector requirement is a selector that contains values, a key, and an operator
                                        that relates the key and values.
                                      properties:
                                        key:
                                          description: The label key that the selector
                                            applies to.
                                          type: string
                                        operator:
                                          description: |-
                                            Represents a key's relationship to a set of values.
                                            Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.
                                          type: string
                                        values:
                                          description: |-
                                            An array of string values. If the operator is In or NotIn,
                                            the values array must be non-empty. If the operator is Exists or DoesNotExist,
                                            the values array must be empty. If the operator is Gt or Lt, the values
                                            array must have a single element, which will be interpreted as an integer.
                                            This array is replaced during a strategic merge patch.
                                          items:
                                            type: string
                                          type: array
                                          x-kubernetes-list-type: atomic
                                      required:
                                      - key
                                      - operator
                                      type: object
                                    type: array
                                    x-kubernetes-list-type: atomic
                                  matchFields:
                                    description: A list of node selector requirements
                                      by node's fields.
                                    items:
                                      description: |-
                                        A node selector requirement is a selector that contains values, a key, and an operator
                                        that relates the key and values.
                                      properties:
                                        key:
                                          description: The label key that the selector
                                            applies to.
                                          type: string
                                        operator:
                                          description: |-
                                            Represents a key's relationship to a set of values.
                                            Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.
                                          type: string
                                        values:
                                          description: |-
                                            An array of string values. If the operator is In or NotIn,
                                            the values array must be non-empty. If the operator is Exists or DoesNotExist,
                                            the values array must be empty. If the operator is Gt or Lt, the values
                                            array must have a single element, which will be interpreted as an integer.
                                            This array is replaced during a strategic merge patch.
                                          items:
                                            type: string
                                          type: array
                                          x-kubernetes-list-type: atomic
                                      required:
                                      - key
                                      - operator
                                      type: object
                                    type: array
                                    x-kubernetes-list-type: atomic
                                type: object
                                x-kubernetes-map-type: atomic
                              type: array
                              x-kubernetes-list-type: atomic
                          required:
                          - nodeSelectorTerms
                          type: object
                          x-kubernetes-map-type: atomic
                      type: object
                    podAffinity:
                      description: PodAffinity is a group of inter pod affinity scheduling
                        rules
                      properties:
                        preferredDuringSchedulingIgnoredDuringExecution:
                          description: |-
                            The scheduler will prefer to schedule pods to nodes that satisfy
                            the affinity expressions specified by this field, but it may choose
                            a node that violates one or more of the expressions. The node that is
                            most preferred is the one with the greatest sum of weights, i.e.
                            for each node that meets all of the scheduling requirements (resource
                            request, requiredDuringScheduling affinity expressions, etc.),
                            compute a sum by iterating through the elements of this field and adding
                            "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the
                            node(s) with the highest sum are the most preferred.
                          items:
                            description: The weights of all of the matched WeightedPodAffinityTerm
                              fields are added per-node to find the most preferred
                              node(s)
                            properties:
                              podAffinityTerm:
                                description: Required. A pod affinity term, associated
                                  with the corresponding weight.
                                properties:
                                  labelSelector:
                                    description: |-
                                      A label query over a set of resources, in this case pods.
                                      If it's null, this PodAffinityTerm matches with no Pods.
                                    properties:
                                      matchExpressions:
                                        description: matchExpressions is a list of
                                          label selector requirements. The requirements
                                          are ANDed.
                                        items:
                                          description: |-
                                            A label selector requirement is a selector that contains values, a key, and an operator that
                                            relates the key and values.
                                          properties:
                                            key:
                                              description: key is the label key that
                                                the selector applies to.
                                              type: string
                                            operator:
                                              description: |-
                                                operator represents a key's relationship to a set of values.
                                                Valid operators are In, NotIn, Exists and DoesNotExist.
                                              type: string
                                            values:
                                              description: |-
                                                values is an array of string values. If the operator is In or NotIn,
                                                the values array must be non-empty. If the operator is Exists or DoesNotExist,
                                                the values array must be empty. This array is replaced during a strategic
                                                merge patch.
                                              items:
                                                type: string
                                              type: array
                                              x-kubernetes-list-type: atomic
                                          required:
                                          - key
                                          - operator
                                          type: object
                                        type: array
                                        x-kubernetes-list-type: atomic
                                      matchLabels:
                                        additionalProperties:
                                          type: string
                                        description: |-
                                          matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
                                          map is equivalent to an element of matchExpressions, whose key field is "key", the
                                          operator is "In", and the values array contains only "value". The requirements are ANDed.
                                        type: object
                                    type: object
                                    x-kubernetes-map-type: atomic
                                  matchLabelKeys:
                                    description: |-
                                      MatchLabelKeys is a set of pod label keys to select which pods will
                                      be taken into consideration. The keys are used to lookup values from the
                                      incoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)`
                                      to select the group of existing pods which pods will be taken into consideration
                                      for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming
                                      pod labels will be ignored. The default value is empty.
                                      The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                      Also, matchLabelKeys cannot be set when labelSelector isn't set.
                                      This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                    items:
                                      type: string
                                    type: array
                                    x-kubernetes-list-type: atomic
                                  mismatchLabelKeys:
                                    description: |-
                                      MismatchLabelKeys is a set of pod label keys to select which pods will
                                      be taken into consideration. The keys are used to lookup values from the
                                      incoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)`
                                      to select the group of existing pods which pods will be taken into consideration
                                      for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming
                                      pod labels will be ignored. The default value is empty.
                                      The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                      Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
                                      This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                    items:
                                      type: string
                                    type: array
                                    x-kubernetes-list-type: atomic
                                  namespaceSelector:
                                    description: |-
                                      A label query over the set of namespaces that the term applies to.
                                      The term is applied to the union of the namespaces selected by this field
                                      and the ones listed in the namespaces field.
                                      null selector and null or empty namespaces list means "this pod's namespace".
                                      An empty selector ({}) matches all namespaces.
                                    properties:
                                      matchExpressions:
                                        description: matchExpressions is a list of
                                          label selector requirements. The requirements
                                          are ANDed.
                                        items:
                                          description: |-
                                            A label selector requirement is a selector that contains values, a key, and an operator that
                                            relates the key and values.
                                          properties:
                                            key:
                                              description: key is the label key that
                                                the selector applies to.
                                              type: string
                                            operator:
                                              description: |-
                                                operator represents a key's relationship to a set of values.
                                                Valid operators are In, NotIn, Exists and DoesNotExist.
                                              type: string
                                            values:
                                              description: |-
                                                values is an array of string values. If the operator is In or NotIn,
                                                the values array must be non-empty. If the operator is Exists or DoesNotExist,
                                                the values array must be empty. This array is replaced during a strategic
                                                merge patch.
                                              items:
                                                type: string
                                              type: array
                                              x-kubernetes-list-type: atomic
                                          required:
                                          - key
                                          - operator
                                          type: object
                                        type: array
                                        x-kubernetes-list-type: atomic
                                      matchLabels:
                                        additionalProperties:
                                          type: string
                                        description: |-
                                          matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
                                          map is equivalent to an element of matchExpressions, whose key field is "key", the
                                          operator is "In", and the values array contains only "value". The requirements are ANDed.
                                        type: object
                                    type: object
                                    x-kubernetes-map-type: atomic
                                  namespaces:
                                    description: |-
                                      namespaces specifies a static list of namespace names that the term applies to.
                                      The term is applied to the union of the namespaces listed in this field
                                      and the ones selected by namespaceSelector.
                                      null or empty namespaces list and null namespaceSelector means "this pod's namespace".
                                    items:
                                      type: string
                                    type: array
                                    x-kubernetes-list-type: atomic
                                  topologyKey:
                                    description: |-
                                      This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching
                                      the labelSelector in the specified namespaces, where co-located is defined as running on a node
                                      whose value of the label with key topologyKey matches that of any node on which any of the
                                      selected pods is running.
                                      Empty topologyKey is not allowed.
                                    type: string
                                required:
                                - topologyKey
                                type: object
                              weight:
                                description: |-
                                  weight associated with matching the corresponding podAffinityTerm,
                                  in the range 1-100.
                                format: int32
                                type: integer
                            required:
                            - podAffinityTerm
                            - weight
                            type: object
                          type: array
                          x-kubernetes-list-type: atomic
                        requiredDuringSchedulingIgnoredDuringExecution:
                          description: |-
                            If the affinity requirements specified by this field are not met at
                            scheduling time, the pod will not be scheduled onto the node.
                            If the affinity requirements specified by this field cease to be met
                            at some point during pod execution (e.g. due to a pod label update), the
                            system may or may not try to eventually evict the pod from its node.
                            When there are multiple elements, the lists of nodes corresponding to each
                            podAffinityTerm are intersected, i.e. all terms must be satisfied.
                          items:
                            description: |-
                              Defines a set of pods (namely those matching the labelSelector
                              relative to the given namespace(s)) that this pod should be
                              co-located (affinity) or not co-located (anti-affinity) with,
                              where co-located is defined as running on a node whose value of
                              the label with key <topologyKey> matches that of any node on which
                              a pod of the set of pods is running
                            properties:
                              labelSelector:
                                description: |-
                                  A label query over a set of resources, in this case pods.
                                  If it's null, this PodAffinityTerm matches with no Pods.
                                properties:
                                  matchExpressions:
                                    description: matchExpressions is a list of label
                                      selector requirements. The requirements are
                                      ANDed.
                                    items:
                                      description: |-
                                        A label selector requirement is a selector that contains values, a key, and an operator that
                                        relates the key and values.
                                      properties:
                                        key:
                                          description: key is the label key that the
                                            selector applies to.
                                          type: string
                                        operator:
                                          description: |-
                                            operator represents a key's relationship to a set of values.
                                            Valid operators are In, NotIn, Exists and DoesNotExist.
                                          type: string
                                        values:
                                          description: |-
                                            values is an array of string values. If the operator is In or NotIn,
                                            the values array must be non-empty. If the operator is Exists or DoesNotExist,
                                            the values array must be empty. This array is replaced during a strategic
                                            merge patch.
                                          items:
                                            type: string
                                          type: array
                                          x-kubernetes-list-type: atomic
                                      required:
                                      - key
                                      - operator
                                      type: object
                                    type: array
                                    x-kubernetes-list-type: atomic
                                  matchLabels:
                                    additionalProperties:
                                      type: string
                                    description: |-
                                      matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
                                      map is equivalent to an element of matchExpressions, whose key field is "key", the
                                      operator is "In", and the values array contains only "value". The requirements are ANDed.
                                    type: object
                                type: object
                                x-kubernetes-map-type: atomic
                              matchLabelKeys:
                                description: |-
                                  MatchLabelKeys is a set of pod label keys to select which pods will
                                  be taken into consideration. The keys are used to lookup values from the
                                  incoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)`
                                  to select the group of existing pods which pods will be taken into consideration
                                  for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming
                                  pod labels will be ignored. The default value is empty.
                                  The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                  Also, matchLabelKeys cannot be set when labelSelector isn't set.
                                  This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                items:
                                  type: string
                                type: array
                                x-kubernetes-list-type: atomic
                              mismatchLabelKeys:
                                description: |-
                                  MismatchLabelKeys is a set of pod label keys to select which pods will
                                  be taken into consideration. The keys are used to lookup values from the
                                  incoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)`
                                  to select the group of existing pods which pods will be taken into consideration
                                  for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming
                                  pod labels will be ignored. The default value is empty.
                                  The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                  Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
                                  This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                items:
                                  type: string
                                type: array
                                x-kubernetes-list-type: atomic
                              namespaceSelector:
                                description: |-
                                  A label query over the set of namespaces that the term applies to.
                                  The term is applied to the union of the namespaces selected by this field
                                  and the ones listed in the namespaces field.
                                  null selector and null or empty namespaces list means "this pod's namespace".
                                  An empty selector ({}) matches all namespaces.
                                properties:
                                  matchExpressions:
                                    description: matchExpressions is a list of label
                                      selector requirements. The requirements are
                                      ANDed.
                                    items:
                                      description: |-
                                        A label selector requirement is a selector that contains values, a key, and an operator that
                                        relates the key and values.
                                      properties:
                                        key:
                                          description: key is the label key that the
                                            selector applies to.
                                          type: string
                                        operator:
                                          description: |-
                                            operator represents a key's relationship to a set of values.
                                            Valid operators are In, NotIn, Exists and DoesNotExist.
                                          type: string
                                        values:
                                          description: |-
                                            values is an array of string values. If the operator is In or NotIn,
                                            the values array must be non-empty. If the operator is Exists or DoesNotExist,
                                            the values array must be empty. This array is replaced during a strategic
                                            merge patch.
                                          items:
                                            type: string
                                          type: array
                                          x-kubernetes-list-type: atomic
                                      required:
                                      - key
                                      - operator
                                      type: object
                                    type: array
                                    x-kubernetes-list-type: atomic
                                  matchLabels:
                                    additionalProperties:
                                      type: string
                                    description: |-
                                      matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
                                      map is equivalent to an element of matchExpressions, whose key field is "key", the
                                      operator is "In", and the values array contains only "value". The requirements are ANDed.
                                    type: object
                                type: object
                                x-kubernetes-map-type: atomic
                              namespaces:
                                description: |-
                                  namespaces specifies a static list of namespace names that the term applies to.
                                  The term is applied to the union of the namespaces listed in this field
                                  and the ones selected by namespaceSelector.
                                  null or empty namespaces list and null namespaceSelector means "this pod's namespace".
                                items:
                                  type: string
                                type: array
                                x-kubernetes-list-type: atomic
                              topologyKey:
                                description: |-
                                  This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching
                                  the labelSelector in the specified namespaces, where co-located is defined as running on a node
                                  whose value of the label with key topologyKey matches that of any node on which any of the
                                  selected pods is running.
                                  Empty topologyKey is not allowed.
                                type: string
                            required:
                            - topologyKey
                            type: object
                          type: array
                          x-kubernetes-list-type: atomic
                      type: object
                    podAntiAffinity:
                      description: PodAntiAffinity is a group of inter pod anti affinity
                        scheduling rules
                      properties:
                        preferredDuringSchedulingIgnoredDuringExecution:
                          description: |-
                            The scheduler will prefer to schedule pods to nodes that satisfy
                            the anti-affinity expressions specified by this field, but it may choose
                            a node that violates one or more of the expressions. The node that is
                            most preferred is the one with the greatest sum of weights, i.e.
                            for each node that meets all of the scheduling requirements (resource
                            request, requiredDuringScheduling anti-affinity expressions, etc.),
                            compute a sum by iterating through the elements of this field and adding
                            "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the
                            node(s) with the highest sum are the most preferred.
                          items:
                            description: The weights of all of the matched WeightedPodAffinityTerm
                              fields are added per-node to find the most preferred
                              node(s)
                            properties:
                              podAffinityTerm:
                                description: Required. A pod affinity term, associated
                                  with the corresponding weight.
                                properties:
                                  labelSelector:
                                    description: |-
                                      A label query over a set of resources, in this case pods.
                                      If it's null, this PodAffinityTerm matches with no Pods.
                                    properties:
                                      matchExpressions:
                                        description: matchExpressions is a list of
                                          label selector requirements. The requirements
                                          are ANDed.
                                        items:
                                          description: |-
                                            A label selector requirement is a selector that contains values, a key, and an operator that
                                            relates the key and values.
                                          properties:
                                            key:
                                              description: key is the label key that
                                                the selector applies to.
                                              type: string
                                            operator:
                                              description: |-
                                                operator represents a key's relationship to a set of values.
                                                Valid operators are In, NotIn, Exists and DoesNotExist.
                                              type: string
                                            values:
                                              description: |-
                                                values is an array of string values. If the operator is In or NotIn,
                                                the values array must be non-empty. If the operator is Exists or DoesNotExist,
                                                the values array must be empty. This array is replaced during a strategic
                                                merge patch.
                                              items:
                                                type: string
                                              type: array
                                              x-kubernetes-list-type: atomic
                                          required:
                                          - key
                                          - operator
                                          type: object
                                        type: array
                                        x-kubernetes-list-type: atomic
                                      matchLabels:
                                        additionalProperties:
                                          type: string
                                        description: |-
                                          matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
                                          map is equivalent to an element of matchExpressions, whose key field is "key", the
                                          operator is "In", and the values array contains only "value". The requirements are ANDed.
                                        type: object
                                    type: object
                                    x-kubernetes-map-type: atomic
                                  matchLabelKeys:
                                    description: |-
                                      MatchLabelKeys is a set of pod label keys to select which pods will
                                      be taken into consideration. The keys are used to lookup values from the
                                      incoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)`
                                      to select the group of existing pods which pods will be taken into consideration
                                      for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming
                                      pod labels will be ignored. The default value is empty.
                                      The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                      Also, matchLabelKeys cannot be set when labelSelector isn't set.
                                      This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                    items:
                                      type: string
                                    type: array
                                    x-kubernetes-list-type: atomic
                                  mismatchLabelKeys:
                                    description: |-
                                      MismatchLabelKeys is a set of pod label keys to select which pods will
                                      be taken into consideration. The keys are used to lookup values from the
                                      incoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)`
                                      to select the group of existing pods which pods will be taken into consideration
                                      for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming
                                      pod labels will be ignored. The default value is empty.
                                      The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                      Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
                                      This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                    items:
                                      type: string
                                    type: array
                                    x-kubernetes-list-type: atomic
                                  namespaceSelector:
                                    description: |-
                                      A label query over the set of namespaces that the term applies to.
                                      The term is applied to the union of the namespaces selected by this field
                                      and the ones listed in the namespaces field.
                                      null selector and null or empty namespaces list means "this pod's namespace".
                                      An empty selector ({}) matches all namespaces.
                                    properties:
                                      matchExpressions:
                                        description: matchExpressions is a list of
                                          label selector requirements. The requirements
                                          are ANDed.
                                        items:
                                          description: |-
                                            A label selector requirement is a selector that contains values, a key, and an operator that
                                            relates the key and values.
                                          properties:
                                            key:
                                              description: key is the label key that
                                                the selector applies to.
                                              type: string
                                            operator:
                                              description: |-
                                                operator represents a key's relationship to a set of values.
                                                Valid operators are In, NotIn, Exists and DoesNotExist.
                                              type: string
                                            values:
                                              description: |-
                                                values is an array of string values. If the operator is In or NotIn,
                                                the values array must be non-empty. If the operator is Exists or DoesNotExist,
                                                the values array must be empty. This array is replaced during a strategic
                                                merge patch.
                                              items:
                                                type: string
                                              type: array
                                              x-kubernetes-list-type: atomic
                                          required:
                                          - key
                                          - operator
                                          type: object
                                        type: array
                                        x-kubernetes-list-type: atomic
                                      matchLabels:
                                        additionalProperties:
                                          type: string
                                        description: |-
                                          matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
                                          map is equivalent to an element of matchExpressions, whose key field is "key", the
                                          operator is "In", and the values array contains only "value". The requirements are ANDed.
                                        type: object
                                    type: object
                                    x-kubernetes-map-type: atomic
                                  namespaces:
                                    description: |-
                                      namespaces specifies a static list of namespace names that the term applies to.
                                      The term is applied to the union of the namespaces listed in this field
                                      and the ones selected by namespaceSelector.
                                      null or empty namespaces list and null namespaceSelector means "this pod's namespace".
                                    items:
                                      type: string
                                    type: array
                                    x-kubernetes-list-type: atomic
                                  topologyKey:
                                    description: |-
                                      This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching
                                      the labelSelector in the specified namespaces, where co-located is defined as running on a node
                                      whose value of the label with key topologyKey matches that of any node on which any of the
                                      selected pods is running.
                                      Empty topologyKey is not allowed.
                                    type: string
                                required:
                                - topologyKey
                                type: object
                              weight:
                                description: |-
                                  weight associated with matching the corresponding podAffinityTerm,
                                  in the range 1-100.
                                format: int32
                                type: integer
                            required:
                            - podAffinityTerm
                            - weight
                            type: object
                          type: array
                          x-kubernetes-list-type: atomic
                        requiredDuringSchedulingIgnoredDuringExecution:
                          description: |-
                            If the anti-affinity requirements specified by this field are not met at
                            scheduling time, the pod will not be scheduled onto the node.
                            If the anti-affinity requirements specified by this field cease to be met
                            at some point during pod execution (e.g. due to a pod label update), the
                            system may or may not try to eventually evict the pod from its node.
                            When there are multiple elements, the lists of nodes corresponding to each
                            podAffinityTerm are intersected, i.e. all terms must be satisfied.
                          items:
                            description: |-
                              Defines a set of pods (namely those matching the labelSelector
                              relative to the given namespace(s)) that this pod should be
                              co-located (affinity) or not co-located (anti-affinity) with,
                              where co-located is defined as running on a node whose value of
                              the label with key <topologyKey> matches that of any node on which
                              a pod of the set of pods is running
                            properties:
                              labelSelector:
                                description: |-
                                  A label query over a set of resources, in this case pods.
                                  If it's null, this PodAffinityTerm matches with no Pods.
                                properties:
                                  matchExpressions:
                                    description: matchExpressions is a list of label
                                      selector requirements. The requirements are
                                      ANDed.
                                    items:
                                      description: |-
                                        A label selector requirement is a selector that contains values, a key, and an operator that
                                        relates the key and values.
                                      properties:
                                        key:
                                          description: key is the label key that the
                                            selector applies to.
                                          type: string
                                        operator:
                                          description: |-
                                            operator represents a key's relationship to a set of values.
                                            Valid operators are In, NotIn, Exists and DoesNotExist.
                                          type: string
                                        values:
                                          description: |-
                                            values is an array of string values. If the operator is In or NotIn,
                                            the values array must be non-empty. If the operator is Exists or DoesNotExist,
                                            the values array must be empty. This array is replaced during a strategic
                                            merge patch.
                                          items:
                                            type: string
                                          type: array
                                          x-kubernetes-list-type: atomic
                                      required:
                                      - key
                                      - operator
                                      type: object
                                    type: array
                                    x-kubernetes-list-type: atomic
                                  matchLabels:
                                    additionalProperties:
                                      type: string
                                    description: |-
                                      matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
                                      map is equivalent to an element of matchExpressions, whose key field is "key", the
                                      operator is "In", and the values array contains only "value". The requirements are ANDed.
                                    type: object
                                type: object
                                x-kubernetes-map-type: atomic
                              matchLabelKeys:
                                description: |-
                                  MatchLabelKeys is a set of pod label keys to select which pods will
                                  be taken into consideration. The keys are used to lookup values from the
                                  incoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)`
                                  to select the group of existing pods which pods will be taken into consideration
                                  for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming
                                  pod labels will be ignored. The default value is empty.
                                  The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                  Also, matchLabelKeys cannot be set when labelSelector isn't set.
                                  This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                items:
                                  type: string
                                type: array
                                x-kubernetes-list-type: atomic
                              mismatchLabelKeys:
                                description: |-
                                  MismatchLabelKeys is a set of pod label keys to select which pods will
                                  be taken into consideration. The keys are used to lookup values from the
                                  incoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)`
                                  to select the group of existing pods which pods will be taken into consideration
                                  for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming
                                  pod labels will be ignored. The default value is empty.
                                  The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                  Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
                                  This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                items:
                                  type: string
                                type: array
                                x-kubernetes-list-type: atomic
                              namespaceSelector:
                                description: |-
                                  A label query over the set of namespaces that the term applies to.
                                  The term is applied to the union of the namespaces selected by this field
                                  and the ones listed in the namespaces field.
                                  null selector and null or empty namespaces list means "this pod's namespace".
                                  An empty selector ({}) matches all namespaces.
                                properties:
                                  matchExpressions:
                                    description: matchExpressions is a list of label
                                      selector requirements. The requirements are
                                      ANDed.
                                    items:
                                      description: |-
                                        A label selector requirement is a selector that contains values, a key, and an operator that
                                        relates the key and values.
                                      properties:
                                        key:
                                          description: key is the label key that the
                                            selector applies to.
                                          type: string
                                        operator:
                                          description: |-
                                            operator represents a key's relationship to a set of values.
                                            Valid operators are In, NotIn, Exists and DoesNotExist.
                                          type: string
                                        values:
                                          description: |-
                                            values is an array of string values. If the operator is In or NotIn,
                                            the values array must be non-empty. If the operator is Exists or DoesNotExist,
                                            the values array must be empty. This array is replaced during a strategic
                                            merge patch.
                                          items:
                                            type: string
                                          type: array
                                          x-kubernetes-list-type: atomic
                                      required:
                                      - key
                                      - operator
                                      type: object
                                    type: array
                                    x-kubernetes-list-type: atomic
                                  matchLabels:
                                    additionalProperties:
                                      type: string
                                    description: |-
                                      matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
                                      map is equivalent to an element of matchExpressions, whose key field is "key", the
                                      operator is "In", and the values array contains only "value". The requirements are ANDed.
                                    type: object
                                type: object
                                x-kubernetes-map-type: atomic
                              namespaces:
                                description: |-
                                  namespaces specifies a static list of namespace names that the term applies to.
                                  The term is applied to the union of the namespaces listed in this field
                                  and the ones selected by namespaceSelector.
                                  null or empty namespaces list and null namespaceSelector means "this pod's namespace".
                                items:
                                  type: string
                                type: array
                                x-kubernetes-list-type: atomic
                              topologyKey:
                                description: |-
                                  This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching
                                  the labelSelector in the specified namespaces, where co-located is defined as running on a node
                                  whose value of the label with key topologyKey matches that of any node on which any of the
                                  selected pods is running.
                                  Empty topologyKey is not allowed.
                                type: string
                            required:
                            - topologyKey
                            type: object
                          type: array
                          x-kubernetes-list-type: atomic
                      type: object
                    tolerations:
                      description: |-
                        The pod this Toleration is attached to tolerates any taint that matches
                        the triple <key,value,effect> using the matching operator <operator>
                      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
                      type: array
                    topologySpreadConstraints:
                      description: TopologySpreadConstraints specifies how to spread
                        matching pods among the given topology
                      items:
                        description: TopologySpreadConstraint specifies how to spread
                          matching pods among the given topology.
                        properties:
                          labelSelector:
                            description: |-
                              LabelSelector is used to find matching pods.
                              Pods that match this label selector are counted to determine the number of pods
                              in their corresponding topology domain.
                            properties:
                              matchExpressions:
                                description: matchExpressions is a list of label selector
                                  requirements. The requirements are ANDed.
                                items:
                                  description: |-
                                    A label selector requirement is a selector that contains values, a key, and an operator that
                                    relates the key and values.
                                  properties:
                                    key:
                                      description: key is the label key that the selector
                                        applies to.
                                      type: string
                                    operator:
                                      description: |-
                                        operator represents a key's relationship to a set of values.
                                        Valid operators are In, NotIn, Exists and DoesNotExist.
                                      type: string
                                    values:
                                      description: |-
                                        values is an array of string values. If the operator is In or NotIn,
                                        the values array must be non-empty. If the operator is Exists or DoesNotExist,
                                        the values array must be empty. This array is replaced during a strategic
                                        merge patch.
                                      items:
                                        type: string
                                      type: array
                                      x-kubernetes-list-type: atomic
                                  required:
                                  - key
                                  - operator
                                  type: object
                                type: array
                                x-kubernetes-list-type: atomic
                              matchLabels:
                                additionalProperties:
                                  type: string
                                description: |-
                                  matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
                                  map is equivalent to an element of matchExpressions, whose key field is "key", the
                                  operator is "In", and the values array contains only "value". The requirements are ANDed.
                                type: object
                            type: object
                            x-kubernetes-map-type: atomic
                          matchLabelKeys:
                            description: |-
                              MatchLabelKeys is a set of pod label keys to select the pods over which
                              spreading will be calculated. The keys are used to lookup values from the
                              incoming pod labels, those key-value labels are ANDed with labelSelector
                              to select the group of existing pods over which spreading will be calculated
                              for the incoming pod. The same key is forbidden to exist in both MatchLabelKeys and LabelSelector.
                              MatchLabelKeys cannot be set when LabelSelector isn't set.
                              Keys that don't exist in the incoming pod labels will
                              be ignored. A null or empty list means only match against labelSelector.

                              This is a beta field and requires the MatchLabelKeysInPodTopologySpread feature gate to be enabled (enabled by default).
                            items:
                              type: string
                            type: array
                            x-kubernetes-list-type: atomic
                          maxSkew:
                            description: |-
                              MaxSkew describes the degree to which pods may be unevenly distributed.
                              When `whenUnsatisfiable=DoNotSchedule`, it is the maximum permitted difference
                              between the number of matching pods in the target topology and the global minimum.
                              The global minimum is the minimum number of matching pods in an eligible domain
                              or zero if the number of eligible domains is less than MinDomains.
                              For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same
                              labelSelector spread as 2/2/1:
                              In this case, the global minimum is 1.
                              | zone1 | zone2 | zone3 |
                              |  P P  |  P P  |   P   |
                              - if MaxSkew is 1, incoming pod can only be scheduled to zone3 to become 2/2/2;
                              scheduling it onto zone1(zone2) would make the ActualSkew(3-1) on zone1(zone2)
                              violate MaxSkew(1).
                              - if MaxSkew is 2, incoming pod can be scheduled onto any zone.
                              When `whenUnsatisfiable=ScheduleAnyway`, it is used to give higher precedence
                              to topologies that satisfy it.
                              It's a required field. Default value is 1 and 0 is not allowed.
                            format: int32
                            type: integer
                          minDomains:
                            description: |-
                              MinDomains indicates a minimum number of eligible domains.
                              When the number of eligible domains with matching topology keys is less than minDomains,
                              Pod Topology Spread treats "global minimum" as 0, and then the calculation of Skew is performed.
                              And when the number of eligible domains with matching topology keys equals or greater than minDomains,
                              this value has no effect on scheduling.
                              As a result, when the number of eligible domains is less than minDomains,
                              scheduler won't schedule more than maxSkew Pods to those domains.
                              If value is nil, the constraint behaves as if MinDomains is equal to 1.
                              Valid values are integers greater than 0.
                              When value is not nil, WhenUnsatisfiable must be DoNotSchedule.

                              For example, in a 3-zone cluster, MaxSkew is set to 2, MinDomains is set to 5 and pods with the same
                              labelSelector spread as 2/2/2:
                              | zone1 | zone2 | zone3 |
                              |  P P  |  P P  |  P P  |
                              The number of domains is less than 5(MinDomains), so "global minimum" is treated as 0.
                              In this situation, new pod with the same labelSelector cannot be scheduled,
                              because computed skew will be 3(3 - 0) if new Pod is scheduled to any of the three zones,
                              it will violate MaxSkew.
                            format: int32
                            type: integer
                          nodeAffinityPolicy:
                            description: |-
                              NodeAffinityPolicy indicates how we will treat Pod's nodeAffinity/nodeSelector
                              when calculating pod topology spread skew. Options are:
                              - Honor: only nodes matching nodeAffinity/nodeSelector are included in the calculations.
                              - Ignore: nodeAffinity/nodeSelector are ignored. All nodes are included in the calculations.

                              If this value is nil, the behavior is equivalent to the Honor policy.
                              This is a beta-level feature default enabled by the NodeInclusionPolicyInPodTopologySpread feature flag.
                            type: string
                          nodeTaintsPolicy:
                            description: |-
                              NodeTaintsPolicy indicates how we will treat node taints when calculating
                              pod topology spread skew. Options are:
                              - Honor: nodes without taints, along with tainted nodes for which the incoming pod
                              has a toleration, are included.
                              - Ignore: node taints are ignored. All nodes are included.

                              If this value is nil, the behavior is equivalent to the Ignore policy.
                              This is a beta-level feature default enabled by the NodeInclusionPolicyInPodTopologySpread feature flag.
                            type: string
                          topologyKey:
                            description: |-
                              TopologyKey is the key of node labels. Nodes that have a label with this key
                              and identical values are considered to be in the same topology.
                              We consider each <key, value> as a "bucket", and try to put balanced number
                              of pods into each bucket.
                              We define a domain as a particular instance of a topology.
                              Also, we define an eligible domain as a domain whose nodes meet the requirements of
                              nodeAffinityPolicy and nodeTaintsPolicy.
                              e.g. If TopologyKey is "kubernetes.io/hostname", each Node is a domain of that topology.
                              And, if TopologyKey is "topology.kubernetes.io/zone", each zone is a domain of that topology.
                              It's a required field.
                            type: string
                          whenUnsatisfiable:
                            description: |-
                              WhenUnsatisfiable indicates how to deal with a pod if it doesn't satisfy
                              the spread constraint.
                              - DoNotSchedule (default) tells the scheduler not to schedule it.
                              - ScheduleAnyway tells the scheduler to schedule the pod in any location,
                                but giving higher precedence to topologies that would help reduce the
                                skew.
                              A constraint is considered "Unsatisfiable" for an incoming pod
                              if and only if every possible node assignment for that pod would violate
                              "MaxSkew" on some topology.
                              For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same
                              labelSelector spread as 3/1/1:
                              | zone1 | zone2 | zone3 |
                              | P P P |   P   |   P   |
                              If WhenUnsatisfiable is set to DoNotSchedule, incoming pod can only be scheduled
                              to zone2(zone3) to become 3/2/1(3/1/2) as ActualSkew(2-1) on zone2(zone3) satisfies
                              MaxSkew(1). In other words, the cluster can still be imbalanced, but scheduler
                              won't make it *more* imbalanced.
                              It's a required field.
                            type: string
                        required:
                        - maxSkew
                        - topologyKey
                        - whenUnsatisfiable
                        type: object
                      type: array
                  type: object
                description: Placement is optional and used to specify placements
                  of OCS components explicitly
                type: object
              providerAPIServerServiceType:
                description: |-
                  ProviderAPIServerServiceType Indicates the ServiceType for OCS Provider API Server Service.
                  The default ServiceType is derived from hostNetwork field.
                enum:
                - ClusterIP
                - NodePort
                - LoadBalancer
                type: string
              resourceProfile:
                description: |-
                  Resource Profile can be used to choose from a set of predefined resource profiles for the ceph daemons.
                  We have 3 profiles
                  lean: suitable for clusters with limited resources,
                  balanced: suitable for most use cases,
                  performance: suitable for clusters with high amount of resources.
                enum:
                - lean
                - Lean
                - balanced
                - Balanced
                - performance
                - Performance
                type: string
              resources:
                additionalProperties:
                  description: ResourceRequirements describes the compute resource
                    requirements.
                  properties:
                    claims:
                      description: |-
                        Claims lists the names of resources, defined in spec.resourceClaims,
                        that are used by this container.

                        This is an alpha field and requires enabling the
                        DynamicResourceAllocation feature gate.

                        This field is immutable. It can only be set for containers.
                      items:
                        description: ResourceClaim references one entry in PodSpec.ResourceClaims.
                        properties:
                          name:
                            description: |-
                              Name must match the name of one entry in pod.spec.resourceClaims of
                              the Pod where this field is used. It makes that resource available
                              inside a container.
                            type: string
                          request:
                            description: |-
                              Request is the name chosen for a request in the referenced claim.
                              If empty, everything from the claim is made available, otherwise
                              only the result of this request.
                            type: string
                        required:
                        - name
                        type: object
                      type: array
                      x-kubernetes-list-map-keys:
                      - name
                      x-kubernetes-list-type: map
                    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-resources-containers/
                      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. Requests cannot exceed Limits.
                        More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
                      type: object
                  type: object
                description: Resources follows the conventions of and is mapped to
                  CephCluster.Spec.Resources
                type: object
              storageDeviceSets:
                items:
                  description: |-
                    StorageDeviceSet defines a set of storage devices.
                    It configures the StorageClassDeviceSets field in Rook-Ceph.
                  properties:
                    config:
                      description: StorageDeviceSetConfig defines Ceph OSD specific
                        config options for the StorageDeviceSet
                      properties:
                        tuneFastDeviceClass:
                          description: TuneFastDeviceClass tunes the OSD when running
                            on a fast Device Class
                          type: boolean
                        tuneSlowDeviceClass:
                          description: TuneSlowDeviceClass tunes the OSD when running
                            on a slow Device Class
                          type: boolean
                      type: object
                    count:
                      description: Count is the number of devices in each StorageClassDeviceSet
                      minimum: 1
                      type: integer
                    dataPVCTemplate:
                      description: PersistentVolumeClaim is a user's request for and
                        claim to a persistent volume
                      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:
                          description: |-
                            Standard object's metadata.
                            More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
                          properties:
                            annotations:
                              additionalProperties:
                                type: string
                              type: object
                            finalizers:
                              items:
                                type: string
                              type: array
                            labels:
                              additionalProperties:
                                type: string
                              type: object
                            name:
                              type: string
                            namespace:
                              type: string
                          type: object
                        spec:
                          description: |-
                            spec defines the desired characteristics of a volume requested by a pod author.
                            More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims
                          properties:
                            accessModes:
                              description: |-
                                accessModes contains the desired access modes the volume should have.
                                More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1
                              items:
                                type: string
                              type: array
                              x-kubernetes-list-type: atomic
                            dataSource:
                              description: |-
                                dataSource field can be used to specify either:
                                * An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot)
                                * An existing PVC (PersistentVolumeClaim)
                                If the provisioner or an external controller can support the specified data source,
                                it will create a new volume based on the contents of the specified data source.
                                When the AnyVolumeDataSource feature gate is enabled, dataSource contents will be copied to dataSourceRef,
                                and dataSourceRef contents will be copied to dataSource when dataSourceRef.namespace is not specified.
                                If the namespace is specified, then dataSourceRef will not be copied to dataSource.
                              properties:
                                apiGroup:
                                  description: |-
                                    APIGroup is the group for the resource being referenced.
                                    If APIGroup is not specified, the specified Kind must be in the core API group.
                                    For any other third-party types, APIGroup is required.
                                  type: string
                                kind:
                                  description: Kind is the type of resource being
                                    referenced
                                  type: string
                                name:
                                  description: Name is the name of resource being
                                    referenced
                                  type: string
                              required:
                              - kind
                              - name
                              type: object
                              x-kubernetes-map-type: atomic
                            dataSourceRef:
                              description: |-
                                dataSourceRef specifies the object from which to populate the volume with data, if a non-empty
                                volume is desired. This may be any object from a non-empty API group (non
                                core object) or a PersistentVolumeClaim object.
                                When this field is specified, volume binding will only succeed if the type of
                                the specified object matches some installed volume populator or dynamic
                                provisioner.
                                This field will replace the functionality of the dataSource field and as such
                                if both fields are non-empty, they must have the same value. For backwards
                                compatibility, when namespace isn't specified in dataSourceRef,
                                both fields (dataSource and dataSourceRef) will be set to the same
                                value automatically if one of them is empty and the other is non-empty.
                                When namespace is specified in dataSourceRef,
                                dataSource isn't set to the same value and must be empty.
                                There are three important differences between dataSource and dataSourceRef:
                                * While dataSource only allows two specific types of objects, dataSourceRef
                                  allows any non-core object, as well as PersistentVolumeClaim objects.
                                * While dataSource ignores disallowed values (dropping them), dataSourceRef
                                  preserves all values, and generates an error if a disallowed value is
                                  specified.
                                * While dataSource only allows local objects, dataSourceRef allows objects
                                  in any namespaces.
                                (Beta) Using this field requires the AnyVolumeDataSource feature gate to be enabled.
                                (Alpha) Using the namespace field of dataSourceRef requires the CrossNamespaceVolumeDataSource feature gate to be enabled.
                              properties:
                                apiGroup:
                                  description: |-
                                    APIGroup is the group for the resource being referenced.
                                    If APIGroup is not specified, the specified Kind must be in the core API group.
                                    For any other third-party types, APIGroup is required.
                                  type: string
                                kind:
                                  description: Kind is the type of resource being
                                    referenced
                                  type: string
                                name:
                                  description: Name is the name of resource being
                                    referenced
                                  type: string
                                namespace:
                                  description: |-
                                    Namespace is the namespace of resource being referenced
                                    Note that when a namespace is specified, a gateway.networking.k8s.io/ReferenceGrant object is required in the referent namespace to allow that namespace's owner to accept the reference. See the ReferenceGrant documentation for details.
                                    (Alpha) This field requires the CrossNamespaceVolumeDataSource feature gate to be enabled.
                                  type: string
                              required:
                              - kind
                              - name
                              type: object
                            resources:
                              description: |-
                                resources represents the minimum resources the volume should have.
                                If RecoverVolumeExpansionFailure feature is enabled users are allowed to specify resource requirements
                                that are lower than previous value but must still be higher than capacity recorded in the
                                status field of the claim.
                                More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources
                              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-resources-containers/
                                  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. Requests cannot exceed Limits.
                                    More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
                                  type: object
                              type: object
                            selector:
                              description: selector is a label query over volumes
                                to consider for binding.
                              properties:
                                matchExpressions:
                                  description: matchExpressions is a list of label
                                    selector requirements. The requirements are ANDed.
                                  items:
                                    description: |-
                                      A label selector requirement is a selector that contains values, a key, and an operator that
                                      relates the key and values.
                                    properties:
                                      key:
                                        description: key is the label key that the
                                          selector applies to.
                                        type: string
                                      operator:
                                        description: |-
                                          operator represents a key's relationship to a set of values.
                                          Valid operators are In, NotIn, Exists and DoesNotExist.
                                        type: string
                                      values:
                                        description: |-
                                          values is an array of string values. If the operator is In or NotIn,
                                          the values array must be non-empty. If the operator is Exists or DoesNotExist,
                                          the values array must be empty. This array is replaced during a strategic
                                          merge patch.
                                        items:
                                          type: string
                                        type: array
                                        x-kubernetes-list-type: atomic
                                    required:
                                    - key
                                    - operator
                                    type: object
                                  type: array
                                  x-kubernetes-list-type: atomic
                                matchLabels:
                                  additionalProperties:
                                    type: string
                                  description: |-
                                    matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
                                    map is equivalent to an element of matchExpressions, whose key field is "key", the
                                    operator is "In", and the values array contains only "value". The requirements are ANDed.
                                  type: object
                              type: object
                              x-kubernetes-map-type: atomic
                            storageClassName:
                              description: |-
                                storageClassName is the name of the StorageClass required by the claim.
                                More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1
                              type: string
                            volumeAttributesClassName:
                              description: |-
                                volumeAttributesClassName may be used to set the VolumeAttributesClass used by this claim.
                                If specified, the CSI driver will create or update the volume with the attributes defined
                                in the corresponding VolumeAttributesClass. This has a different purpose than storageClassName,
                                it can be changed after the claim is created. An empty string value means that no VolumeAttributesClass
                                will be applied to the claim but it's not allowed to reset this field to empty string once it is set.
                                If unspecified and the PersistentVolumeClaim is unbound, the default VolumeAttributesClass
                                will be set by the persistentvolume controller if it exists.
                                If the resource referred to by volumeAttributesClass does not exist, this PersistentVolumeClaim will be
                                set to a Pending state, as reflected by the modifyVolumeStatus field, until such as a resource
                                exists.
                                More info: https://kubernetes.io/docs/concepts/storage/volume-attributes-classes/
                                (Beta) Using this field requires the VolumeAttributesClass feature gate to be enabled (off by default).
                              type: string
                            volumeMode:
                              description: |-
                                volumeMode defines what type of volume is required by the claim.
                                Value of Filesystem is implied when not included in claim spec.
                              type: string
                            volumeName:
                              description: volumeName is the binding reference to
                                the PersistentVolume backing this claim.
                              type: string
                          type: object
                        status:
                          description: |-
                            status represents the current information/status of a persistent volume claim.
                            Read-only.
                            More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims
                          properties:
                            accessModes:
                              description: |-
                                accessModes contains the actual access modes the volume backing the PVC has.
                                More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1
                              items:
                                type: string
                              type: array
                              x-kubernetes-list-type: atomic
                            allocatedResourceStatuses:
                              additionalProperties:
                                description: |-
                                  When a controller receives persistentvolume claim update with ClaimResourceStatus for a resource
                                  that it does not recognizes, then it should ignore that update and let other controllers
                                  handle it.
                                type: string
                              description: "allocatedResourceStatuses stores status
                                of resource being resized for the given PVC.\nKey
                                names follow standard Kubernetes label syntax. Valid
                                values are either:\n\t* Un-prefixed keys:\n\t\t- storage
                                - the capacity of the volume.\n\t* Custom resources
                                must use implementation-defined prefixed names such
                                as \"example.com/my-custom-resource\"\nApart from
                                above values - keys that are unprefixed or have kubernetes.io
                                prefix are considered\nreserved and hence may not
                                be used.\n\nClaimResourceStatus can be in any of following
                                states:\n\t- ControllerResizeInProgress:\n\t\tState
                                set when resize controller starts resizing the volume
                                in control-plane.\n\t- ControllerResizeFailed:\n\t\tState
                                set when resize has failed in resize controller with
                                a terminal error.\n\t- NodeResizePending:\n\t\tState
                                set when resize controller has finished resizing the
                                volume but further resizing of\n\t\tvolume is needed
                                on the node.\n\t- NodeResizeInProgress:\n\t\tState
                                set when kubelet starts resizing the volume.\n\t-
                                NodeResizeFailed:\n\t\tState set when resizing has
                                failed in kubelet with a terminal error. Transient
                                errors don't set\n\t\tNodeResizeFailed.\nFor example:
                                if expanding a PVC for more capacity - this field
                                can be one of the following states:\n\t- pvc.status.allocatedResourceStatus['storage']
                                = \"ControllerResizeInProgress\"\n     - pvc.status.allocatedResourceStatus['storage']
                                = \"ControllerResizeFailed\"\n     - pvc.status.allocatedResourceStatus['storage']
                                = \"NodeResizePending\"\n     - pvc.status.allocatedResourceStatus['storage']
                                = \"NodeResizeInProgress\"\n     - pvc.status.allocatedResourceStatus['storage']
                                = \"NodeResizeFailed\"\nWhen this field is not set,
                                it means that no resize operation is in progress for
                                the given PVC.\n\nA controller that receives PVC update
                                with previously unknown resourceName or ClaimResourceStatus\nshould
                                ignore the update for the purpose it was designed.
                                For example - a controller that\nonly is responsible
                                for resizing capacity of the volume, should ignore
                                PVC updates that change other valid\nresources associated
                                with PVC.\n\nThis is an alpha field and requires enabling
                                RecoverVolumeExpansionFailure feature."
                              type: object
                              x-kubernetes-map-type: granular
                            allocatedResources:
                              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: "allocatedResources tracks the resources
                                allocated to a PVC including its capacity.\nKey names
                                follow standard Kubernetes label syntax. Valid values
                                are either:\n\t* Un-prefixed keys:\n\t\t- storage
                                - the capacity of the volume.\n\t* Custom resources
                                must use implementation-defined prefixed names such
                                as \"example.com/my-custom-resource\"\nApart from
                                above values - keys that are unprefixed or have kubernetes.io
                                prefix are considered\nreserved and hence may not
                                be used.\n\nCapacity reported here may be larger than
                                the actual capacity when a volume expansion operation\nis
                                requested.\nFor storage quota, the larger value from
                                allocatedResources and PVC.spec.resources is used.\nIf
                                allocatedResources is not set, PVC.spec.resources
                                alone is used for quota calculation.\nIf a volume
                                expansion capacity request is lowered, allocatedResources
                                is only\nlowered if there are no expansion operations
                                in progress and if the actual volume capacity\nis
                                equal or lower than the requested capacity.\n\nA controller
                                that receives PVC update with previously unknown resourceName\nshould
                                ignore the update for the purpose it was designed.
                                For example - a controller that\nonly is responsible
                                for resizing capacity of the volume, should ignore
                                PVC updates that change other valid\nresources associated
                                with PVC.\n\nThis is an alpha field and requires enabling
                                RecoverVolumeExpansionFailure feature."
                              type: object
                            capacity:
                              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: capacity represents the actual resources
                                of the underlying volume.
                              type: object
                            conditions:
                              description: |-
                                conditions is the current Condition of persistent volume claim. If underlying persistent volume is being
                                resized then the Condition will be set to 'Resizing'.
                              items:
                                description: PersistentVolumeClaimCondition contains
                                  details about state of pvc
                                properties:
                                  lastProbeTime:
                                    description: lastProbeTime is the time we probed
                                      the condition.
                                    format: date-time
                                    type: string
                                  lastTransitionTime:
                                    description: lastTransitionTime is the time the
                                      condition transitioned from one status to another.
                                    format: date-time
                                    type: string
                                  message:
                                    description: message is the human-readable message
                                      indicating details about last transition.
                                    type: string
                                  reason:
                                    description: |-
                                      reason is a unique, this should be a short, machine understandable string that gives the reason
                                      for condition's last transition. If it reports "Resizing" that means the underlying
                                      persistent volume is being resized.
                                    type: string
                                  status:
                                    description: |-
                                      Status is the status of the condition.
                                      Can be True, False, Unknown.
                                      More info: https://kubernetes.io/docs/reference/kubernetes-api/config-and-storage-resources/persistent-volume-claim-v1/#:~:text=state%20of%20pvc-,conditions.status,-(string)%2C%20required
                                    type: string
                                  type:
                                    description: |-
                                      Type is the type of the condition.
                                      More info: https://kubernetes.io/docs/reference/kubernetes-api/config-and-storage-resources/persistent-volume-claim-v1/#:~:text=set%20to%20%27ResizeStarted%27.-,PersistentVolumeClaimCondition,-contains%20details%20about
                                    type: string
                                required:
                                - status
                                - type
                                type: object
                              type: array
                              x-kubernetes-list-map-keys:
                              - type
                              x-kubernetes-list-type: map
                            currentVolumeAttributesClassName:
                              description: |-
                                currentVolumeAttributesClassName is the current name of the VolumeAttributesClass the PVC is using.
                                When unset, there is no VolumeAttributeClass applied to this PersistentVolumeClaim
                                This is a beta field and requires enabling VolumeAttributesClass feature (off by default).
                              type: string
                            modifyVolumeStatus:
                              description: |-
                                ModifyVolumeStatus represents the status object of ControllerModifyVolume operation.
                                When this is unset, there is no ModifyVolume operation being attempted.
                                This is a beta field and requires enabling VolumeAttributesClass feature (off by default).
                              properties:
                                status:
                                  description: "status is the status of the ControllerModifyVolume
                                    operation. It can be in any of following states:\n
                                    - Pending\n   Pending indicates that the PersistentVolumeClaim
                                    cannot be modified due to unmet requirements,
                                    such as\n   the specified VolumeAttributesClass
                                    not existing.\n - InProgress\n   InProgress indicates
                                    that the volume is being modified.\n - Infeasible\n
                                    \ Infeasible indicates that the request has been
                                    rejected as invalid by the CSI driver. To\n\t
                                    \ resolve the error, a valid VolumeAttributesClass
                                    needs to be specified.\nNote: New statuses can
                                    be added in the future. Consumers should check
                                    for unknown statuses and fail appropriately."
                                  type: string
                                targetVolumeAttributesClassName:
                                  description: targetVolumeAttributesClassName is
                                    the name of the VolumeAttributesClass the PVC
                                    currently being reconciled
                                  type: string
                              required:
                              - status
                              type: object
                            phase:
                              description: phase represents the current phase of PersistentVolumeClaim.
                              type: string
                          type: object
                      type: object
                    deviceClass:
                      description: |-
                        DeviceClass is an optional, fine-grained property of DeviceType.
                        If non empty, it defines the 'crushDeviceClass' value as used by ceph's
                        CRUSH map. If empty, then operator will set 'crushDeviceClass' to SSD and
                        'TuneFastDeviceClass' to true
                      type: string
                    deviceType:
                      description: |-
                        DeviceType is the value of device type in
                        this StorageDeviceSet. It can have one of the
                        three values (SSD, HDD, NVMe)
                      enum:
                      - SSD
                      - ssd
                      - HDD
                      - hdd
                      - NVMe
                      - NVME
                      - nvme
                      type: string
                    encrypted:
                      description: Whether to encrypt the deviceSet or not
                      type: boolean
                    initialWeight:
                      description: |-
                        InitialWeight is an optional explicit OSD weight value in TiB units.
                        If non empty, it defines the 'CrushInitialWeight' value which is
                        assigned to ceph OSD upon init
                      pattern: ^([0-9]*[.])?[0-9]+(Ti[B])$
                      type: string
                    metadataPVCTemplate:
                      description: PersistentVolumeClaim is a user's request for and
                        claim to a persistent volume
                      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:
                          description: |-
                            Standard object's metadata.
                            More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
                          properties:
                            annotations:
                              additionalProperties:
                                type: string
                              type: object
                            finalizers:
                              items:
                                type: string
                              type: array
                            labels:
                              additionalProperties:
                                type: string
                              type: object
                            name:
                              type: string
                            namespace:
                              type: string
                          type: object
                        spec:
                          description: |-
                            spec defines the desired characteristics of a volume requested by a pod author.
                            More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims
                          properties:
                            accessModes:
                              description: |-
                                accessModes contains the desired access modes the volume should have.
                                More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1
                              items:
                                type: string
                              type: array
                              x-kubernetes-list-type: atomic
                            dataSource:
                              description: |-
                                dataSource field can be used to specify either:
                                * An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot)
                                * An existing PVC (PersistentVolumeClaim)
                                If the provisioner or an external controller can support the specified data source,
                                it will create a new volume based on the contents of the specified data source.
                                When the AnyVolumeDataSource feature gate is enabled, dataSource contents will be copied to dataSourceRef,
                                and dataSourceRef contents will be copied to dataSource when dataSourceRef.namespace is not specified.
                                If the namespace is specified, then dataSourceRef will not be copied to dataSource.
                              properties:
                                apiGroup:
                                  description: |-
                                    APIGroup is the group for the resource being referenced.
                                    If APIGroup is not specified, the specified Kind must be in the core API group.
                                    For any other third-party types, APIGroup is required.
                                  type: string
                                kind:
                                  description: Kind is the type of resource being
                                    referenced
                                  type: string
                                name:
                                  description: Name is the name of resource being
                                    referenced
                                  type: string
                              required:
                              - kind
                              - name
                              type: object
                              x-kubernetes-map-type: atomic
                            dataSourceRef:
                              description: |-
                                dataSourceRef specifies the object from which to populate the volume with data, if a non-empty
                                volume is desired. This may be any object from a non-empty API group (non
                                core object) or a PersistentVolumeClaim object.
                                When this field is specified, volume binding will only succeed if the type of
                                the specified object matches some installed volume populator or dynamic
                                provisioner.
                                This field will replace the functionality of the dataSource field and as such
                                if both fields are non-empty, they must have the same value. For backwards
                                compatibility, when namespace isn't specified in dataSourceRef,
                                both fields (dataSource and dataSourceRef) will be set to the same
                                value automatically if one of them is empty and the other is non-empty.
                                When namespace is specified in dataSourceRef,
                                dataSource isn't set to the same value and must be empty.
                                There are three important differences between dataSource and dataSourceRef:
                                * While dataSource only allows two specific types of objects, dataSourceRef
                                  allows any non-core object, as well as PersistentVolumeClaim objects.
                                * While dataSource ignores disallowed values (dropping them), dataSourceRef
                                  preserves all values, and generates an error if a disallowed value is
                                  specified.
                                * While dataSource only allows local objects, dataSourceRef allows objects
                                  in any namespaces.
                                (Beta) Using this field requires the AnyVolumeDataSource feature gate to be enabled.
                                (Alpha) Using the namespace field of dataSourceRef requires the CrossNamespaceVolumeDataSource feature gate to be enabled.
                              properties:
                                apiGroup:
                                  description: |-
                                    APIGroup is the group for the resource being referenced.
                                    If APIGroup is not specified, the specified Kind must be in the core API group.
                                    For any other third-party types, APIGroup is required.
                                  type: string
                                kind:
                                  description: Kind is the type of resource being
                                    referenced
                                  type: string
                                name:
                                  description: Name is the name of resource being
                                    referenced
                                  type: string
                                namespace:
                                  description: |-
                                    Namespace is the namespace of resource being referenced
                                    Note that when a namespace is specified, a gateway.networking.k8s.io/ReferenceGrant object is required in the referent namespace to allow that namespace's owner to accept the reference. See the ReferenceGrant documentation for details.
                                    (Alpha) This field requires the CrossNamespaceVolumeDataSource feature gate to be enabled.
                                  type: string
                              required:
                              - kind
                              - name
                              type: object
                            resources:
                              description: |-
                                resources represents the minimum resources the volume should have.
                                If RecoverVolumeExpansionFailure feature is enabled users are allowed to specify resource requirements
                                that are lower than previous value but must still be higher than capacity recorded in the
                                status field of the claim.
                                More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources
                              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-resources-containers/
                                  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. Requests cannot exceed Limits.
                                    More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
                                  type: object
                              type: object
                            selector:
                              description: selector is a label query over volumes
                                to consider for binding.
                              properties:
                                matchExpressions:
                                  description: matchExpressions is a list of label
                                    selector requirements. The requirements are ANDed.
                                  items:
                                    description: |-
                                      A label selector requirement is a selector that contains values, a key, and an operator that
                                      relates the key and values.
                                    properties:
                                      key:
                                        description: key is the label key that the
                                          selector applies to.
                                        type: string
                                      operator:
                                        description: |-
                                          operator represents a key's relationship to a set of values.
                                          Valid operators are In, NotIn, Exists and DoesNotExist.
                                        type: string
                                      values:
                                        description: |-
                                          values is an array of string values. If the operator is In or NotIn,
                                          the values array must be non-empty. If the operator is Exists or DoesNotExist,
                                          the values array must be empty. This array is replaced during a strategic
                                          merge patch.
                                        items:
                                          type: string
                                        type: array
                                        x-kubernetes-list-type: atomic
                                    required:
                                    - key
                                    - operator
                                    type: object
                                  type: array
                                  x-kubernetes-list-type: atomic
                                matchLabels:
                                  additionalProperties:
                                    type: string
                                  description: |-
                                    matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
                                    map is equivalent to an element of matchExpressions, whose key field is "key", the
                                    operator is "In", and the values array contains only "value". The requirements are ANDed.
                                  type: object
                              type: object
                              x-kubernetes-map-type: atomic
                            storageClassName:
                              description: |-
                                storageClassName is the name of the StorageClass required by the claim.
                                More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1
                              type: string
                            volumeAttributesClassName:
                              description: |-
                                volumeAttributesClassName may be used to set the VolumeAttributesClass used by this claim.
                                If specified, the CSI driver will create or update the volume with the attributes defined
                                in the corresponding VolumeAttributesClass. This has a different purpose than storageClassName,
                                it can be changed after the claim is created. An empty string value means that no VolumeAttributesClass
                                will be applied to the claim but it's not allowed to reset this field to empty string once it is set.
                                If unspecified and the PersistentVolumeClaim is unbound, the default VolumeAttributesClass
                                will be set by the persistentvolume controller if it exists.
                                If the resource referred to by volumeAttributesClass does not exist, this PersistentVolumeClaim will be
                                set to a Pending state, as reflected by the modifyVolumeStatus field, until such as a resource
                                exists.
                                More info: https://kubernetes.io/docs/concepts/storage/volume-attributes-classes/
                                (Beta) Using this field requires the VolumeAttributesClass feature gate to be enabled (off by default).
                              type: string
                            volumeMode:
                              description: |-
                                volumeMode defines what type of volume is required by the claim.
                                Value of Filesystem is implied when not included in claim spec.
                              type: string
                            volumeName:
                              description: volumeName is the binding reference to
                                the PersistentVolume backing this claim.
                              type: string
                          type: object
                        status:
                          description: |-
                            status represents the current information/status of a persistent volume claim.
                            Read-only.
                            More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims
                          properties:
                            accessModes:
                              description: |-
                                accessModes contains the actual access modes the volume backing the PVC has.
                                More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1
                              items:
                                type: string
                              type: array
                              x-kubernetes-list-type: atomic
                            allocatedResourceStatuses:
                              additionalProperties:
                                description: |-
                                  When a controller receives persistentvolume claim update with ClaimResourceStatus for a resource
                                  that it does not recognizes, then it should ignore that update and let other controllers
                                  handle it.
                                type: string
                              description: "allocatedResourceStatuses stores status
                                of resource being resized for the given PVC.\nKey
                                names follow standard Kubernetes label syntax. Valid
                                values are either:\n\t* Un-prefixed keys:\n\t\t- storage
                                - the capacity of the volume.\n\t* Custom resources
                                must use implementation-defined prefixed names such
                                as \"example.com/my-custom-resource\"\nApart from
                                above values - keys that are unprefixed or have kubernetes.io
                                prefix are considered\nreserved and hence may not
                                be used.\n\nClaimResourceStatus can be in any of following
                                states:\n\t- ControllerResizeInProgress:\n\t\tState
                                set when resize controller starts resizing the volume
                                in control-plane.\n\t- ControllerResizeFailed:\n\t\tState
                                set when resize has failed in resize controller with
                                a terminal error.\n\t- NodeResizePending:\n\t\tState
                                set when resize controller has finished resizing the
                                volume but further resizing of\n\t\tvolume is needed
                                on the node.\n\t- NodeResizeInProgress:\n\t\tState
                                set when kubelet starts resizing the volume.\n\t-
                                NodeResizeFailed:\n\t\tState set when resizing has
                                failed in kubelet with a terminal error. Transient
                                errors don't set\n\t\tNodeResizeFailed.\nFor example:
                                if expanding a PVC for more capacity - this field
                                can be one of the following states:\n\t- pvc.status.allocatedResourceStatus['storage']
                                = \"ControllerResizeInProgress\"\n     - pvc.status.allocatedResourceStatus['storage']
                                = \"ControllerResizeFailed\"\n     - pvc.status.allocatedResourceStatus['storage']
                                = \"NodeResizePending\"\n     - pvc.status.allocatedResourceStatus['storage']
                                = \"NodeResizeInProgress\"\n     - pvc.status.allocatedResourceStatus['storage']
                                = \"NodeResizeFailed\"\nWhen this field is not set,
                                it means that no resize operation is in progress for
                                the given PVC.\n\nA controller that receives PVC update
                                with previously unknown resourceName or ClaimResourceStatus\nshould
                                ignore the update for the purpose it was designed.
                                For example - a controller that\nonly is responsible
                                for resizing capacity of the volume, should ignore
                                PVC updates that change other valid\nresources associated
                                with PVC.\n\nThis is an alpha field and requires enabling
                                RecoverVolumeExpansionFailure feature."
                              type: object
                              x-kubernetes-map-type: granular
                            allocatedResources:
                              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: "allocatedResources tracks the resources
                                allocated to a PVC including its capacity.\nKey names
                                follow standard Kubernetes label syntax. Valid values
                                are either:\n\t* Un-prefixed keys:\n\t\t- storage
                                - the capacity of the volume.\n\t* Custom resources
                                must use implementation-defined prefixed names such
                                as \"example.com/my-custom-resource\"\nApart from
                                above values - keys that are unprefixed or have kubernetes.io
                                prefix are considered\nreserved and hence may not
                                be used.\n\nCapacity reported here may be larger than
                                the actual capacity when a volume expansion operation\nis
                                requested.\nFor storage quota, the larger value from
                                allocatedResources and PVC.spec.resources is used.\nIf
                                allocatedResources is not set, PVC.spec.resources
                                alone is used for quota calculation.\nIf a volume
                                expansion capacity request is lowered, allocatedResources
                                is only\nlowered if there are no expansion operations
                                in progress and if the actual volume capacity\nis
                                equal or lower than the requested capacity.\n\nA controller
                                that receives PVC update with previously unknown resourceName\nshould
                                ignore the update for the purpose it was designed.
                                For example - a controller that\nonly is responsible
                                for resizing capacity of the volume, should ignore
                                PVC updates that change other valid\nresources associated
                                with PVC.\n\nThis is an alpha field and requires enabling
                                RecoverVolumeExpansionFailure feature."
                              type: object
                            capacity:
                              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: capacity represents the actual resources
                                of the underlying volume.
                              type: object
                            conditions:
                              description: |-
                                conditions is the current Condition of persistent volume claim. If underlying persistent volume is being
                                resized then the Condition will be set to 'Resizing'.
                              items:
                                description: PersistentVolumeClaimCondition contains
                                  details about state of pvc
                                properties:
                                  lastProbeTime:
                                    description: lastProbeTime is the time we probed
                                      the condition.
                                    format: date-time
                                    type: string
                                  lastTransitionTime:
                                    description: lastTransitionTime is the time the
                                      condition transitioned from one status to another.
                                    format: date-time
                                    type: string
                                  message:
                                    description: message is the human-readable message
                                      indicating details about last transition.
                                    type: string
                                  reason:
                                    description: |-
                                      reason is a unique, this should be a short, machine understandable string that gives the reason
                                      for condition's last transition. If it reports "Resizing" that means the underlying
                                      persistent volume is being resized.
                                    type: string
                                  status:
                                    description: |-
                                      Status is the status of the condition.
                                      Can be True, False, Unknown.
                                      More info: https://kubernetes.io/docs/reference/kubernetes-api/config-and-storage-resources/persistent-volume-claim-v1/#:~:text=state%20of%20pvc-,conditions.status,-(string)%2C%20required
                                    type: string
                                  type:
                                    description: |-
                                      Type is the type of the condition.
                                      More info: https://kubernetes.io/docs/reference/kubernetes-api/config-and-storage-resources/persistent-volume-claim-v1/#:~:text=set%20to%20%27ResizeStarted%27.-,PersistentVolumeClaimCondition,-contains%20details%20about
                                    type: string
                                required:
                                - status
                                - type
                                type: object
                              type: array
                              x-kubernetes-list-map-keys:
                              - type
                              x-kubernetes-list-type: map
                            currentVolumeAttributesClassName:
                              description: |-
                                currentVolumeAttributesClassName is the current name of the VolumeAttributesClass the PVC is using.
                                When unset, there is no VolumeAttributeClass applied to this PersistentVolumeClaim
                                This is a beta field and requires enabling VolumeAttributesClass feature (off by default).
                              type: string
                            modifyVolumeStatus:
                              description: |-
                                ModifyVolumeStatus represents the status object of ControllerModifyVolume operation.
                                When this is unset, there is no ModifyVolume operation being attempted.
                                This is a beta field and requires enabling VolumeAttributesClass feature (off by default).
                              properties:
                                status:
                                  description: "status is the status of the ControllerModifyVolume
                                    operation. It can be in any of following states:\n
                                    - Pending\n   Pending indicates that the PersistentVolumeClaim
                                    cannot be modified due to unmet requirements,
                                    such as\n   the specified VolumeAttributesClass
                                    not existing.\n - InProgress\n   InProgress indicates
                                    that the volume is being modified.\n - Infeasible\n
                                    \ Infeasible indicates that the request has been
                                    rejected as invalid by the CSI driver. To\n\t
                                    \ resolve the error, a valid VolumeAttributesClass
                                    needs to be specified.\nNote: New statuses can
                                    be added in the future. Consumers should check
                                    for unknown statuses and fail appropriately."
                                  type: string
                                targetVolumeAttributesClassName:
                                  description: targetVolumeAttributesClassName is
                                    the name of the VolumeAttributesClass the PVC
                                    currently being reconciled
                                  type: string
                              required:
                              - status
                              type: object
                            phase:
                              description: phase represents the current phase of PersistentVolumeClaim.
                              type: string
                          type: object
                      type: object
                    name:
                      type: string
                    placement:
                      description: Placement is the placement for an object
                      properties:
                        nodeAffinity:
                          description: NodeAffinity is a group of node affinity scheduling
                            rules
                          properties:
                            preferredDuringSchedulingIgnoredDuringExecution:
                              description: |-
                                The scheduler will prefer to schedule pods to nodes that satisfy
                                the affinity expressions specified by this field, but it may choose
                                a node that violates one or more of the expressions. The node that is
                                most preferred is the one with the greatest sum of weights, i.e.
                                for each node that meets all of the scheduling requirements (resource
                                request, requiredDuringScheduling affinity expressions, etc.),
                                compute a sum by iterating through the elements of this field and adding
                                "weight" to the sum if the node matches the corresponding matchExpressions; the
                                node(s) with the highest sum are the most preferred.
                              items:
                                description: |-
                                  An empty preferred scheduling term matches all objects with implicit weight 0
                                  (i.e. it's a no-op). A null preferred scheduling term matches no objects (i.e. is also a no-op).
                                properties:
                                  preference:
                                    description: A node selector term, associated
                                      with the corresponding weight.
                                    properties:
                                      matchExpressions:
                                        description: A list of node selector requirements
                                          by node's labels.
                                        items:
                                          description: |-
                                            A node selector requirement is a selector that contains values, a key, and an operator
                                            that relates the key and values.
                                          properties:
                                            key:
                                              description: The label key that the
                                                selector applies to.
                                              type: string
                                            operator:
                                              description: |-
                                                Represents a key's relationship to a set of values.
                                                Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.
                                              type: string
                                            values:
                                              description: |-
                                                An array of string values. If the operator is In or NotIn,
                                                the values array must be non-empty. If the operator is Exists or DoesNotExist,
                                                the values array must be empty. If the operator is Gt or Lt, the values
                                                array must have a single element, which will be interpreted as an integer.
                                                This array is replaced during a strategic merge patch.
                                              items:
                                                type: string
                                              type: array
                                              x-kubernetes-list-type: atomic
                                          required:
                                          - key
                                          - operator
                                          type: object
                                        type: array
                                        x-kubernetes-list-type: atomic
                                      matchFields:
                                        description: A list of node selector requirements
                                          by node's fields.
                                        items:
                                          description: |-
                                            A node selector requirement is a selector that contains values, a key, and an operator
                                            that relates the key and values.
                                          properties:
                                            key:
                                              description: The label key that the
                                                selector applies to.
                                              type: string
                                            operator:
                                              description: |-
                                                Represents a key's relationship to a set of values.
                                                Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.
                                              type: string
                                            values:
                                              description: |-
                                                An array of string values. If the operator is In or NotIn,
                                                the values array must be non-empty. If the operator is Exists or DoesNotExist,
                                                the values array must be empty. If the operator is Gt or Lt, the values
                                                array must have a single element, which will be interpreted as an integer.
                                                This array is replaced during a strategic merge patch.
                                              items:
                                                type: string
                                              type: array
                                              x-kubernetes-list-type: atomic
                                          required:
                                          - key
                                          - operator
                                          type: object
                                        type: array
                                        x-kubernetes-list-type: atomic
                                    type: object
                                    x-kubernetes-map-type: atomic
                                  weight:
                                    description: Weight associated with matching the
                                      corresponding nodeSelectorTerm, in the range
                                      1-100.
                                    format: int32
                                    type: integer
                                required:
                                - preference
                                - weight
                                type: object
                              type: array
                              x-kubernetes-list-type: atomic
                            requiredDuringSchedulingIgnoredDuringExecution:
                              description: |-
                                If the affinity requirements specified by this field are not met at
                                scheduling time, the pod will not be scheduled onto the node.
                                If the affinity requirements specified by this field cease to be met
                                at some point during pod execution (e.g. due to an update), the system
                                may or may not try to eventually evict the pod from its node.
                              properties:
                                nodeSelectorTerms:
                                  description: Required. A list of node selector terms.
                                    The terms are ORed.
                                  items:
                                    description: |-
                                      A null or empty node selector term matches no objects. The requirements of
                                      them are ANDed.
                                      The TopologySelectorTerm type implements a subset of the NodeSelectorTerm.
                                    properties:
                                      matchExpressions:
                                        description: A list of node selector requirements
                                          by node's labels.
                                        items:
                                          description: |-
                                            A node selector requirement is a selector that contains values, a key, and an operator
                                            that relates the key and values.
                                          properties:
                                            key:
                                              description: The label key that the
                                                selector applies to.
                                              type: string
                                            operator:
                                              description: |-
                                                Represents a key's relationship to a set of values.
                                                Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.
                                              type: string
                                            values:
                                              description: |-
                                                An array of string values. If the operator is In or NotIn,
                                                the values array must be non-empty. If the operator is Exists or DoesNotExist,
                                                the values array must be empty. If the operator is Gt or Lt, the values
                                                array must have a single element, which will be interpreted as an integer.
                                                This array is replaced during a strategic merge patch.
                                              items:
                                                type: string
                                              type: array
                                              x-kubernetes-list-type: atomic
                                          required:
                                          - key
                                          - operator
                                          type: object
                                        type: array
                                        x-kubernetes-list-type: atomic
                                      matchFields:
                                        description: A list of node selector requirements
                                          by node's fields.
                                        items:
                                          description: |-
                                            A node selector requirement is a selector that contains values, a key, and an operator
                                            that relates the key and values.
                                          properties:
                                            key:
                                              description: The label key that the
                                                selector applies to.
                                              type: string
                                            operator:
                                              description: |-
                                                Represents a key's relationship to a set of values.
                                                Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.
                                              type: string
                                            values:
                                              description: |-
                                                An array of string values. If the operator is In or NotIn,
                                                the values array must be non-empty. If the operator is Exists or DoesNotExist,
                                                the values array must be empty. If the operator is Gt or Lt, the values
                                                array must have a single element, which will be interpreted as an integer.
                                                This array is replaced during a strategic merge patch.
                                              items:
                                                type: string
                                              type: array
                                              x-kubernetes-list-type: atomic
                                          required:
                                          - key
                                          - operator
                                          type: object
                                        type: array
                                        x-kubernetes-list-type: atomic
                                    type: object
                                    x-kubernetes-map-type: atomic
                                  type: array
                                  x-kubernetes-list-type: atomic
                              required:
                              - nodeSelectorTerms
                              type: object
                              x-kubernetes-map-type: atomic
                          type: object
                        podAffinity:
                          description: PodAffinity is a group of inter pod affinity
                            scheduling rules
                          properties:
                            preferredDuringSchedulingIgnoredDuringExecution:
                              description: |-
                                The scheduler will prefer to schedule pods to nodes that satisfy
                                the affinity expressions specified by this field, but it may choose
                                a node that violates one or more of the expressions. The node that is
                                most preferred is the one with the greatest sum of weights, i.e.
                                for each node that meets all of the scheduling requirements (resource
                                request, requiredDuringScheduling affinity expressions, etc.),
                                compute a sum by iterating through the elements of this field and adding
                                "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the
                                node(s) with the highest sum are the most preferred.
                              items:
                                description: The weights of all of the matched WeightedPodAffinityTerm
                                  fields are added per-node to find the most preferred
                                  node(s)
                                properties:
                                  podAffinityTerm:
                                    description: Required. A pod affinity term, associated
                                      with the corresponding weight.
                                    properties:
                                      labelSelector:
                                        description: |-
                                          A label query over a set of resources, in this case pods.
                                          If it's null, this PodAffinityTerm matches with no Pods.
                                        properties:
                                          matchExpressions:
                                            description: matchExpressions is a list
                                              of label selector requirements. The
                                              requirements are ANDed.
                                            items:
                                              description: |-
                                                A label selector requirement is a selector that contains values, a key, and an operator that
                                                relates the key and values.
                                              properties:
                                                key:
                                                  description: key is the label key
                                                    that the selector applies to.
                                                  type: string
                                                operator:
                                                  description: |-
                                                    operator represents a key's relationship to a set of values.
                                                    Valid operators are In, NotIn, Exists and DoesNotExist.
                                                  type: string
                                                values:
                                                  description: |-
                                                    values is an array of string values. If the operator is In or NotIn,
                                                    the values array must be non-empty. If the operator is Exists or DoesNotExist,
                                                    the values array must be empty. This array is replaced during a strategic
                                                    merge patch.
                                                  items:
                                                    type: string
                                                  type: array
                                                  x-kubernetes-list-type: atomic
                                              required:
                                              - key
                                              - operator
                                              type: object
                                            type: array
                                            x-kubernetes-list-type: atomic
                                          matchLabels:
                                            additionalProperties:
                                              type: string
                                            description: |-
                                              matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
                                              map is equivalent to an element of matchExpressions, whose key field is "key", the
                                              operator is "In", and the values array contains only "value". The requirements are ANDed.
                                            type: object
                                        type: object
                                        x-kubernetes-map-type: atomic
                                      matchLabelKeys:
                                        description: |-
                                          MatchLabelKeys is a set of pod label keys to select which pods will
                                          be taken into consideration. The keys are used to lookup values from the
                                          incoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)`
                                          to select the group of existing pods which pods will be taken into consideration
                                          for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming
                                          pod labels will be ignored. The default value is empty.
                                          The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                          Also, matchLabelKeys cannot be set when labelSelector isn't set.
                                          This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                        items:
                                          type: string
                                        type: array
                                        x-kubernetes-list-type: atomic
                                      mismatchLabelKeys:
                                        description: |-
                                          MismatchLabelKeys is a set of pod label keys to select which pods will
                                          be taken into consideration. The keys are used to lookup values from the
                                          incoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)`
                                          to select the group of existing pods which pods will be taken into consideration
                                          for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming
                                          pod labels will be ignored. The default value is empty.
                                          The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                          Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
                                          This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                        items:
                                          type: string
                                        type: array
                                        x-kubernetes-list-type: atomic
                                      namespaceSelector:
                                        description: |-
                                          A label query over the set of namespaces that the term applies to.
                                          The term is applied to the union of the namespaces selected by this field
                                          and the ones listed in the namespaces field.
                                          null selector and null or empty namespaces list means "this pod's namespace".
                                          An empty selector ({}) matches all namespaces.
                                        properties:
                                          matchExpressions:
                                            description: matchExpressions is a list
                                              of label selector requirements. The
                                              requirements are ANDed.
                                            items:
                                              description: |-
                                                A label selector requirement is a selector that contains values, a key, and an operator that
                                                relates the key and values.
                                              properties:
                                                key:
                                                  description: key is the label key
                                                    that the selector applies to.
                                                  type: string
                                                operator:
                                                  description: |-
                                                    operator represents a key's relationship to a set of values.
                                                    Valid operators are In, NotIn, Exists and DoesNotExist.
                                                  type: string
                                                values:
                                                  description: |-
                                                    values is an array of string values. If the operator is In or NotIn,
                                                    the values array must be non-empty. If the operator is Exists or DoesNotExist,
                                                    the values array must be empty. This array is replaced during a strategic
                                                    merge patch.
                                                  items:
                                                    type: string
                                                  type: array
                                                  x-kubernetes-list-type: atomic
                                              required:
                                              - key
                                              - operator
                                              type: object
                                            type: array
                                            x-kubernetes-list-type: atomic
                                          matchLabels:
                                            additionalProperties:
                                              type: string
                                            description: |-
                                              matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
                                              map is equivalent to an element of matchExpressions, whose key field is "key", the
                                              operator is "In", and the values array contains only "value". The requirements are ANDed.
                                            type: object
                                        type: object
                                        x-kubernetes-map-type: atomic
                                      namespaces:
                                        description: |-
                                          namespaces specifies a static list of namespace names that the term applies to.
                                          The term is applied to the union of the namespaces listed in this field
                                          and the ones selected by namespaceSelector.
                                          null or empty namespaces list and null namespaceSelector means "this pod's namespace".
                                        items:
                                          type: string
                                        type: array
                                        x-kubernetes-list-type: atomic
                                      topologyKey:
                                        description: |-
                                          This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching
                                          the labelSelector in the specified namespaces, where co-located is defined as running on a node
                                          whose value of the label with key topologyKey matches that of any node on which any of the
                                          selected pods is running.
                                          Empty topologyKey is not allowed.
                                        type: string
                                    required:
                                    - topologyKey
                                    type: object
                                  weight:
                                    description: |-
                                      weight associated with matching the corresponding podAffinityTerm,
                                      in the range 1-100.
                                    format: int32
                                    type: integer
                                required:
                                - podAffinityTerm
                                - weight
                                type: object
                              type: array
                              x-kubernetes-list-type: atomic
                            requiredDuringSchedulingIgnoredDuringExecution:
                              description: |-
                                If the affinity requirements specified by this field are not met at
                                scheduling time, the pod will not be scheduled onto the node.
                                If the affinity requirements specified by this field cease to be met
                                at some point during pod execution (e.g. due to a pod label update), the
                                system may or may not try to eventually evict the pod from its node.
                                When there are multiple elements, the lists of nodes corresponding to each
                                podAffinityTerm are intersected, i.e. all terms must be satisfied.
                              items:
                                description: |-
                                  Defines a set of pods (namely those matching the labelSelector
                                  relative to the given namespace(s)) that this pod should be
                                  co-located (affinity) or not co-located (anti-affinity) with,
                                  where co-located is defined as running on a node whose value of
                                  the label with key <topologyKey> matches that of any node on which
                                  a pod of the set of pods is running
                                properties:
                                  labelSelector:
                                    description: |-
                                      A label query over a set of resources, in this case pods.
                                      If it's null, this PodAffinityTerm matches with no Pods.
                                    properties:
                                      matchExpressions:
                                        description: matchExpressions is a list of
                                          label selector requirements. The requirements
                                          are ANDed.
                                        items:
                                          description: |-
                                            A label selector requirement is a selector that contains values, a key, and an operator that
                                            relates the key and values.
                                          properties:
                                            key:
                                              description: key is the label key that
                                                the selector applies to.
                                              type: string
                                            operator:
                                              description: |-
                                                operator represents a key's relationship to a set of values.
                                                Valid operators are In, NotIn, Exists and DoesNotExist.
                                              type: string
                                            values:
                                              description: |-
                                                values is an array of string values. If the operator is In or NotIn,
                                                the values array must be non-empty. If the operator is Exists or DoesNotExist,
                                                the values array must be empty. This array is replaced during a strategic
                                                merge patch.
                                              items:
                                                type: string
                                              type: array
                                              x-kubernetes-list-type: atomic
                                          required:
                                          - key
                                          - operator
                                          type: object
                                        type: array
                                        x-kubernetes-list-type: atomic
                                      matchLabels:
                                        additionalProperties:
                                          type: string
                                        description: |-
                                          matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
                                          map is equivalent to an element of matchExpressions, whose key field is "key", the
                                          operator is "In", and the values array contains only "value". The requirements are ANDed.
                                        type: object
                                    type: object
                                    x-kubernetes-map-type: atomic
                                  matchLabelKeys:
                                    description: |-
                                      MatchLabelKeys is a set of pod label keys to select which pods will
                                      be taken into consideration. The keys are used to lookup values from the
                                      incoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)`
                                      to select the group of existing pods which pods will be taken into consideration
                                      for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming
                                      pod labels will be ignored. The default value is empty.
                                      The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                      Also, matchLabelKeys cannot be set when labelSelector isn't set.
                                      This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                    items:
                                      type: string
                                    type: array
                                    x-kubernetes-list-type: atomic
                                  mismatchLabelKeys:
                                    description: |-
                                      MismatchLabelKeys is a set of pod label keys to select which pods will
                                      be taken into consideration. The keys are used to lookup values from the
                                      incoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)`
                                      to select the group of existing pods which pods will be taken into consideration
                                      for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming
                                      pod labels will be ignored. The default value is empty.
                                      The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                      Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
                                      This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                    items:
                                      type: string
                                    type: array
                                    x-kubernetes-list-type: atomic
                                  namespaceSelector:
                                    description: |-
                                      A label query over the set of namespaces that the term applies to.
                                      The term is applied to the union of the namespaces selected by this field
                                      and the ones listed in the namespaces field.
                                      null selector and null or empty namespaces list means "this pod's namespace".
                                      An empty selector ({}) matches all namespaces.
                                    properties:
                                      matchExpressions:
                                        description: matchExpressions is a list of
                                          label selector requirements. The requirements
                                          are ANDed.
                                        items:
                                          description: |-
                                            A label selector requirement is a selector that contains values, a key, and an operator that
                                            relates the key and values.
                                          properties:
                                            key:
                                              description: key is the label key that
                                                the selector applies to.
                                              type: string
                                            operator:
                                              description: |-
                                                operator represents a key's relationship to a set of values.
                                                Valid operators are In, NotIn, Exists and DoesNotExist.
                                              type: string
                                            values:
                                              description: |-
                                                values is an array of string values. If the operator is In or NotIn,
                                                the values array must be non-empty. If the operator is Exists or DoesNotExist,
                                                the values array must be empty. This array is replaced during a strategic
                                                merge patch.
                                              items:
                                                type: string
                                              type: array
                                              x-kubernetes-list-type: atomic
                                          required:
                                          - key
                                          - operator
                                          type: object
                                        type: array
                                        x-kubernetes-list-type: atomic
                                      matchLabels:
                                        additionalProperties:
                                          type: string
                                        description: |-
                                          matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
                                          map is equivalent to an element of matchExpressions, whose key field is "key", the
                                          operator is "In", and the values array contains only "value". The requirements are ANDed.
                                        type: object
                                    type: object
                                    x-kubernetes-map-type: atomic
                                  namespaces:
                                    description: |-
                                      namespaces specifies a static list of namespace names that the term applies to.
                                      The term is applied to the union of the namespaces listed in this field
                                      and the ones selected by namespaceSelector.
                                      null or empty namespaces list and null namespaceSelector means "this pod's namespace".
                                    items:
                                      type: string
                                    type: array
                                    x-kubernetes-list-type: atomic
                                  topologyKey:
                                    description: |-
                                      This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching
                                      the labelSelector in the specified namespaces, where co-located is defined as running on a node
                                      whose value of the label with key topologyKey matches that of any node on which any of the
                                      selected pods is running.
                                      Empty topologyKey is not allowed.
                                    type: string
                                required:
                                - topologyKey
                                type: object
                              type: array
                              x-kubernetes-list-type: atomic
                          type: object
                        podAntiAffinity:
                          description: PodAntiAffinity is a group of inter pod anti
                            affinity scheduling rules
                          properties:
                            preferredDuringSchedulingIgnoredDuringExecution:
                              description: |-
                                The scheduler will prefer to schedule pods to nodes that satisfy
                                the anti-affinity expressions specified by this field, but it may choose
                                a node that violates one or more of the expressions. The node that is
                                most preferred is the one with the greatest sum of weights, i.e.
                                for each node that meets all of the scheduling requirements (resource
                                request, requiredDuringScheduling anti-affinity expressions, etc.),
                                compute a sum by iterating through the elements of this field and adding
                                "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the
                                node(s) with the highest sum are the most preferred.
                              items:
                                description: The weights of all of the matched WeightedPodAffinityTerm
                                  fields are added per-node to find the most preferred
                                  node(s)
                                properties:
                                  podAffinityTerm:
                                    description: Required. A pod affinity term, associated
                                      with the corresponding weight.
                                    properties:
                                      labelSelector:
                                        description: |-
                                          A label query over a set of resources, in this case pods.
                                          If it's null, this PodAffinityTerm matches with no Pods.
                                        properties:
                                          matchExpressions:
                                            description: matchExpressions is a list
                                              of label selector requirements. The
                                              requirements are ANDed.
                                            items:
                                              description: |-
                                                A label selector requirement is a selector that contains values, a key, and an operator that
                                                relates the key and values.
                                              properties:
                                                key:
                                                  description: key is the label key
                                                    that the selector applies to.
                                                  type: string
                                                operator:
                                                  description: |-
                                                    operator represents a key's relationship to a set of values.
                                                    Valid operators are In, NotIn, Exists and DoesNotExist.
                                                  type: string
                                                values:
                                                  description: |-
                                                    values is an array of string values. If the operator is In or NotIn,
                                                    the values array must be non-empty. If the operator is Exists or DoesNotExist,
                                                    the values array must be empty. This array is replaced during a strategic
                                                    merge patch.
                                                  items:
                                                    type: string
                                                  type: array
                                                  x-kubernetes-list-type: atomic
                                              required:
                                              - key
                                              - operator
                                              type: object
                                            type: array
                                            x-kubernetes-list-type: atomic
                                          matchLabels:
                                            additionalProperties:
                                              type: string
                                            description: |-
                                              matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
                                              map is equivalent to an element of matchExpressions, whose key field is "key", the
                                              operator is "In", and the values array contains only "value". The requirements are ANDed.
                                            type: object
                                        type: object
                                        x-kubernetes-map-type: atomic
                                      matchLabelKeys:
                                        description: |-
                                          MatchLabelKeys is a set of pod label keys to select which pods will
                                          be taken into consideration. The keys are used to lookup values from the
                                          incoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)`
                                          to select the group of existing pods which pods will be taken into consideration
                                          for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming
                                          pod labels will be ignored. The default value is empty.
                                          The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                          Also, matchLabelKeys cannot be set when labelSelector isn't set.
                                          This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                        items:
                                          type: string
                                        type: array
                                        x-kubernetes-list-type: atomic
                                      mismatchLabelKeys:
                                        description: |-
                                          MismatchLabelKeys is a set of pod label keys to select which pods will
                                          be taken into consideration. The keys are used to lookup values from the
                                          incoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)`
                                          to select the group of existing pods which pods will be taken into consideration
                                          for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming
                                          pod labels will be ignored. The default value is empty.
                                          The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                          Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
                                          This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                        items:
                                          type: string
                                        type: array
                                        x-kubernetes-list-type: atomic
                                      namespaceSelector:
                                        description: |-
                                          A label query over the set of namespaces that the term applies to.
                                          The term is applied to the union of the namespaces selected by this field
                                          and the ones listed in the namespaces field.
                                          null selector and null or empty namespaces list means "this pod's namespace".
                                          An empty selector ({}) matches all namespaces.
                                        properties:
                                          matchExpressions:
                                            description: matchExpressions is a list
                                              of label selector requirements. The
                                              requirements are ANDed.
                                            items:
                                              description: |-
                                                A label selector requirement is a selector that contains values, a key, and an operator that
                                                relates the key and values.
                                              properties:
                                                key:
                                                  description: key is the label key
                                                    that the selector applies to.
                                                  type: string
                                                operator:
                                                  description: |-
                                                    operator represents a key's relationship to a set of values.
                                                    Valid operators are In, NotIn, Exists and DoesNotExist.
                                                  type: string
                                                values:
                                                  description: |-
                                                    values is an array of string values. If the operator is In or NotIn,
                                                    the values array must be non-empty. If the operator is Exists or DoesNotExist,
                                                    the values array must be empty. This array is replaced during a strategic
                                                    merge patch.
                                                  items:
                                                    type: string
                                                  type: array
                                                  x-kubernetes-list-type: atomic
                                              required:
                                              - key
                                              - operator
                                              type: object
                                            type: array
                                            x-kubernetes-list-type: atomic
                                          matchLabels:
                                            additionalProperties:
                                              type: string
                                            description: |-
                                              matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
                                              map is equivalent to an element of matchExpressions, whose key field is "key", the
                                              operator is "In", and the values array contains only "value". The requirements are ANDed.
                                            type: object
                                        type: object
                                        x-kubernetes-map-type: atomic
                                      namespaces:
                                        description: |-
                                          namespaces specifies a static list of namespace names that the term applies to.
                                          The term is applied to the union of the namespaces listed in this field
                                          and the ones selected by namespaceSelector.
                                          null or empty namespaces list and null namespaceSelector means "this pod's namespace".
                                        items:
                                          type: string
                                        type: array
                                        x-kubernetes-list-type: atomic
                                      topologyKey:
                                        description: |-
                                          This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching
                                          the labelSelector in the specified namespaces, where co-located is defined as running on a node
                                          whose value of the label with key topologyKey matches that of any node on which any of the
                                          selected pods is running.
                                          Empty topologyKey is not allowed.
                                        type: string
                                    required:
                                    - topologyKey
                                    type: object
                                  weight:
                                    description: |-
                                      weight associated with matching the corresponding podAffinityTerm,
                                      in the range 1-100.
                                    format: int32
                                    type: integer
                                required:
                                - podAffinityTerm
                                - weight
                                type: object
                              type: array
                              x-kubernetes-list-type: atomic
                            requiredDuringSchedulingIgnoredDuringExecution:
                              description: |-
                                If the anti-affinity requirements specified by this field are not met at
                                scheduling time, the pod will not be scheduled onto the node.
                                If the anti-affinity requirements specified by this field cease to be met
                                at some point during pod execution (e.g. due to a pod label update), the
                                system may or may not try to eventually evict the pod from its node.
                                When there are multiple elements, the lists of nodes corresponding to each
                                podAffinityTerm are intersected, i.e. all terms must be satisfied.
                              items:
                                description: |-
                                  Defines a set of pods (namely those matching the labelSelector
                                  relative to the given namespace(s)) that this pod should be
                                  co-located (affinity) or not co-located (anti-affinity) with,
                                  where co-located is defined as running on a node whose value of
                                  the label with key <topologyKey> matches that of any node on which
                                  a pod of the set of pods is running
                                properties:
                                  labelSelector:
                                    description: |-
                                      A label query over a set of resources, in this case pods.
                                      If it's null, this PodAffinityTerm matches with no Pods.
                                    properties:
                                      matchExpressions:
                                        description: matchExpressions is a list of
                                          label selector requirements. The requirements
                                          are ANDed.
                                        items:
                                          description: |-
                                            A label selector requirement is a selector that contains values, a key, and an operator that
                                            relates the key and values.
                                          properties:
                                            key:
                                              description: key is the label key that
                                                the selector applies to.
                                              type: string
                                            operator:
                                              description: |-
                                                operator represents a key's relationship to a set of values.
                                                Valid operators are In, NotIn, Exists and DoesNotExist.
                                              type: string
                                            values:
                                              description: |-
                                                values is an array of string values. If the operator is In or NotIn,
                                                the values array must be non-empty. If the operator is Exists or DoesNotExist,
                                                the values array must be empty. This array is replaced during a strategic
                                                merge patch.
                                              items:
                                                type: string
                                              type: array
                                              x-kubernetes-list-type: atomic
                                          required:
                                          - key
                                          - operator
                                          type: object
                                        type: array
                                        x-kubernetes-list-type: atomic
                                      matchLabels:
                                        additionalProperties:
                                          type: string
                                        description: |-
                                          matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
                                          map is equivalent to an element of matchExpressions, whose key field is "key", the
                                          operator is "In", and the values array contains only "value". The requirements are ANDed.
                                        type: object
                                    type: object
                                    x-kubernetes-map-type: atomic
                                  matchLabelKeys:
                                    description: |-
                                      MatchLabelKeys is a set of pod label keys to select which pods will
                                      be taken into consideration. The keys are used to lookup values from the
                                      incoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)`
                                      to select the group of existing pods which pods will be taken into consideration
                                      for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming
                                      pod labels will be ignored. The default value is empty.
                                      The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                      Also, matchLabelKeys cannot be set when labelSelector isn't set.
                                      This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                    items:
                                      type: string
                                    type: array
                                    x-kubernetes-list-type: atomic
                                  mismatchLabelKeys:
                                    description: |-
                                      MismatchLabelKeys is a set of pod label keys to select which pods will
                                      be taken into consideration. The keys are used to lookup values from the
                                      incoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)`
                                      to select the group of existing pods which pods will be taken into consideration
                                      for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming
                                      pod labels will be ignored. The default value is empty.
                                      The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                      Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
                                      This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                    items:
                                      type: string
                                    type: array
                                    x-kubernetes-list-type: atomic
                                  namespaceSelector:
                                    description: |-
                                      A label query over the set of namespaces that the term applies to.
                                      The term is applied to the union of the namespaces selected by this field
                                      and the ones listed in the namespaces field.
                                      null selector and null or empty namespaces list means "this pod's namespace".
                                      An empty selector ({}) matches all namespaces.
                                    properties:
                                      matchExpressions:
                                        description: matchExpressions is a list of
                                          label selector requirements. The requirements
                                          are ANDed.
                                        items:
                                          description: |-
                                            A label selector requirement is a selector that contains values, a key, and an operator that
                                            relates the key and values.
                                          properties:
                                            key:
                                              description: key is the label key that
                                                the selector applies to.
                                              type: string
                                            operator:
                                              description: |-
                                                operator represents a key's relationship to a set of values.
                                                Valid operators are In, NotIn, Exists and DoesNotExist.
                                              type: string
                                            values:
                                              description: |-
                                                values is an array of string values. If the operator is In or NotIn,
                                                the values array must be non-empty. If the operator is Exists or DoesNotExist,
                                                the values array must be empty. This array is replaced during a strategic
                                                merge patch.
                                              items:
                                                type: string
                                              type: array
                                              x-kubernetes-list-type: atomic
                                          required:
                                          - key
                                          - operator
                                          type: object
                                        type: array
                                        x-kubernetes-list-type: atomic
                                      matchLabels:
                                        additionalProperties:
                                          type: string
                                        description: |-
                                          matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
                                          map is equivalent to an element of matchExpressions, whose key field is "key", the
                                          operator is "In", and the values array contains only "value". The requirements are ANDed.
                                        type: object
                                    type: object
                                    x-kubernetes-map-type: atomic
                                  namespaces:
                                    description: |-
                                      namespaces specifies a static list of namespace names that the term applies to.
                                      The term is applied to the union of the namespaces listed in this field
                                      and the ones selected by namespaceSelector.
                                      null or empty namespaces list and null namespaceSelector means "this pod's namespace".
                                    items:
                                      type: string
                                    type: array
                                    x-kubernetes-list-type: atomic
                                  topologyKey:
                                    description: |-
                                      This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching
                                      the labelSelector in the specified namespaces, where co-located is defined as running on a node
                                      whose value of the label with key topologyKey matches that of any node on which any of the
                                      selected pods is running.
                                      Empty topologyKey is not allowed.
                                    type: string
                                required:
                                - topologyKey
                                type: object
                              type: array
                              x-kubernetes-list-type: atomic
                          type: object
                        tolerations:
                          description: |-
                            The pod this Toleration is attached to tolerates any taint that matches
                            the triple <key,value,effect> using the matching operator <operator>
                          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
                          type: array
                        topologySpreadConstraints:
                          description: TopologySpreadConstraints specifies how to
                            spread matching pods among the given topology
                          items:
                            description: TopologySpreadConstraint specifies how to
                              spread matching pods among the given topology.
                            properties:
                              labelSelector:
                                description: |-
                                  LabelSelector is used to find matching pods.
                                  Pods that match this label selector are counted to determine the number of pods
                                  in their corresponding topology domain.
                                properties:
                                  matchExpressions:
                                    description: matchExpressions is a list of label
                                      selector requirements. The requirements are
                                      ANDed.
                                    items:
                                      description: |-
                                        A label selector requirement is a selector that contains values, a key, and an operator that
                                        relates the key and values.
                                      properties:
                                        key:
                                          description: key is the label key that the
                                            selector applies to.
                                          type: string
                                        operator:
                                          description: |-
                                            operator represents a key's relationship to a set of values.
                                            Valid operators are In, NotIn, Exists and DoesNotExist.
                                          type: string
                                        values:
                                          description: |-
                                            values is an array of string values. If the operator is In or NotIn,
                                            the values array must be non-empty. If the operator is Exists or DoesNotExist,
                                            the values array must be empty. This array is replaced during a strategic
                                            merge patch.
                                          items:
                                            type: string
                                          type: array
                                          x-kubernetes-list-type: atomic
                                      required:
                                      - key
                                      - operator
                                      type: object
                                    type: array
                                    x-kubernetes-list-type: atomic
                                  matchLabels:
                                    additionalProperties:
                                      type: string
                                    description: |-
                                      matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
                                      map is equivalent to an element of matchExpressions, whose key field is "key", the
                                      operator is "In", and the values array contains only "value". The requirements are ANDed.
                                    type: object
                                type: object
                                x-kubernetes-map-type: atomic
                              matchLabelKeys:
                                description: |-
                                  MatchLabelKeys is a set of pod label keys to select the pods over which
                                  spreading will be calculated. The keys are used to lookup values from the
                                  incoming pod labels, those key-value labels are ANDed with labelSelector
                                  to select the group of existing pods over which spreading will be calculated
                                  for the incoming pod. The same key is forbidden to exist in both MatchLabelKeys and LabelSelector.
                                  MatchLabelKeys cannot be set when LabelSelector isn't set.
                                  Keys that don't exist in the incoming pod labels will
                                  be ignored. A null or empty list means only match against labelSelector.

                                  This is a beta field and requires the MatchLabelKeysInPodTopologySpread feature gate to be enabled (enabled by default).
                                items:
                                  type: string
                                type: array
                                x-kubernetes-list-type: atomic
                              maxSkew:
                                description: |-
                                  MaxSkew describes the degree to which pods may be unevenly distributed.
                                  When `whenUnsatisfiable=DoNotSchedule`, it is the maximum permitted difference
                                  between the number of matching pods in the target topology and the global minimum.
                                  The global minimum is the minimum number of matching pods in an eligible domain
                                  or zero if the number of eligible domains is less than MinDomains.
                                  For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same
                                  labelSelector spread as 2/2/1:
                                  In this case, the global minimum is 1.
                                  | zone1 | zone2 | zone3 |
                                  |  P P  |  P P  |   P   |
                                  - if MaxSkew is 1, incoming pod can only be scheduled to zone3 to become 2/2/2;
                                  scheduling it onto zone1(zone2) would make the ActualSkew(3-1) on zone1(zone2)
                                  violate MaxSkew(1).
                                  - if MaxSkew is 2, incoming pod can be scheduled onto any zone.
                                  When `whenUnsatisfiable=ScheduleAnyway`, it is used to give higher precedence
                                  to topologies that satisfy it.
                                  It's a required field. Default value is 1 and 0 is not allowed.
                                format: int32
                                type: integer
                              minDomains:
                                description: |-
                                  MinDomains indicates a minimum number of eligible domains.
                                  When the number of eligible domains with matching topology keys is less than minDomains,
                                  Pod Topology Spread treats "global minimum" as 0, and then the calculation of Skew is performed.
                                  And when the number of eligible domains with matching topology keys equals or greater than minDomains,
                                  this value has no effect on scheduling.
                                  As a result, when the number of eligible domains is less than minDomains,
                                  scheduler won't schedule more than maxSkew Pods to those domains.
                                  If value is nil, the constraint behaves as if MinDomains is equal to 1.
                                  Valid values are integers greater than 0.
                                  When value is not nil, WhenUnsatisfiable must be DoNotSchedule.

                                  For example, in a 3-zone cluster, MaxSkew is set to 2, MinDomains is set to 5 and pods with the same
                                  labelSelector spread as 2/2/2:
                                  | zone1 | zone2 | zone3 |
                                  |  P P  |  P P  |  P P  |
                                  The number of domains is less than 5(MinDomains), so "global minimum" is treated as 0.
                                  In this situation, new pod with the same labelSelector cannot be scheduled,
                                  because computed skew will be 3(3 - 0) if new Pod is scheduled to any of the three zones,
                                  it will violate MaxSkew.
                                format: int32
                                type: integer
                              nodeAffinityPolicy:
                                description: |-
                                  NodeAffinityPolicy indicates how we will treat Pod's nodeAffinity/nodeSelector
                                  when calculating pod topology spread skew. Options are:
                                  - Honor: only nodes matching nodeAffinity/nodeSelector are included in the calculations.
                                  - Ignore: nodeAffinity/nodeSelector are ignored. All nodes are included in the calculations.

                                  If this value is nil, the behavior is equivalent to the Honor policy.
                                  This is a beta-level feature default enabled by the NodeInclusionPolicyInPodTopologySpread feature flag.
                                type: string
                              nodeTaintsPolicy:
                                description: |-
                                  NodeTaintsPolicy indicates how we will treat node taints when calculating
                                  pod topology spread skew. Options are:
                                  - Honor: nodes without taints, along with tainted nodes for which the incoming pod
                                  has a toleration, are included.
                                  - Ignore: node taints are ignored. All nodes are included.

                                  If this value is nil, the behavior is equivalent to the Ignore policy.
                                  This is a beta-level feature default enabled by the NodeInclusionPolicyInPodTopologySpread feature flag.
                                type: string
                              topologyKey:
                                description: |-
                                  TopologyKey is the key of node labels. Nodes that have a label with this key
                                  and identical values are considered to be in the same topology.
                                  We consider each <key, value> as a "bucket", and try to put balanced number
                                  of pods into each bucket.
                                  We define a domain as a particular instance of a topology.
                                  Also, we define an eligible domain as a domain whose nodes meet the requirements of
                                  nodeAffinityPolicy and nodeTaintsPolicy.
                                  e.g. If TopologyKey is "kubernetes.io/hostname", each Node is a domain of that topology.
                                  And, if TopologyKey is "topology.kubernetes.io/zone", each zone is a domain of that topology.
                                  It's a required field.
                                type: string
                              whenUnsatisfiable:
                                description: |-
                                  WhenUnsatisfiable indicates how to deal with a pod if it doesn't satisfy
                                  the spread constraint.
                                  - DoNotSchedule (default) tells the scheduler not to schedule it.
                                  - ScheduleAnyway tells the scheduler to schedule the pod in any location,
                                    but giving higher precedence to topologies that would help reduce the
                                    skew.
                                  A constraint is considered "Unsatisfiable" for an incoming pod
                                  if and only if every possible node assignment for that pod would violate
                                  "MaxSkew" on some topology.
                                  For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same
                                  labelSelector spread as 3/1/1:
                                  | zone1 | zone2 | zone3 |
                                  | P P P |   P   |   P   |
                                  If WhenUnsatisfiable is set to DoNotSchedule, incoming pod can only be scheduled
                                  to zone2(zone3) to become 3/2/1(3/1/2) as ActualSkew(2-1) on zone2(zone3) satisfies
                                  MaxSkew(1). In other words, the cluster can still be imbalanced, but scheduler
                                  won't make it *more* imbalanced.
                                  It's a required field.
                                type: string
                            required:
                            - maxSkew
                            - topologyKey
                            - whenUnsatisfiable
                            type: object
                          type: array
                      type: object
                    portable:
                      description: |-
                        Portable says whether the OSDs in this device set can move between
                        nodes. This is ignored if Placement is not set
                      type: boolean
                    preparePlacement:
                      description: Placement is the placement for an object
                      properties:
                        nodeAffinity:
                          description: NodeAffinity is a group of node affinity scheduling
                            rules
                          properties:
                            preferredDuringSchedulingIgnoredDuringExecution:
                              description: |-
                                The scheduler will prefer to schedule pods to nodes that satisfy
                                the affinity expressions specified by this field, but it may choose
                                a node that violates one or more of the expressions. The node that is
                                most preferred is the one with the greatest sum of weights, i.e.
                                for each node that meets all of the scheduling requirements (resource
                                request, requiredDuringScheduling affinity expressions, etc.),
                                compute a sum by iterating through the elements of this field and adding
                                "weight" to the sum if the node matches the corresponding matchExpressions; the
                                node(s) with the highest sum are the most preferred.
                              items:
                                description: |-
                                  An empty preferred scheduling term matches all objects with implicit weight 0
                                  (i.e. it's a no-op). A null preferred scheduling term matches no objects (i.e. is also a no-op).
                                properties:
                                  preference:
                                    description: A node selector term, associated
                                      with the corresponding weight.
                                    properties:
                                      matchExpressions:
                                        description: A list of node selector requirements
                                          by node's labels.
                                        items:
                                          description: |-
                                            A node selector requirement is a selector that contains values, a key, and an operator
                                            that relates the key and values.
                                          properties:
                                            key:
                                              description: The label key that the
                                                selector applies to.
                                              type: string
                                            operator:
                                              description: |-
                                                Represents a key's relationship to a set of values.
                                                Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.
                                              type: string
                                            values:
                                              description: |-
                                                An array of string values. If the operator is In or NotIn,
                                                the values array must be non-empty. If the operator is Exists or DoesNotExist,
                                                the values array must be empty. If the operator is Gt or Lt, the values
                                                array must have a single element, which will be interpreted as an integer.
                                                This array is replaced during a strategic merge patch.
                                              items:
                                                type: string
                                              type: array
                                              x-kubernetes-list-type: atomic
                                          required:
                                          - key
                                          - operator
                                          type: object
                                        type: array
                                        x-kubernetes-list-type: atomic
                                      matchFields:
                                        description: A list of node selector requirements
                                          by node's fields.
                                        items:
                                          description: |-
                                            A node selector requirement is a selector that contains values, a key, and an operator
                                            that relates the key and values.
                                          properties:
                                            key:
                                              description: The label key that the
                                                selector applies to.
                                              type: string
                                            operator:
                                              description: |-
                                                Represents a key's relationship to a set of values.
                                                Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.
                                              type: string
                                            values:
                                              description: |-
                                                An array of string values. If the operator is In or NotIn,
                                                the values array must be non-empty. If the operator is Exists or DoesNotExist,
                                                the values array must be empty. If the operator is Gt or Lt, the values
                                                array must have a single element, which will be interpreted as an integer.
                                                This array is replaced during a strategic merge patch.
                                              items:
                                                type: string
                                              type: array
                                              x-kubernetes-list-type: atomic
                                          required:
                                          - key
                                          - operator
                                          type: object
                                        type: array
                                        x-kubernetes-list-type: atomic
                                    type: object
                                    x-kubernetes-map-type: atomic
                                  weight:
                                    description: Weight associated with matching the
                                      corresponding nodeSelectorTerm, in the range
                                      1-100.
                                    format: int32
                                    type: integer
                                required:
                                - preference
                                - weight
                                type: object
                              type: array
                              x-kubernetes-list-type: atomic
                            requiredDuringSchedulingIgnoredDuringExecution:
                              description: |-
                                If the affinity requirements specified by this field are not met at
                                scheduling time, the pod will not be scheduled onto the node.
                                If the affinity requirements specified by this field cease to be met
                                at some point during pod execution (e.g. due to an update), the system
                                may or may not try to eventually evict the pod from its node.
                              properties:
                                nodeSelectorTerms:
                                  description: Required. A list of node selector terms.
                                    The terms are ORed.
                                  items:
                                    description: |-
                                      A null or empty node selector term matches no objects. The requirements of
                                      them are ANDed.
                                      The TopologySelectorTerm type implements a subset of the NodeSelectorTerm.
                                    properties:
                                      matchExpressions:
                                        description: A list of node selector requirements
                                          by node's labels.
                                        items:
                                          description: |-
                                            A node selector requirement is a selector that contains values, a key, and an operator
                                            that relates the key and values.
                                          properties:
                                            key:
                                              description: The label key that the
                                                selector applies to.
                                              type: string
                                            operator:
                                              description: |-
                                                Represents a key's relationship to a set of values.
                                                Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.
                                              type: string
                                            values:
                                              description: |-
                                                An array of string values. If the operator is In or NotIn,
                                                the values array must be non-empty. If the operator is Exists or DoesNotExist,
                                                the values array must be empty. If the operator is Gt or Lt, the values
                                                array must have a single element, which will be interpreted as an integer.
                                                This array is replaced during a strategic merge patch.
                                              items:
                                                type: string
                                              type: array
                                              x-kubernetes-list-type: atomic
                                          required:
                                          - key
                                          - operator
                                          type: object
                                        type: array
                                        x-kubernetes-list-type: atomic
                                      matchFields:
                                        description: A list of node selector requirements
                                          by node's fields.
                                        items:
                                          description: |-
                                            A node selector requirement is a selector that contains values, a key, and an operator
                                            that relates the key and values.
                                          properties:
                                            key:
                                              description: The label key that the
                                                selector applies to.
                                              type: string
                                            operator:
                                              description: |-
                                                Represents a key's relationship to a set of values.
                                                Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.
                                              type: string
                                            values:
                                              description: |-
                                                An array of string values. If the operator is In or NotIn,
                                                the values array must be non-empty. If the operator is Exists or DoesNotExist,
                                                the values array must be empty. If the operator is Gt or Lt, the values
                                                array must have a single element, which will be interpreted as an integer.
                                                This array is replaced during a strategic merge patch.
                                              items:
                                                type: string
                                              type: array
                                              x-kubernetes-list-type: atomic
                                          required:
                                          - key
                                          - operator
                                          type: object
                                        type: array
                                        x-kubernetes-list-type: atomic
                                    type: object
                                    x-kubernetes-map-type: atomic
                                  type: array
                                  x-kubernetes-list-type: atomic
                              required:
                              - nodeSelectorTerms
                              type: object
                              x-kubernetes-map-type: atomic
                          type: object
                        podAffinity:
                          description: PodAffinity is a group of inter pod affinity
                            scheduling rules
                          properties:
                            preferredDuringSchedulingIgnoredDuringExecution:
                              description: |-
                                The scheduler will prefer to schedule pods to nodes that satisfy
                                the affinity expressions specified by this field, but it may choose
                                a node that violates one or more of the expressions. The node that is
                                most preferred is the one with the greatest sum of weights, i.e.
                                for each node that meets all of the scheduling requirements (resource
                                request, requiredDuringScheduling affinity expressions, etc.),
                                compute a sum by iterating through the elements of this field and adding
                                "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the
                                node(s) with the highest sum are the most preferred.
                              items:
                                description: The weights of all of the matched WeightedPodAffinityTerm
                                  fields are added per-node to find the most preferred
                                  node(s)
                                properties:
                                  podAffinityTerm:
                                    description: Required. A pod affinity term, associated
                                      with the corresponding weight.
                                    properties:
                                      labelSelector:
                                        description: |-
                                          A label query over a set of resources, in this case pods.
                                          If it's null, this PodAffinityTerm matches with no Pods.
                                        properties:
                                          matchExpressions:
                                            description: matchExpressions is a list
                                              of label selector requirements. The
                                              requirements are ANDed.
                                            items:
                                              description: |-
                                                A label selector requirement is a selector that contains values, a key, and an operator that
                                                relates the key and values.
                                              properties:
                                                key:
                                                  description: key is the label key
                                                    that the selector applies to.
                                                  type: string
                                                operator:
                                                  description: |-
                                                    operator represents a key's relationship to a set of values.
                                                    Valid operators are In, NotIn, Exists and DoesNotExist.
                                                  type: string
                                                values:
                                                  description: |-
                                                    values is an array of string values. If the operator is In or NotIn,
                                                    the values array must be non-empty. If the operator is Exists or DoesNotExist,
                                                    the values array must be empty. This array is replaced during a strategic
                                                    merge patch.
                                                  items:
                                                    type: string
                                                  type: array
                                                  x-kubernetes-list-type: atomic
                                              required:
                                              - key
                                              - operator
                                              type: object
                                            type: array
                                            x-kubernetes-list-type: atomic
                                          matchLabels:
                                            additionalProperties:
                                              type: string
                                            description: |-
                                              matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
                                              map is equivalent to an element of matchExpressions, whose key field is "key", the
                                              operator is "In", and the values array contains only "value". The requirements are ANDed.
                                            type: object
                                        type: object
                                        x-kubernetes-map-type: atomic
                                      matchLabelKeys:
                                        description: |-
                                          MatchLabelKeys is a set of pod label keys to select which pods will
                                          be taken into consideration. The keys are used to lookup values from the
                                          incoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)`
                                          to select the group of existing pods which pods will be taken into consideration
                                          for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming
                                          pod labels will be ignored. The default value is empty.
                                          The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                          Also, matchLabelKeys cannot be set when labelSelector isn't set.
                                          This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                        items:
                                          type: string
                                        type: array
                                        x-kubernetes-list-type: atomic
                                      mismatchLabelKeys:
                                        description: |-
                                          MismatchLabelKeys is a set of pod label keys to select which pods will
                                          be taken into consideration. The keys are used to lookup values from the
                                          incoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)`
                                          to select the group of existing pods which pods will be taken into consideration
                                          for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming
                                          pod labels will be ignored. The default value is empty.
                                          The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                          Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
                                          This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                        items:
                                          type: string
                                        type: array
                                        x-kubernetes-list-type: atomic
                                      namespaceSelector:
                                        description: |-
                                          A label query over the set of namespaces that the term applies to.
                                          The term is applied to the union of the namespaces selected by this field
                                          and the ones listed in the namespaces field.
                                          null selector and null or empty namespaces list means "this pod's namespace".
                                          An empty selector ({}) matches all namespaces.
                                        properties:
                                          matchExpressions:
                                            description: matchExpressions is a list
                                              of label selector requirements. The
                                              requirements are ANDed.
                                            items:
                                              description: |-
                                                A label selector requirement is a selector that contains values, a key, and an operator that
                                                relates the key and values.
                                              properties:
                                                key:
                                                  description: key is the label key
                                                    that the selector applies to.
                                                  type: string
                                                operator:
                                                  description: |-
                                                    operator represents a key's relationship to a set of values.
                                                    Valid operators are In, NotIn, Exists and DoesNotExist.
                                                  type: string
                                                values:
                                                  description: |-
                                                    values is an array of string values. If the operator is In or NotIn,
                                                    the values array must be non-empty. If the operator is Exists or DoesNotExist,
                                                    the values array must be empty. This array is replaced during a strategic
                                                    merge patch.
                                                  items:
                                                    type: string
                                                  type: array
                                                  x-kubernetes-list-type: atomic
                                              required:
                                              - key
                                              - operator
                                              type: object
                                            type: array
                                            x-kubernetes-list-type: atomic
                                          matchLabels:
                                            additionalProperties:
                                              type: string
                                            description: |-
                                              matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
                                              map is equivalent to an element of matchExpressions, whose key field is "key", the
                                              operator is "In", and the values array contains only "value". The requirements are ANDed.
                                            type: object
                                        type: object
                                        x-kubernetes-map-type: atomic
                                      namespaces:
                                        description: |-
                                          namespaces specifies a static list of namespace names that the term applies to.
                                          The term is applied to the union of the namespaces listed in this field
                                          and the ones selected by namespaceSelector.
                                          null or empty namespaces list and null namespaceSelector means "this pod's namespace".
                                        items:
                                          type: string
                                        type: array
                                        x-kubernetes-list-type: atomic
                                      topologyKey:
                                        description: |-
                                          This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching
                                          the labelSelector in the specified namespaces, where co-located is defined as running on a node
                                          whose value of the label with key topologyKey matches that of any node on which any of the
                                          selected pods is running.
                                          Empty topologyKey is not allowed.
                                        type: string
                                    required:
                                    - topologyKey
                                    type: object
                                  weight:
                                    description: |-
                                      weight associated with matching the corresponding podAffinityTerm,
                                      in the range 1-100.
                                    format: int32
                                    type: integer
                                required:
                                - podAffinityTerm
                                - weight
                                type: object
                              type: array
                              x-kubernetes-list-type: atomic
                            requiredDuringSchedulingIgnoredDuringExecution:
                              description: |-
                                If the affinity requirements specified by this field are not met at
                                scheduling time, the pod will not be scheduled onto the node.
                                If the affinity requirements specified by this field cease to be met
                                at some point during pod execution (e.g. due to a pod label update), the
                                system may or may not try to eventually evict the pod from its node.
                                When there are multiple elements, the lists of nodes corresponding to each
                                podAffinityTerm are intersected, i.e. all terms must be satisfied.
                              items:
                                description: |-
                                  Defines a set of pods (namely those matching the labelSelector
                                  relative to the given namespace(s)) that this pod should be
                                  co-located (affinity) or not co-located (anti-affinity) with,
                                  where co-located is defined as running on a node whose value of
                                  the label with key <topologyKey> matches that of any node on which
                                  a pod of the set of pods is running
                                properties:
                                  labelSelector:
                                    description: |-
                                      A label query over a set of resources, in this case pods.
                                      If it's null, this PodAffinityTerm matches with no Pods.
                                    properties:
                                      matchExpressions:
                                        description: matchExpressions is a list of
                                          label selector requirements. The requirements
                                          are ANDed.
                                        items:
                                          description: |-
                                            A label selector requirement is a selector that contains values, a key, and an operator that
                                            relates the key and values.
                                          properties:
                                            key:
                                              description: key is the label key that
                                                the selector applies to.
                                              type: string
                                            operator:
                                              description: |-
                                                operator represents a key's relationship to a set of values.
                                                Valid operators are In, NotIn, Exists and DoesNotExist.
                                              type: string
                                            values:
                                              description: |-
                                                values is an array of string values. If the operator is In or NotIn,
                                                the values array must be non-empty. If the operator is Exists or DoesNotExist,
                                                the values array must be empty. This array is replaced during a strategic
                                                merge patch.
                                              items:
                                                type: string
                                              type: array
                                              x-kubernetes-list-type: atomic
                                          required:
                                          - key
                                          - operator
                                          type: object
                                        type: array
                                        x-kubernetes-list-type: atomic
                                      matchLabels:
                                        additionalProperties:
                                          type: string
                                        description: |-
                                          matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
                                          map is equivalent to an element of matchExpressions, whose key field is "key", the
                                          operator is "In", and the values array contains only "value". The requirements are ANDed.
                                        type: object
                                    type: object
                                    x-kubernetes-map-type: atomic
                                  matchLabelKeys:
                                    description: |-
                                      MatchLabelKeys is a set of pod label keys to select which pods will
                                      be taken into consideration. The keys are used to lookup values from the
                                      incoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)`
                                      to select the group of existing pods which pods will be taken into consideration
                                      for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming
                                      pod labels will be ignored. The default value is empty.
                                      The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                      Also, matchLabelKeys cannot be set when labelSelector isn't set.
                                      This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                    items:
                                      type: string
                                    type: array
                                    x-kubernetes-list-type: atomic
                                  mismatchLabelKeys:
                                    description: |-
                                      MismatchLabelKeys is a set of pod label keys to select which pods will
                                      be taken into consideration. The keys are used to lookup values from the
                                      incoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)`
                                      to select the group of existing pods which pods will be taken into consideration
                                      for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming
                                      pod labels will be ignored. The default value is empty.
                                      The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                      Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
                                      This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                    items:
                                      type: string
                                    type: array
                                    x-kubernetes-list-type: atomic
                                  namespaceSelector:
                                    description: |-
                                      A label query over the set of namespaces that the term applies to.
                                      The term is applied to the union of the namespaces selected by this field
                                      and the ones listed in the namespaces field.
                                      null selector and null or empty namespaces list means "this pod's namespace".
                                      An empty selector ({}) matches all namespaces.
                                    properties:
                                      matchExpressions:
                                        description: matchExpressions is a list of
                                          label selector requirements. The requirements
                                          are ANDed.
                                        items:
                                          description: |-
                                            A label selector requirement is a selector that contains values, a key, and an operator that
                                            relates the key and values.
                                          properties:
                                            key:
                                              description: key is the label key that
                                                the selector applies to.
                                              type: string
                                            operator:
                                              description: |-
                                                operator represents a key's relationship to a set of values.
                                                Valid operators are In, NotIn, Exists and DoesNotExist.
                                              type: string
                                            values:
                                              description: |-
                                                values is an array of string values. If the operator is In or NotIn,
                                                the values array must be non-empty. If the operator is Exists or DoesNotExist,
                                                the values array must be empty. This array is replaced during a strategic
                                                merge patch.
                                              items:
                                                type: string
                                              type: array
                                              x-kubernetes-list-type: atomic
                                          required:
                                          - key
                                          - operator
                                          type: object
                                        type: array
                                        x-kubernetes-list-type: atomic
                                      matchLabels:
                                        additionalProperties:
                                          type: string
                                        description: |-
                                          matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
                                          map is equivalent to an element of matchExpressions, whose key field is "key", the
                                          operator is "In", and the values array contains only "value". The requirements are ANDed.
                                        type: object
                                    type: object
                                    x-kubernetes-map-type: atomic
                                  namespaces:
                                    description: |-
                                      namespaces specifies a static list of namespace names that the term applies to.
                                      The term is applied to the union of the namespaces listed in this field
                                      and the ones selected by namespaceSelector.
                                      null or empty namespaces list and null namespaceSelector means "this pod's namespace".
                                    items:
                                      type: string
                                    type: array
                                    x-kubernetes-list-type: atomic
                                  topologyKey:
                                    description: |-
                                      This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching
                                      the labelSelector in the specified namespaces, where co-located is defined as running on a node
                                      whose value of the label with key topologyKey matches that of any node on which any of the
                                      selected pods is running.
                                      Empty topologyKey is not allowed.
                                    type: string
                                required:
                                - topologyKey
                                type: object
                              type: array
                              x-kubernetes-list-type: atomic
                          type: object
                        podAntiAffinity:
                          description: PodAntiAffinity is a group of inter pod anti
                            affinity scheduling rules
                          properties:
                            preferredDuringSchedulingIgnoredDuringExecution:
                              description: |-
                                The scheduler will prefer to schedule pods to nodes that satisfy
                                the anti-affinity expressions specified by this field, but it may choose
                                a node that violates one or more of the expressions. The node that is
                                most preferred is the one with the greatest sum of weights, i.e.
                                for each node that meets all of the scheduling requirements (resource
                                request, requiredDuringScheduling anti-affinity expressions, etc.),
                                compute a sum by iterating through the elements of this field and adding
                                "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the
                                node(s) with the highest sum are the most preferred.
                              items:
                                description: The weights of all of the matched WeightedPodAffinityTerm
                                  fields are added per-node to find the most preferred
                                  node(s)
                                properties:
                                  podAffinityTerm:
                                    description: Required. A pod affinity term, associated
                                      with the corresponding weight.
                                    properties:
                                      labelSelector:
                                        description: |-
                                          A label query over a set of resources, in this case pods.
                                          If it's null, this PodAffinityTerm matches with no Pods.
                                        properties:
                                          matchExpressions:
                                            description: matchExpressions is a list
                                              of label selector requirements. The
                                              requirements are ANDed.
                                            items:
                                              description: |-
                                                A label selector requirement is a selector that contains values, a key, and an operator that
                                                relates the key and values.
                                              properties:
                                                key:
                                                  description: key is the label key
                                                    that the selector applies to.
                                                  type: string
                                                operator:
                                                  description: |-
                                                    operator represents a key's relationship to a set of values.
                                                    Valid operators are In, NotIn, Exists and DoesNotExist.
                                                  type: string
                                                values:
                                                  description: |-
                                                    values is an array of string values. If the operator is In or NotIn,
                                                    the values array must be non-empty. If the operator is Exists or DoesNotExist,
                                                    the values array must be empty. This array is replaced during a strategic
                                                    merge patch.
                                                  items:
                                                    type: string
                                                  type: array
                                                  x-kubernetes-list-type: atomic
                                              required:
                                              - key
                                              - operator
                                              type: object
                                            type: array
                                            x-kubernetes-list-type: atomic
                                          matchLabels:
                                            additionalProperties:
                                              type: string
                                            description: |-
                                              matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
                                              map is equivalent to an element of matchExpressions, whose key field is "key", the
                                              operator is "In", and the values array contains only "value". The requirements are ANDed.
                                            type: object
                                        type: object
                                        x-kubernetes-map-type: atomic
                                      matchLabelKeys:
                                        description: |-
                                          MatchLabelKeys is a set of pod label keys to select which pods will
                                          be taken into consideration. The keys are used to lookup values from the
                                          incoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)`
                                          to select the group of existing pods which pods will be taken into consideration
                                          for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming
                                          pod labels will be ignored. The default value is empty.
                                          The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                          Also, matchLabelKeys cannot be set when labelSelector isn't set.
                                          This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                        items:
                                          type: string
                                        type: array
                                        x-kubernetes-list-type: atomic
                                      mismatchLabelKeys:
                                        description: |-
                                          MismatchLabelKeys is a set of pod label keys to select which pods will
                                          be taken into consideration. The keys are used to lookup values from the
                                          incoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)`
                                          to select the group of existing pods which pods will be taken into consideration
                                          for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming
                                          pod labels will be ignored. The default value is empty.
                                          The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                          Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
                                          This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                        items:
                                          type: string
                                        type: array
                                        x-kubernetes-list-type: atomic
                                      namespaceSelector:
                                        description: |-
                                          A label query over the set of namespaces that the term applies to.
                                          The term is applied to the union of the namespaces selected by this field
                                          and the ones listed in the namespaces field.
                                          null selector and null or empty namespaces list means "this pod's namespace".
                                          An empty selector ({}) matches all namespaces.
                                        properties:
                                          matchExpressions:
                                            description: matchExpressions is a list
                                              of label selector requirements. The
                                              requirements are ANDed.
                                            items:
                                              description: |-
                                                A label selector requirement is a selector that contains values, a key, and an operator that
                                                relates the key and values.
                                              properties:
                                                key:
                                                  description: key is the label key
                                                    that the selector applies to.
                                                  type: string
                                                operator:
                                                  description: |-
                                                    operator represents a key's relationship to a set of values.
                                                    Valid operators are In, NotIn, Exists and DoesNotExist.
                                                  type: string
                                                values:
                                                  description: |-
                                                    values is an array of string values. If the operator is In or NotIn,
                                                    the values array must be non-empty. If the operator is Exists or DoesNotExist,
                                                    the values array must be empty. This array is replaced during a strategic
                                                    merge patch.
                                                  items:
                                                    type: string
                                                  type: array
                                                  x-kubernetes-list-type: atomic
                                              required:
                                              - key
                                              - operator
                                              type: object
                                            type: array
                                            x-kubernetes-list-type: atomic
                                          matchLabels:
                                            additionalProperties:
                                              type: string
                                            description: |-
                                              matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
                                              map is equivalent to an element of matchExpressions, whose key field is "key", the
                                              operator is "In", and the values array contains only "value". The requirements are ANDed.
                                            type: object
                                        type: object
                                        x-kubernetes-map-type: atomic
                                      namespaces:
                                        description: |-
                                          namespaces specifies a static list of namespace names that the term applies to.
                                          The term is applied to the union of the namespaces listed in this field
                                          and the ones selected by namespaceSelector.
                                          null or empty namespaces list and null namespaceSelector means "this pod's namespace".
                                        items:
                                          type: string
                                        type: array
                                        x-kubernetes-list-type: atomic
                                      topologyKey:
                                        description: |-
                                          This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching
                                          the labelSelector in the specified namespaces, where co-located is defined as running on a node
                                          whose value of the label with key topologyKey matches that of any node on which any of the
                                          selected pods is running.
                                          Empty topologyKey is not allowed.
                                        type: string
                                    required:
                                    - topologyKey
                                    type: object
                                  weight:
                                    description: |-
                                      weight associated with matching the corresponding podAffinityTerm,
                                      in the range 1-100.
                                    format: int32
                                    type: integer
                                required:
                                - podAffinityTerm
                                - weight
                                type: object
                              type: array
                              x-kubernetes-list-type: atomic
                            requiredDuringSchedulingIgnoredDuringExecution:
                              description: |-
                                If the anti-affinity requirements specified by this field are not met at
                                scheduling time, the pod will not be scheduled onto the node.
                                If the anti-affinity requirements specified by this field cease to be met
                                at some point during pod execution (e.g. due to a pod label update), the
                                system may or may not try to eventually evict the pod from its node.
                                When there are multiple elements, the lists of nodes corresponding to each
                                podAffinityTerm are intersected, i.e. all terms must be satisfied.
                              items:
                                description: |-
                                  Defines a set of pods (namely those matching the labelSelector
                                  relative to the given namespace(s)) that this pod should be
                                  co-located (affinity) or not co-located (anti-affinity) with,
                                  where co-located is defined as running on a node whose value of
                                  the label with key <topologyKey> matches that of any node on which
                                  a pod of the set of pods is running
                                properties:
                                  labelSelector:
                                    description: |-
                                      A label query over a set of resources, in this case pods.
                                      If it's null, this PodAffinityTerm matches with no Pods.
                                    properties:
                                      matchExpressions:
                                        description: matchExpressions is a list of
                                          label selector requirements. The requirements
                                          are ANDed.
                                        items:
                                          description: |-
                                            A label selector requirement is a selector that contains values, a key, and an operator that
                                            relates the key and values.
                                          properties:
                                            key:
                                              description: key is the label key that
                                                the selector applies to.
                                              type: string
                                            operator:
                                              description: |-
                                                operator represents a key's relationship to a set of values.
                                                Valid operators are In, NotIn, Exists and DoesNotExist.
                                              type: string
                                            values:
                                              description: |-
                                                values is an array of string values. If the operator is In or NotIn,
                                                the values array must be non-empty. If the operator is Exists or DoesNotExist,
                                                the values array must be empty. This array is replaced during a strategic
                                                merge patch.
                                              items:
                                                type: string
                                              type: array
                                              x-kubernetes-list-type: atomic
                                          required:
                                          - key
                                          - operator
                                          type: object
                                        type: array
                                        x-kubernetes-list-type: atomic
                                      matchLabels:
                                        additionalProperties:
                                          type: string
                                        description: |-
                                          matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
                                          map is equivalent to an element of matchExpressions, whose key field is "key", the
                                          operator is "In", and the values array contains only "value". The requirements are ANDed.
                                        type: object
                                    type: object
                                    x-kubernetes-map-type: atomic
                                  matchLabelKeys:
                                    description: |-
                                      MatchLabelKeys is a set of pod label keys to select which pods will
                                      be taken into consideration. The keys are used to lookup values from the
                                      incoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)`
                                      to select the group of existing pods which pods will be taken into consideration
                                      for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming
                                      pod labels will be ignored. The default value is empty.
                                      The same key is forbidden to exist in both matchLabelKeys and labelSelector.
                                      Also, matchLabelKeys cannot be set when labelSelector isn't set.
                                      This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                    items:
                                      type: string
                                    type: array
                                    x-kubernetes-list-type: atomic
                                  mismatchLabelKeys:
                                    description: |-
                                      MismatchLabelKeys is a set of pod label keys to select which pods will
                                      be taken into consideration. The keys are used to lookup values from the
                                      incoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)`
                                      to select the group of existing pods which pods will be taken into consideration
                                      for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming
                                      pod labels will be ignored. The default value is empty.
                                      The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
                                      Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
                                      This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
                                    items:
                                      type: string
                                    type: array
                                    x-kubernetes-list-type: atomic
                                  namespaceSelector:
                                    description: |-
                                      A label query over the set of namespaces that the term applies to.
                                      The term is applied to the union of the namespaces selected by this field
                                      and the ones listed in the namespaces field.
                                      null selector and null or empty namespaces list means "this pod's namespace".
                                      An empty selector ({}) matches all namespaces.
                                    properties:
                                      matchExpressions:
                                        description: matchExpressions is a list of
                                          label selector requirements. The requirements
                                          are ANDed.
                                        items:
                                          description: |-
                                            A label selector requirement is a selector that contains values, a key, and an operator that
                                            relates the key and values.
                                          properties:
                                            key:
                                              description: key is the label key that
                                                the selector applies to.
                                              type: string
                                            operator:
                                              description: |-
                                                operator represents a key's relationship to a set of values.
                                                Valid operators are In, NotIn, Exists and DoesNotExist.
                                              type: string
                                            values:
                                              description: |-
                                                values is an array of string values. If the operator is In or NotIn,
                                                the values array must be non-empty. If the operator is Exists or DoesNotExist,
                                                the values array must be empty. This array is replaced during a strategic
                                                merge patch.
                                              items:
                                                type: string
                                              type: array
                                              x-kubernetes-list-type: atomic
                                          required:
                                          - key
                                          - operator
                                          type: object
                                        type: array
                                        x-kubernetes-list-type: atomic
                                      matchLabels:
                                        additionalProperties:
                                          type: string
                                        description: |-
                                          matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
                                          map is equivalent to an element of matchExpressions, whose key field is "key", the
                                          operator is "In", and the values array contains only "value". The requirements are ANDed.
                                        type: object
                                    type: object
                                    x-kubernetes-map-type: atomic
                                  namespaces:
                                    description: |-
                                      namespaces specifies a static list of namespace names that the term applies to.
                                      The term is applied to the union of the namespaces listed in this field
                                      and the ones selected by namespaceSelector.
                                      null or empty namespaces list and null namespaceSelector means "this pod's namespace".
                                    items:
                                      type: string
                                    type: array
                                    x-kubernetes-list-type: atomic
                                  topologyKey:
                                    description: |-
                                      This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching
                                      the labelSelector in the specified namespaces, where co-located is defined as running on a node
                                      whose value of the label with key topologyKey matches that of any node on which any of the
                                      selected pods is running.
                                      Empty topologyKey is not allowed.
                                    type: string
                                required:
                                - topologyKey
                                type: object
                              type: array
                              x-kubernetes-list-type: atomic
                          type: object
                        tolerations:
                          description: |-
                            The pod this Toleration is attached to tolerates any taint that matches
                            the triple <key,value,effect> using the matching operator <operator>
                          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
                          type: array
                        topologySpreadConstraints:
                          description: TopologySpreadConstraints specifies how to
                            spread matching pods among the given topology
                          items:
                            description: TopologySpreadConstraint specifies how to
                              spread matching pods among the given topology.
                            properties:
                              labelSelector:
                                description: |-
                                  LabelSelector is used to find matching pods.
                                  Pods that match this label selector are counted to determine the number of pods
                                  in their corresponding topology domain.
                                properties:
                                  matchExpressions:
                                    description: matchExpressions is a list of label
                                      selector requirements. The requirements are
                                      ANDed.
                                    items:
                                      description: |-
                                        A label selector requirement is a selector that contains values, a key, and an operator that
                                        relates the key and values.
                                      properties:
                                        key:
                                          description: key is the label key that the
                                            selector applies to.
                                          type: string
                                        operator:
                                          description: |-
                                            operator represents a key's relationship to a set of values.
                                            Valid operators are In, NotIn, Exists and DoesNotExist.
                                          type: string
                                        values:
                                          description: |-
                                            values is an array of string values. If the operator is In or NotIn,
                                            the values array must be non-empty. If the operator is Exists or DoesNotExist,
                                            the values array must be empty. This array is replaced during a strategic
                                            merge patch.
                                          items:
                                            type: string
                                          type: array
                                          x-kubernetes-list-type: atomic
                                      required:
                                      - key
                                      - operator
                                      type: object
                                    type: array
                                    x-kubernetes-list-type: atomic
                                  matchLabels:
                                    additionalProperties:
                                      type: string
                                    description: |-
                                      matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
                                      map is equivalent to an element of matchExpressions, whose key field is "key", the
                                      operator is "In", and the values array contains only "value". The requirements are ANDed.
                                    type: object
                                type: object
                                x-kubernetes-map-type: atomic
                              matchLabelKeys:
                                description: |-
                                  MatchLabelKeys is a set of pod label keys to select the pods over which
                                  spreading will be calculated. The keys are used to lookup values from the
                                  incoming pod labels, those key-value labels are ANDed with labelSelector
                                  to select the group of existing pods over which spreading will be calculated
                                  for the incoming pod. The same key is forbidden to exist in both MatchLabelKeys and LabelSelector.
                                  MatchLabelKeys cannot be set when LabelSelector isn't set.
                                  Keys that don't exist in the incoming pod labels will
                                  be ignored. A null or empty list means only match against labelSelector.

                                  This is a beta field and requires the MatchLabelKeysInPodTopologySpread feature gate to be enabled (enabled by default).
                                items:
                                  type: string
                                type: array
                                x-kubernetes-list-type: atomic
                              maxSkew:
                                description: |-
                                  MaxSkew describes the degree to which pods may be unevenly distributed.
                                  When `whenUnsatisfiable=DoNotSchedule`, it is the maximum permitted difference
                                  between the number of matching pods in the target topology and the global minimum.
                                  The global minimum is the minimum number of matching pods in an eligible domain
                                  or zero if the number of eligible domains is less than MinDomains.
                                  For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same
                                  labelSelector spread as 2/2/1:
                                  In this case, the global minimum is 1.
                                  | zone1 | zone2 | zone3 |
                                  |  P P  |  P P  |   P   |
                                  - if MaxSkew is 1, incoming pod can only be scheduled to zone3 to become 2/2/2;
                                  scheduling it onto zone1(zone2) would make the ActualSkew(3-1) on zone1(zone2)
                                  violate MaxSkew(1).
                                  - if MaxSkew is 2, incoming pod can be scheduled onto any zone.
                                  When `whenUnsatisfiable=ScheduleAnyway`, it is used to give higher precedence
                                  to topologies that satisfy it.
                                  It's a required field. Default value is 1 and 0 is not allowed.
                                format: int32
                                type: integer
                              minDomains:
                                description: |-
                                  MinDomains indicates a minimum number of eligible domains.
                                  When the number of eligible domains with matching topology keys is less than minDomains,
                                  Pod Topology Spread treats "global minimum" as 0, and then the calculation of Skew is performed.
                                  And when the number of eligible domains with matching topology keys equals or greater than minDomains,
                                  this value has no effect on scheduling.
                                  As a result, when the number of eligible domains is less than minDomains,
                                  scheduler won't schedule more than maxSkew Pods to those domains.
                                  If value is nil, the constraint behaves as if MinDomains is equal to 1.
                                  Valid values are integers greater than 0.
                                  When value is not nil, WhenUnsatisfiable must be DoNotSchedule.

                                  For example, in a 3-zone cluster, MaxSkew is set to 2, MinDomains is set to 5 and pods with the same
                                  labelSelector spread as 2/2/2:
                                  | zone1 | zone2 | zone3 |
                                  |  P P  |  P P  |  P P  |
                                  The number of domains is less than 5(MinDomains), so "global minimum" is treated as 0.
                                  In this situation, new pod with the same labelSelector cannot be scheduled,
                                  because computed skew will be 3(3 - 0) if new Pod is scheduled to any of the three zones,
                                  it will violate MaxSkew.
                                format: int32
                                type: integer
                              nodeAffinityPolicy:
                                description: |-
                                  NodeAffinityPolicy indicates how we will treat Pod's nodeAffinity/nodeSelector
                                  when calculating pod topology spread skew. Options are:
                                  - Honor: only nodes matching nodeAffinity/nodeSelector are included in the calculations.
                                  - Ignore: nodeAffinity/nodeSelector are ignored. All nodes are included in the calculations.

                                  If this value is nil, the behavior is equivalent to the Honor policy.
                                  This is a beta-level feature default enabled by the NodeInclusionPolicyInPodTopologySpread feature flag.
                                type: string
                              nodeTaintsPolicy:
                                description: |-
                                  NodeTaintsPolicy indicates how we will treat node taints when calculating
                                  pod topology spread skew. Options are:
                                  - Honor: nodes without taints, along with tainted nodes for which the incoming pod
                                  has a toleration, are included.
                                  - Ignore: node taints are ignored. All nodes are included.

                                  If this value is nil, the behavior is equivalent to the Ignore policy.
                                  This is a beta-level feature default enabled by the NodeInclusionPolicyInPodTopologySpread feature flag.
                                type: string
                              topologyKey:
                                description: |-
                                  TopologyKey is the key of node labels. Nodes that have a label with this key
                                  and identical values are considered to be in the same topology.
                                  We consider each <key, value> as a "bucket", and try to put balanced number
                                  of pods into each bucket.
                                  We define a domain as a particular instance of a topology.
                                  Also, we define an eligible domain as a domain whose nodes meet the requirements of
                                  nodeAffinityPolicy and nodeTaintsPolicy.
                                  e.g. If TopologyKey is "kubernetes.io/hostname", each Node is a domain of that topology.
                                  And, if TopologyKey is "topology.kubernetes.io/zone", each zone is a domain of that topology.
                                  It's a required field.
                                type: string
                              whenUnsatisfiable:
                                description: |-
                                  WhenUnsatisfiable indicates how to deal with a pod if it doesn't satisfy
                                  the spread constraint.
                                  - DoNotSchedule (default) tells the scheduler not to schedule it.
                                  - ScheduleAnyway tells the scheduler to schedule the pod in any location,
                                    but giving higher precedence to topologies that would help reduce the
                                    skew.
                                  A constraint is considered "Unsatisfiable" for an incoming pod
                                  if and only if every possible node assignment for that pod would violate
                                  "MaxSkew" on some topology.
                                  For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same
                                  labelSelector spread as 3/1/1:
                                  | zone1 | zone2 | zone3 |
                                  | P P P |   P   |   P   |
                                  If WhenUnsatisfiable is set to DoNotSchedule, incoming pod can only be scheduled
                                  to zone2(zone3) to become 3/2/1(3/1/2) as ActualSkew(2-1) on zone2(zone3) satisfies
                                  MaxSkew(1). In other words, the cluster can still be imbalanced, but scheduler
                                  won't make it *more* imbalanced.
                                  It's a required field.
                                type: string
                            required:
                            - maxSkew
                            - topologyKey
                            - whenUnsatisfiable
                            type: object
                          type: array
                      type: object
                    primaryAffinity:
                      description: |-
                        PrimaryAffinity is an optional OSD primary-affinity value within the
                        range [0,1). This value influence the way Ceph's CRUSH selection of
                        primary OSDs. Lower value reduce performance bottlenecks (especially
                        on read operations). If not set, default value is 1.
                        https://docs.ceph.com/en/latest/rados/operations/crush-map/#primary-affinity
                      pattern: ^0.[0-9]+$
                      type: string
                    replica:
                      description: |-
                        Replica is the number of StorageClassDeviceSets for this
                        StorageDeviceSet
                      minimum: 1
                      type: integer
                    resources:
                      description: ResourceRequirements describes the compute resource
                        requirements.
                      properties:
                        claims:
                          description: |-
                            Claims lists the names of resources, defined in spec.resourceClaims,
                            that are used by this container.

                            This is an alpha field and requires enabling the
                            DynamicResourceAllocation feature gate.

                            This field is immutable. It can only be set for containers.
                          items:
                            description: ResourceClaim references one entry in PodSpec.ResourceClaims.
                            properties:
                              name:
                                description: |-
                                  Name must match the name of one entry in pod.spec.resourceClaims of
                                  the Pod where this field is used. It makes that resource available
                                  inside a container.
                                type: string
                              request:
                                description: |-
                                  Request is the name chosen for a request in the referenced claim.
                                  If empty, everything from the claim is made available, otherwise
                                  only the result of this request.
                                type: string
                            required:
                            - name
                            type: object
                          type: array
                          x-kubernetes-list-map-keys:
                          - name
                          x-kubernetes-list-type: map
                        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-resources-containers/
                          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. Requests cannot exceed Limits.
                            More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
                          type: object
                      type: object
                    topologyKey:
                      description: |-
                        TopologyKey is the Kubernetes topology label that the
                        StorageClassDeviceSets will be distributed across. Ignored if
                        Placement is set
                      type: string
                    walPVCTemplate:
                      description: PersistentVolumeClaim is a user's request for and
                        claim to a persistent volume
                      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:
                          description: |-
                            Standard object's metadata.
                            More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
                          properties:
                            annotations:
                              additionalProperties:
                                type: string
                              type: object
                            finalizers:
                              items:
                                type: string
                              type: array
                            labels:
                              additionalProperties:
                                type: string
                              type: object
                            name:
                              type: string
                            namespace:
                              type: string
                          type: object
                        spec:
                          description: |-
                            spec defines the desired characteristics of a volume requested by a pod author.
                            More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims
                          properties:
                            accessModes:
                              description: |-
                                accessModes contains the desired access modes the volume should have.
                                More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1
                              items:
                                type: string
                              type: array
                              x-kubernetes-list-type: atomic
                            dataSource:
                              description: |-
                                dataSource field can be used to specify either:
                                * An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot)
                                * An existing PVC (PersistentVolumeClaim)
                                If the provisioner or an external controller can support the specified data source,
                                it will create a new volume based on the contents of the specified data source.
                                When the AnyVolumeDataSource feature gate is enabled, dataSource contents will be copied to dataSourceRef,
                                and dataSourceRef contents will be copied to dataSource when dataSourceRef.namespace is not specified.
                                If the namespace is specified, then dataSourceRef will not be copied to dataSource.
                              properties:
                                apiGroup:
                                  description: |-
                                    APIGroup is the group for the resource being referenced.
                                    If APIGroup is not specified, the specified Kind must be in the core API group.
                                    For any other third-party types, APIGroup is required.
                                  type: string
                                kind:
                                  description: Kind is the type of resource being
                                    referenced
                                  type: string
                                name:
                                  description: Name is the name of resource being
                                    referenced
                                  type: string
                              required:
                              - kind
                              - name
                              type: object
                              x-kubernetes-map-type: atomic
                            dataSourceRef:
                              description: |-
                                dataSourceRef specifies the object from which to populate the volume with data, if a non-empty
                                volume is desired. This may be any object from a non-empty API group (non
                                core object) or a PersistentVolumeClaim object.
                                When this field is specified, volume binding will only succeed if the type of
                                the specified object matches some installed volume populator or dynamic
                                provisioner.
                                This field will replace the functionality of the dataSource field and as such
                                if both fields are non-empty, they must have the same value. For backwards
                                compatibility, when namespace isn't specified in dataSourceRef,
                                both fields (dataSource and dataSourceRef) will be set to the same
                                value automatically if one of them is empty and the other is non-empty.
                                When namespace is specified in dataSourceRef,
                                dataSource isn't set to the same value and must be empty.
                                There are three important differences between dataSource and dataSourceRef:
                                * While dataSource only allows two specific types of objects, dataSourceRef
                                  allows any non-core object, as well as PersistentVolumeClaim objects.
                                * While dataSource ignores disallowed values (dropping them), dataSourceRef
                                  preserves all values, and generates an error if a disallowed value is
                                  specified.
                                * While dataSource only allows local objects, dataSourceRef allows objects
                                  in any namespaces.
                                (Beta) Using this field requires the AnyVolumeDataSource feature gate to be enabled.
                                (Alpha) Using the namespace field of dataSourceRef requires the CrossNamespaceVolumeDataSource feature gate to be enabled.
                              properties:
                                apiGroup:
                                  description: |-
                                    APIGroup is the group for the resource being referenced.
                                    If APIGroup is not specified, the specified Kind must be in the core API group.
                                    For any other third-party types, APIGroup is required.
                                  type: string
                                kind:
                                  description: Kind is the type of resource being
                                    referenced
                                  type: string
                                name:
                                  description: Name is the name of resource being
                                    referenced
                                  type: string
                                namespace:
                                  description: |-
                                    Namespace is the namespace of resource being referenced
                                    Note that when a namespace is specified, a gateway.networking.k8s.io/ReferenceGrant object is required in the referent namespace to allow that namespace's owner to accept the reference. See the ReferenceGrant documentation for details.
                                    (Alpha) This field requires the CrossNamespaceVolumeDataSource feature gate to be enabled.
                                  type: string
                              required:
                              - kind
                              - name
                              type: object
                            resources:
                              description: |-
                                resources represents the minimum resources the volume should have.
                                If RecoverVolumeExpansionFailure feature is enabled users are allowed to specify resource requirements
                                that are lower than previous value but must still be higher than capacity recorded in the
                                status field of the claim.
                                More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources
                              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-resources-containers/
                                  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. Requests cannot exceed Limits.
                                    More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
                                  type: object
                              type: object
                            selector:
                              description: selector is a label query over volumes
                                to consider for binding.
                              properties:
                                matchExpressions:
                                  description: matchExpressions is a list of label
                                    selector requirements. The requirements are ANDed.
                                  items:
                                    description: |-
                                      A label selector requirement is a selector that contains values, a key, and an operator that
                                      relates the key and values.
                                    properties:
                                      key:
                                        description: key is the label key that the
                                          selector applies to.
                                        type: string
                                      operator:
                                        description: |-
                                          operator represents a key's relationship to a set of values.
                                          Valid operators are In, NotIn, Exists and DoesNotExist.
                                        type: string
                                      values:
                                        description: |-
                                          values is an array of string values. If the operator is In or NotIn,
                                          the values array must be non-empty. If the operator is Exists or DoesNotExist,
                                          the values array must be empty. This array is replaced during a strategic
                                          merge patch.
                                        items:
                                          type: string
                                        type: array
                                        x-kubernetes-list-type: atomic
                                    required:
                                    - key
                                    - operator
                                    type: object
                                  type: array
                                  x-kubernetes-list-type: atomic
                                matchLabels:
                                  additionalProperties:
                                    type: string
                                  description: |-
                                    matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
                                    map is equivalent to an element of matchExpressions, whose key field is "key", the
                                    operator is "In", and the values array contains only "value". The requirements are ANDed.
                                  type: object
                              type: object
                              x-kubernetes-map-type: atomic
                            storageClassName:
                              description: |-
                                storageClassName is the name of the StorageClass required by the claim.
                                More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1
                              type: string
                            volumeAttributesClassName:
                              description: |-
                                volumeAttributesClassName may be used to set the VolumeAttributesClass used by this claim.
                                If specified, the CSI driver will create or update the volume with the attributes defined
                                in the corresponding VolumeAttributesClass. This has a different purpose than storageClassName,
                                it can be changed after the claim is created. An empty string value means that no VolumeAttributesClass
                                will be applied to the claim but it's not allowed to reset this field to empty string once it is set.
                                If unspecified and the PersistentVolumeClaim is unbound, the default VolumeAttributesClass
                                will be set by the persistentvolume controller if it exists.
                                If the resource referred to by volumeAttributesClass does not exist, this PersistentVolumeClaim will be
                                set to a Pending state, as reflected by the modifyVolumeStatus field, until such as a resource
                                exists.
                                More info: https://kubernetes.io/docs/concepts/storage/volume-attributes-classes/
                                (Beta) Using this field requires the VolumeAttributesClass feature gate to be enabled (off by default).
                              type: string
                            volumeMode:
                              description: |-
                                volumeMode defines what type of volume is required by the claim.
                                Value of Filesystem is implied when not included in claim spec.
                              type: string
                            volumeName:
                              description: volumeName is the binding reference to
                                the PersistentVolume backing this claim.
                              type: string
                          type: object
                        status:
                          description: |-
                            status represents the current information/status of a persistent volume claim.
                            Read-only.
                            More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims
                          properties:
                            accessModes:
                              description: |-
                                accessModes contains the actual access modes the volume backing the PVC has.
                                More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1
                              items:
                                type: string
                              type: array
                              x-kubernetes-list-type: atomic
                            allocatedResourceStatuses:
                              additionalProperties:
                                description: |-
                                  When a controller receives persistentvolume claim update with ClaimResourceStatus for a resource
                                  that it does not recognizes, then it should ignore that update and let other controllers
                                  handle it.
                                type: string
                              description: "allocatedResourceStatuses stores status
                                of resource being resized for the given PVC.\nKey
                                names follow standard Kubernetes label syntax. Valid
                                values are either:\n\t* Un-prefixed keys:\n\t\t- storage
                                - the capacity of the volume.\n\t* Custom resources
                                must use implementation-defined prefixed names such
                                as \"example.com/my-custom-resource\"\nApart from
                                above values - keys that are unprefixed or have kubernetes.io
                                prefix are considered\nreserved and hence may not
                                be used.\n\nClaimResourceStatus can be in any of following
                                states:\n\t- ControllerResizeInProgress:\n\t\tState
                                set when resize controller starts resizing the volume
                                in control-plane.\n\t- ControllerResizeFailed:\n\t\tState
                                set when resize has failed in resize controller with
                                a terminal error.\n\t- NodeResizePending:\n\t\tState
                                set when resize controller has finished resizing the
                                volume but further resizing of\n\t\tvolume is needed
                                on the node.\n\t- NodeResizeInProgress:\n\t\tState
                                set when kubelet starts resizing the volume.\n\t-
                                NodeResizeFailed:\n\t\tState set when resizing has
                                failed in kubelet with a terminal error. Transient
                                errors don't set\n\t\tNodeResizeFailed.\nFor example:
                                if expanding a PVC for more capacity - this field
                                can be one of the following states:\n\t- pvc.status.allocatedResourceStatus['storage']
                                = \"ControllerResizeInProgress\"\n     - pvc.status.allocatedResourceStatus['storage']
                                = \"ControllerResizeFailed\"\n     - pvc.status.allocatedResourceStatus['storage']
                                = \"NodeResizePending\"\n     - pvc.status.allocatedResourceStatus['storage']
                                = \"NodeResizeInProgress\"\n     - pvc.status.allocatedResourceStatus['storage']
                                = \"NodeResizeFailed\"\nWhen this field is not set,
                                it means that no resize operation is in progress for
                                the given PVC.\n\nA controller that receives PVC update
                                with previously unknown resourceName or ClaimResourceStatus\nshould
                                ignore the update for the purpose it was designed.
                                For example - a controller that\nonly is responsible
                                for resizing capacity of the volume, should ignore
                                PVC updates that change other valid\nresources associated
                                with PVC.\n\nThis is an alpha field and requires enabling
                                RecoverVolumeExpansionFailure feature."
                              type: object
                              x-kubernetes-map-type: granular
                            allocatedResources:
                              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: "allocatedResources tracks the resources
                                allocated to a PVC including its capacity.\nKey names
                                follow standard Kubernetes label syntax. Valid values
                                are either:\n\t* Un-prefixed keys:\n\t\t- storage
                                - the capacity of the volume.\n\t* Custom resources
                                must use implementation-defined prefixed names such
                                as \"example.com/my-custom-resource\"\nApart from
                                above values - keys that are unprefixed or have kubernetes.io
                                prefix are considered\nreserved and hence may not
                                be used.\n\nCapacity reported here may be larger than
                                the actual capacity when a volume expansion operation\nis
                                requested.\nFor storage quota, the larger value from
                                allocatedResources and PVC.spec.resources is used.\nIf
                                allocatedResources is not set, PVC.spec.resources
                                alone is used for quota calculation.\nIf a volume
                                expansion capacity request is lowered, allocatedResources
                                is only\nlowered if there are no expansion operations
                                in progress and if the actual volume capacity\nis
                                equal or lower than the requested capacity.\n\nA controller
                                that receives PVC update with previously unknown resourceName\nshould
                                ignore the update for the purpose it was designed.
                                For example - a controller that\nonly is responsible
                                for resizing capacity of the volume, should ignore
                                PVC updates that change other valid\nresources associated
                                with PVC.\n\nThis is an alpha field and requires enabling
                                RecoverVolumeExpansionFailure feature."
                              type: object
                            capacity:
                              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: capacity represents the actual resources
                                of the underlying volume.
                              type: object
                            conditions:
                              description: |-
                                conditions is the current Condition of persistent volume claim. If underlying persistent volume is being
                                resized then the Condition will be set to 'Resizing'.
                              items:
                                description: PersistentVolumeClaimCondition contains
                                  details about state of pvc
                                properties:
                                  lastProbeTime:
                                    description: lastProbeTime is the time we probed
                                      the condition.
                                    format: date-time
                                    type: string
                                  lastTransitionTime:
                                    description: lastTransitionTime is the time the
                                      condition transitioned from one status to another.
                                    format: date-time
                                    type: string
                                  message:
                                    description: message is the human-readable message
                                      indicating details about last transition.
                                    type: string
                                  reason:
                                    description: |-
                                      reason is a unique, this should be a short, machine understandable string that gives the reason
                                      for condition's last transition. If it reports "Resizing" that means the underlying
                                      persistent volume is being resized.
                                    type: string
                                  status:
                                    description: |-
                                      Status is the status of the condition.
                                      Can be True, False, Unknown.
                                      More info: https://kubernetes.io/docs/reference/kubernetes-api/config-and-storage-resources/persistent-volume-claim-v1/#:~:text=state%20of%20pvc-,conditions.status,-(string)%2C%20required
                                    type: string
                                  type:
                                    description: |-
                                      Type is the type of the condition.
                                      More info: https://kubernetes.io/docs/reference/kubernetes-api/config-and-storage-resources/persistent-volume-claim-v1/#:~:text=set%20to%20%27ResizeStarted%27.-,PersistentVolumeClaimCondition,-contains%20details%20about
                                    type: string
                                required:
                                - status
                                - type
                                type: object
                              type: array
                              x-kubernetes-list-map-keys:
                              - type
                              x-kubernetes-list-type: map
                            currentVolumeAttributesClassName:
                              description: |-
                                currentVolumeAttributesClassName is the current name of the VolumeAttributesClass the PVC is using.
                                When unset, there is no VolumeAttributeClass applied to this PersistentVolumeClaim
                                This is a beta field and requires enabling VolumeAttributesClass feature (off by default).
                              type: string
                            modifyVolumeStatus:
                              description: |-
                                ModifyVolumeStatus represents the status object of ControllerModifyVolume operation.
                                When this is unset, there is no ModifyVolume operation being attempted.
                                This is a beta field and requires enabling VolumeAttributesClass feature (off by default).
                              properties:
                                status:
                                  description: "status is the status of the ControllerModifyVolume
                                    operation. It can be in any of following states:\n
                                    - Pending\n   Pending indicates that the PersistentVolumeClaim
                                    cannot be modified due to unmet requirements,
                                    such as\n   the specified VolumeAttributesClass
                                    not existing.\n - InProgress\n   InProgress indicates
                                    that the volume is being modified.\n - Infeasible\n
                                    \ Infeasible indicates that the request has been
                                    rejected as invalid by the CSI driver. To\n\t
                                    \ resolve the error, a valid VolumeAttributesClass
                                    needs to be specified.\nNote: New statuses can
                                    be added in the future. Consumers should check
                                    for unknown statuses and fail appropriately."
                                  type: string
                                targetVolumeAttributesClassName:
                                  description: targetVolumeAttributesClassName is
                                    the name of the VolumeAttributesClass the PVC
                                    currently being reconciled
                                  type: string
                              required:
                              - status
                              type: object
                            phase:
                              description: phase represents the current phase of PersistentVolumeClaim.
                              type: string
                          type: object
                      type: object
                  required:
                  - count
                  - dataPVCTemplate
                  - name
                  type: object
                type: array
              version:
                description: Version specifies the version of StorageCluster
                type: string
            type: object
          status:
            description: StorageClusterStatus defines the observed state of StorageCluster
            properties:
              conditions:
                description: Conditions describes the state of the StorageCluster
                  resource.
                items:
                  description: |-
                    Condition represents the state of the operator's
                    reconciliation functionality.
                  properties:
                    lastHeartbeatTime:
                      format: date-time
                      type: string
                    lastTransitionTime:
                      format: date-time
                      type: string
                    message:
                      type: string
                    reason:
                      type: string
                    status:
                      type: string
                    type:
                      description: ConditionType is the state of the operator's reconciliation
                        functionality.
                      type: string
                  required:
                  - status
                  - type
                  type: object
                type: array
              currentMonCount:
                description: CurrentMonCount holds the value of ceph mons configured
                  in ceph cluster.
                type: integer
              defaultCephDeviceClass:
                description: DefaultCephDeviceClass holds the default ceph device
                  class to be used for the pools
                type: string
              externalSecretHash:
                description: ExternalSecretHash holds the checksum value of external
                  secret data.
                type: string
              failureDomain:
                description: |-
                  FailureDomain is the base CRUSH element Ceph will use to distribute
                  its data replicas for the default CephBlockPool
                type: string
              failureDomainKey:
                description: |-
                  FailureDomainKey is the specific key used to find the locations available
                  under a failure domain. For example topology.kubernetes.io/zone
                type: string
              failureDomainValues:
                description: |-
                  FailureDomainValues is the list of locations available for a failure
                  domain under the failure domain key.
                items:
                  type: string
                type: array
              images:
                description: Images holds the image reconcile status for all images
                  reconciled by the operator
                properties:
                  ceph:
                    description: ComponentImageStatus holds image status information
                      for a specific component image
                    properties:
                      actualImage:
                        type: string
                      desiredImage:
                        type: string
                    type: object
                  noobaaCore:
                    description: ComponentImageStatus holds image status information
                      for a specific component image
                    properties:
                      actualImage:
                        type: string
                      desiredImage:
                        type: string
                    type: object
                  noobaaDB:
                    description: ComponentImageStatus holds image status information
                      for a specific component image
                    properties:
                      actualImage:
                        type: string
                      desiredImage:
                        type: string
                    type: object
                type: object
              kmsServerConnection:
                description: KMSServerConnection holds the connection state to the
                  KMS server.
                properties:
                  kmsServerAddress:
                    type: string
                  kmsServerConnectionError:
                    type: string
                type: object
              lastAppliedResourceProfile:
                description: LastAppliedResourceProfile is the resource profile that
                  was last applied successfully & is currently in use.
                type: string
              nodeTopologies:
                description: |-
                  NodeTopologies is a list of topology labels on all nodes matching
                  the StorageCluster's placement selector.
                properties:
                  arbiterLocation:
                    description: |-
                      ArbiterLocation is the chosen location in the failure domain for placing the arbiter resources.
                      When the failure domain is not provided as an input, ocs-operator determines the failure domain.
                    type: string
                  labels:
                    additionalProperties:
                      description: TopologyLabelValues is a list of values for a topology
                        label
                      items:
                        type: string
                      type: array
                    description: |-
                      Labels is a map of topology label keys
                      (e.g. "failure-domain.kubernetes.io") to a set of values for those
                      keys.
                    nullable: true
                    type: object
                type: object
              phase:
                description: |-
                  Phase describes the Phase of StorageCluster
                  This is used by OLM UI to provide status information
                  to the user
                type: string
              relatedObjects:
                description: |-
                  RelatedObjects is a list of objects created and maintained by this
                  operator. Object references will be added to this list after they have
                  been created AND found in the cluster.
                items:
                  description: ObjectReference contains enough information to let
                    you inspect or modify the referred object.
                  properties:
                    apiVersion:
                      description: API version of the referent.
                      type: string
                    fieldPath:
                      description: |-
                        If referring to a piece of an object instead of an entire object, this string
                        should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
                        For example, if the object reference is to a container within a pod, this would take on a value like:
                        "spec.containers{name}" (where "name" refers to the name of the container that triggered
                        the event) or if no container name is specified "spec.containers[2]" (container with
                        index 2 in this pod). This syntax is chosen only to have some well-defined way of
                        referencing a part of an object.
                      type: string
                    kind:
                      description: |-
                        Kind of the referent.
                        More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
                      type: string
                    name:
                      description: |-
                        Name of the referent.
                        More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                      type: string
                    namespace:
                      description: |-
                        Namespace of the referent.
                        More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
                      type: string
                    resourceVersion:
                      description: |-
                        Specific resourceVersion to which this reference is made, if any.
                        More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
                      type: string
                    uid:
                      description: |-
                        UID of the referent.
                        More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
                      type: string
                  type: object
                  x-kubernetes-map-type: atomic
                type: array
              storageProviderEndpoint:
                description: |-
                  StorageProviderEndpoint holds endpoint info on Provider cluster which is required
                  for consumer to establish connection with the storage providing cluster.
                type: string
              version:
                description: Version specifies the version of StorageCluster
                type: string
            type: object
        type: object
    served: true
    storage: true
    subresources:
      status: {}
status:
  acceptedNames:
    kind: StorageCluster
    listKind: StorageClusterList
    plural: storageclusters
    singular: storagecluster
  conditions:
  - lastTransitionTime: "2025-10-27T12:43:47Z"
    message: no conflicts found
    reason: NoConflicts
    status: "True"
    type: NamesAccepted
  - lastTransitionTime: "2025-10-27T12:43:47Z"
    message: the initial names have been accepted
    reason: InitialNamesAccepted
    status: "True"
    type: Established
  storedVersions:
  - v1
