{{- if .Values.zfsLocalPv.enabled -}}
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    controller-gen.kubebuilder.io/version: v0.19.0
    {{- include "crds.extraAnnotations" .Values.zfsLocalPv | nindent 4 }}
  name: zfssnapshots.zfs.openebs.io
spec:
  group: zfs.openebs.io
  names:
    kind: ZFSSnapshot
    listKind: ZFSSnapshotList
    plural: zfssnapshots
    shortNames:
    - zfssnap
    singular: zfssnapshot
  scope: Namespaced
  versions:
  - name: v1
    schema:
      openAPIV3Schema:
        description: ZFSSnapshot represents a ZFS Snapshot of the zfsvolume
        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: |-
              VolumeInfo defines ZFS volume parameters for all modes in which
              ZFS volumes can be created like - ZFS volume with filesystem,
              ZFS Volume exposed as zfs or ZFS volume exposed as raw block device.
              Some of the parameters can be only set during creation time
              (as specified in the details of the parameter), and a few are editable.
              In case of Cloned volumes, the parameters are assigned the same values
              as the source volume.
            properties:
              capacity:
                description: Capacity of the volume
                minLength: 1
                type: string
              compression:
                description: |-
                  Compression specifies the block-level compression algorithm to be applied to the ZFS Volume.
                  The value "on" indicates ZFS to use the default compression algorithm. The default compression
                  algorithm used by ZFS will be either lzjb or, if the lz4_compress feature is enabled, lz4.
                  Compression property can be edited after the volume has been created. The change will only
                  be applied to the newly-written data. For instance, if the Volume was created with "off" and
                  the next day the compression was modified to "on", the data written prior to setting "on" will
                  not be compressed.
                  Default Value: off.
                pattern: ^(on|off|lzjb|zstd(?:-fast|-[1-9]|-1[0-9])?|gzip(?:-[1-9])?|zle|lz4)$
                type: string
              dedup:
                description: |-
                  Deduplication is the process for removing redundant data at the block level,
                  reducing the total amount of data stored. If a file system has the dedup property
                  enabled, duplicate data blocks are removed synchronously.
                  The result is that only unique data is stored and common components are shared among files.
                  Deduplication can consume significant processing power (CPU) and memory as well as generate additional disk IO.
                  Before creating a pool with deduplication enabled, ensure that you have planned your hardware
                  requirements appropriately and implemented appropriate recovery practices, such as regular backups.
                  As an alternative to deduplication consider using compression=lz4, as a less resource-intensive alternative.
                  should be enabled on the zvol.
                  Dedup property can be edited after the volume has been created.
                  Default Value: off.
                enum:
                - "on"
                - "off"
                type: string
              encryption:
                description: |-
                  Enabling the encryption feature allows for the creation of
                  encrypted filesystems and volumes. ZFS will encrypt file and zvol data,
                  file attributes, ACLs, permission bits, directory listings, FUID mappings,
                  and userused / groupused data. ZFS will not encrypt metadata related to the
                  pool structure, including dataset and snapshot names, dataset hierarchy,
                  properties, file size, file holes, and deduplication tables
                  (though the deduplicated data itself is encrypted).
                  Default Value: off.
                pattern: ^(on|off|aes-128-[c,g]cm|aes-192-[c,g]cm|aes-256-[c,g]cm)$
                type: string
              fsType:
                description: |-
                  FsType specifies filesystem type for the zfs volume/dataset.
                  If FsType is provided as "zfs", then the driver will create a
                  ZFS dataset, formatting is not required as underlying filesystem is ZFS anyway.
                  If FsType is ext2, ext3, ext4 or xfs, then the driver will create a ZVOL and
                  format the volume accordingly.
                  FsType can not be modified once volume has been provisioned.
                  Default Value: ext4.
                type: string
              keyformat:
                description: |-
                  KeyFormat specifies format of the encryption key
                  The supported KeyFormats are passphrase, raw, hex.
                enum:
                - passphrase
                - raw
                - hex
                type: string
              keylocation:
                description: KeyLocation is the location of key for the encryption
                type: string
              ownerNodeID:
                description: |-
                  OwnerNodeID is the Node ID where the ZPOOL is running which is where
                  the volume has been provisioned.
                  OwnerNodeID can not be edited after the volume has been provisioned.
                minLength: 1
                type: string
              poolName:
                description: |-
                  poolName specifies the name of the pool where the volume has been created.
                  PoolName can not be edited after the volume has been provisioned.
                minLength: 1
                type: string
              quotaType:
                description: |-
                  quotaType determines whether the dataset volume quota type is of type "quota" or "refquota".
                  QuotaType can not be modified once volume has been provisioned.
                  Default Value: quota.
                enum:
                - quota
                - refquota
                type: string
              recordsize:
                description: |-
                  Specifies a suggested block size for files in the file system.
                  The size specified must be a power of two greater than or equal to 512 and less than or equal to 128 Kbytes.
                  RecordSize property can be edited after the volume has been created.
                  Changing the file system's recordsize affects only files created afterward; existing files are unaffected.
                  Default Value: 128k.
                minLength: 1
                type: string
              shared:
                description: |-
                  Shared specifies whether the volume can be shared among multiple pods.
                  If it is not set to "yes", then the ZFS-LocalPV Driver will not allow
                  the volumes to be mounted by more than one pods.
                enum:
                - "yes"
                - "no"
                type: string
              snapname:
                description: |-
                  SnapName specifies the name of the snapshot where the volume has been cloned from.
                  Snapname can not be edited after the volume has been provisioned.
                type: string
              thinProvision:
                description: |-
                  ThinProvision describes whether space reservation for the source volume is required or not.
                  The value "yes" indicates that volume should be thin provisioned and "no" means thick provisioning of the volume.
                  If thinProvision is set to "yes" then volume can be provisioned even if the ZPOOL does not
                  have the enough capacity.
                  If thinProvision is set to "no" then volume can be provisioned only if the ZPOOL has enough
                  capacity and capacity required by volume can be reserved.
                  ThinProvision can not be modified once volume has been provisioned.
                  Default Value: no.
                enum:
                - "yes"
                - "no"
                type: string
              volblocksize:
                description: |-
                  VolBlockSize specifies the block size for the zvol.
                  The volsize can only be set to a multiple of volblocksize, and cannot be zero.
                  VolBlockSize can not be edited after the volume has been provisioned.
                  Default Value: 8k.
                minLength: 1
                type: string
              volumeType:
                description: |-
                  volumeType determines whether the volume is of type "DATASET" or "ZVOL".
                  If fstype provided in the storageclass is "zfs", a volume of type dataset will be created.
                  If "ext4", "ext3", "ext2" or "xfs" is mentioned as fstype
                  in the storageclass, then a volume of type zvol will be created, which will be
                  further formatted as the fstype provided in the storageclass.
                  VolumeType can not be modified once volume has been provisioned.
                enum:
                - ZVOL
                - DATASET
                type: string
            required:
            - capacity
            - ownerNodeID
            - poolName
            - volumeType
            type: object
          status:
            description: SnapStatus string that reflects if the snapshot was created
              successfully
            properties:
              state:
                type: string
            type: object
        required:
        - spec
        - status
        type: object
    served: true
    storage: true
  - name: v1alpha1
    schema:
      openAPIV3Schema:
        description: ZFSSnapshot represents a ZFS Snapshot of the zfsvolume
        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: |-
              VolumeInfo defines ZFS volume parameters for all modes in which
              ZFS volumes can be created like - ZFS volume with filesystem,
              ZFS Volume exposed as zfs or ZFS volume exposed as raw block device.
              Some of the parameters can be only set during creation time
              (as specified in the details of the parameter), and a few are editable.
              In case of Cloned volumes, the parameters are assigned the same values
              as the source volume.
            properties:
              capacity:
                description: Capacity of the volume
                minLength: 1
                type: string
              compression:
                description: |-
                  Compression specifies the block-level compression algorithm to be applied to the ZFS Volume.
                  The value "on" indicates ZFS to use the default compression algorithm. The default compression
                  algorithm used by ZFS will be either lzjb or, if the lz4_compress feature is enabled, lz4.
                  Compression property can be edited after the volume has been created. The change will only
                  be applied to the newly-written data. For instance, if the Volume was created with "off" and
                  the next day the compression was modified to "on", the data written prior to setting "on" will
                  not be compressed.
                  Default Value: off.
                pattern: ^(on|off|lzjb|gzip|gzip-[1-9]|zle|lz4)$
                type: string
              dedup:
                description: |-
                  Deduplication is the process for removing redundant data at the block level,
                  reducing the total amount of data stored. If a file system has the dedup property
                  enabled, duplicate data blocks are removed synchronously.
                  The result is that only unique data is stored and common components are shared among files.
                  Deduplication can consume significant processing power (CPU) and memory as well as generate additional disk IO.
                  Before creating a pool with deduplication enabled, ensure that you have planned your hardware
                  requirements appropriately and implemented appropriate recovery practices, such as regular backups.
                  As an alternative to deduplication consider using compression=lz4, as a less resource-intensive alternative.
                  should be enabled on the zvol.
                  Dedup property can be edited after the volume has been created.
                  Default Value: off.
                enum:
                - "on"
                - "off"
                type: string
              encryption:
                description: |-
                  Enabling the encryption feature allows for the creation of
                  encrypted filesystems and volumes. ZFS will encrypt file and zvol data,
                  file attributes, ACLs, permission bits, directory listings, FUID mappings,
                  and userused / groupused data. ZFS will not encrypt metadata related to the
                  pool structure, including dataset and snapshot names, dataset hierarchy,
                  properties, file size, file holes, and deduplication tables
                  (though the deduplicated data itself is encrypted).
                  Default Value: off.
                pattern: ^(on|off|aes-128-[c,g]cm|aes-192-[c,g]cm|aes-256-[c,g]cm)$
                type: string
              fsType:
                description: |-
                  FsType specifies filesystem type for the zfs volume/dataset.
                  If FsType is provided as "zfs", then the driver will create a
                  ZFS dataset, formatting is not required as underlying filesystem is ZFS anyway.
                  If FsType is ext2, ext3, ext4 or xfs, then the driver will create a ZVOL and
                  format the volume accordingly.
                  FsType can not be modified once volume has been provisioned.
                  Default Value: ext4.
                type: string
              keyformat:
                description: |-
                  KeyFormat specifies format of the encryption key
                  The supported KeyFormats are passphrase, raw, hex.
                enum:
                - passphrase
                - raw
                - hex
                type: string
              keylocation:
                description: KeyLocation is the location of key for the encryption
                type: string
              ownerNodeID:
                description: |-
                  OwnerNodeID is the Node ID where the ZPOOL is running which is where
                  the volume has been provisioned.
                  OwnerNodeID can not be edited after the volume has been provisioned.
                minLength: 1
                type: string
              poolName:
                description: |-
                  poolName specifies the name of the pool where the volume has been created.
                  PoolName can not be edited after the volume has been provisioned.
                minLength: 1
                type: string
              recordsize:
                description: |-
                  Specifies a suggested block size for files in the file system.
                  The size specified must be a power of two greater than or equal to 512 and less than or equal to 128 Kbytes.
                  RecordSize property can be edited after the volume has been created.
                  Changing the file system's recordsize affects only files created afterward; existing files are unaffected.
                  Default Value: 128k.
                minLength: 1
                type: string
              snapname:
                description: |-
                  SnapName specifies the name of the snapshot where the volume has been cloned from.
                  Snapname can not be edited after the volume has been provisioned.
                type: string
              thinProvision:
                description: |-
                  ThinProvision describes whether space reservation for the source volume is required or not.
                  The value "yes" indicates that volume should be thin provisioned and "no" means thick provisioning of the volume.
                  If thinProvision is set to "yes" then volume can be provisioned even if the ZPOOL does not
                  have the enough capacity.
                  If thinProvision is set to "no" then volume can be provisioned only if the ZPOOL has enough
                  capacity and capacity required by volume can be reserved.
                  ThinProvision can not be modified once volume has been provisioned.
                  Default Value: no.
                enum:
                - "yes"
                - "no"
                type: string
              volblocksize:
                description: |-
                  VolBlockSize specifies the block size for the zvol.
                  The volsize can only be set to a multiple of volblocksize, and cannot be zero.
                  VolBlockSize can not be edited after the volume has been provisioned.
                  Default Value: 8k.
                minLength: 1
                type: string
              volumeType:
                description: |-
                  volumeType determines whether the volume is of type "DATASET" or "ZVOL".
                  If fstype provided in the storageclass is "zfs", a volume of type dataset will be created.
                  If "ext4", "ext3", "ext2" or "xfs" is mentioned as fstype
                  in the storageclass, then a volume of type zvol will be created, which will be
                  further formatted as the fstype provided in the storageclass.
                  VolumeType can not be modified once volume has been provisioned.
                enum:
                - ZVOL
                - DATASET
                type: string
            required:
            - capacity
            - ownerNodeID
            - poolName
            - volumeType
            type: object
          status:
            description: SnapStatus string that reflects if the snapshot was created
              successfully
            properties:
              state:
                type: string
            type: object
        required:
        - spec
        - status
        type: object
    served: true
    storage: false
{{- end -}}
