apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    controller-gen.kubebuilder.io/version: v0.19.0
    helm.sh/resource-policy: keep
  name: cephobjectzones.ceph.rook.io
spec:
  group: ceph.rook.io
  names:
    kind: CephObjectZone
    listKind: CephObjectZoneList
    plural: cephobjectzones
    shortNames:
      - cephoz
    singular: cephobjectzone
  scope: Namespaced
  versions:
    - additionalPrinterColumns:
        - jsonPath: .status.phase
          name: Phase
          type: string
        - jsonPath: .metadata.creationTimestamp
          name: Age
          type: date
      name: v1
      schema:
        openAPIV3Schema:
          description: CephObjectZone represents a Ceph Object Store Gateway Zone
          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: ObjectZoneSpec represent the spec of an ObjectZone
              properties:
                customEndpoints:
                  description: |-
                    If this zone cannot be accessed from other peer Ceph clusters via the ClusterIP Service
                    endpoint created by Rook, you must set this to the externally reachable endpoint(s). You may
                    include the port in the definition. For example: "https://my-object-store.my-domain.net:443".
                    In many cases, you should set this to the endpoint of the ingress resource that makes the
                    CephObjectStore associated with this CephObjectStoreZone reachable to peer clusters.
                    The list can have one or more endpoints pointing to different RGW servers in the zone.

                    If a CephObjectStore endpoint is omitted from this list, that object store's gateways will
                    not receive multisite replication data
                    (see CephObjectStore.spec.gateway.disableMultisiteSyncTraffic).
                  items:
                    type: string
                  nullable: true
                  type: array
                dataPool:
                  description: The data pool settings
                  nullable: true
                  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
                      nullable: true
                      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.
                            If absent, defaults to the plugin specified in osd_pool_default_erasure_code_profile.
                          enum:
                            - isa
                            - jerasure
                          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: pool, image or init-only.'
                          enum:
                            - pool
                            - image
                            - init-only
                          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
                          minimum: 0
                          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
                metadataPool:
                  description: The metadata pool settings
                  nullable: true
                  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
                      nullable: true
                      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.
                            If absent, defaults to the plugin specified in osd_pool_default_erasure_code_profile.
                          enum:
                            - isa
                            - jerasure
                          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: pool, image or init-only.'
                          enum:
                            - pool
                            - image
                            - init-only
                          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
                          minimum: 0
                          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
                preservePoolsOnDelete:
                  default: true
                  description: Preserve pools on object zone deletion
                  type: boolean
                sharedPools:
                  description: The pool information when configuring RADOS namespaces in existing pools.
                  nullable: true
                  properties:
                    dataPoolName:
                      description: The data pool used for creating RADOS namespaces in the object store
                      type: string
                      x-kubernetes-validations:
                        - message: object store shared data pool is immutable
                          rule: self == oldSelf
                    metadataPoolName:
                      description: The metadata pool used for creating RADOS namespaces in the object store
                      type: string
                      x-kubernetes-validations:
                        - message: object store shared metadata pool is immutable
                          rule: self == oldSelf
                    poolPlacements:
                      description: |-
                        PoolPlacements control which Pools are associated with a particular RGW bucket.
                        Once PoolPlacements are defined, RGW client will be able to associate pool
                        with ObjectStore bucket by providing "<LocationConstraint>" during s3 bucket creation
                        or "X-Storage-Policy" header during swift container creation.
                        See: https://docs.ceph.com/en/latest/radosgw/placement/#placement-targets
                        PoolPlacement with name: "default" will be used as a default pool if no option
                        is provided during bucket creation.
                        If default placement is not provided, spec.sharedPools.dataPoolName and spec.sharedPools.MetadataPoolName will be used as default pools.
                        If spec.sharedPools are also empty, then RGW pools (spec.dataPool and spec.metadataPool) will be used as defaults.
                      items:
                        properties:
                          dataNonECPoolName:
                            description: |-
                              The data pool used to store ObjectStore data that cannot use erasure coding (ex: multi-part uploads).
                              If dataPoolName is not erasure coded, then there is no need for dataNonECPoolName.
                            type: string
                          dataPoolName:
                            description: The data pool used to store ObjectStore objects data.
                            minLength: 1
                            type: string
                          default:
                            description: |-
                              Sets given placement as default. Only one placement in the list can be marked as default.
                              Default is false.
                            type: boolean
                          metadataPoolName:
                            description: The metadata pool used to store ObjectStore bucket index.
                            minLength: 1
                            type: string
                          name:
                            description: Pool placement name. Name can be arbitrary. Placement with name "default" will be used as default.
                            minLength: 1
                            pattern: ^[a-zA-Z0-9._/-]+$
                            type: string
                          storageClasses:
                            description: |-
                              StorageClasses can be selected by user to override dataPoolName during object creation.
                              Each placement has default STANDARD StorageClass pointing to dataPoolName.
                              This list allows defining additional StorageClasses on top of default STANDARD storage class.
                            items:
                              properties:
                                dataPoolName:
                                  description: DataPoolName is the data pool used to store ObjectStore objects data.
                                  minLength: 1
                                  type: string
                                name:
                                  description: |-
                                    Name is the StorageClass name. Ceph allows arbitrary name for StorageClasses,
                                    however most clients/libs insist on AWS names so it is recommended to use
                                    one of the valid x-amz-storage-class values for better compatibility:
                                    REDUCED_REDUNDANCY | STANDARD_IA | ONEZONE_IA | INTELLIGENT_TIERING | GLACIER | DEEP_ARCHIVE | OUTPOSTS | GLACIER_IR | SNOW | EXPRESS_ONEZONE
                                    See AWS docs: https://aws.amazon.com/de/s3/storage-classes/
                                  minLength: 1
                                  pattern: ^[a-zA-Z0-9._/-]+$
                                  type: string
                              required:
                                - dataPoolName
                                - name
                              type: object
                            type: array
                        required:
                          - dataPoolName
                          - metadataPoolName
                          - name
                        type: object
                      type: array
                    preserveRadosNamespaceDataOnDelete:
                      description: Whether the RADOS namespaces should be preserved on deletion of the object store
                      type: boolean
                  type: object
                zoneGroup:
                  description: The name of the zone group the zone is a member of.
                  type: string
              required:
                - zoneGroup
              type: object
            status:
              description: Status represents the status of an object
              properties:
                conditions:
                  items:
                    description: Condition represents a status condition on any Rook-Ceph Custom Resource.
                    properties:
                      lastHeartbeatTime:
                        format: date-time
                        type: string
                      lastTransitionTime:
                        format: date-time
                        type: string
                      message:
                        type: string
                      reason:
                        description: ConditionReason is a reason for a condition
                        type: string
                      status:
                        type: string
                      type:
                        description: ConditionType represent a resource's status
                        type: string
                    type: object
                  type: array
                observedGeneration:
                  description: ObservedGeneration is the latest generation observed by the controller.
                  format: int64
                  type: integer
                phase:
                  type: string
              type: object
              x-kubernetes-preserve-unknown-fields: true
          required:
            - metadata
            - spec
          type: object
      served: true
      storage: true
      subresources:
        status: {}
