mirror of
https://github.com/TECHNOFAB11/zfs-localpv.git
synced 2025-12-12 06:20:11 +01:00
feat(validation): adding validation for ZFSPV CR parameters (#66)
Validating few parameters for the ZFSVolume custom resource - compression can be "on", "off", "lzjb", "gzip", "gzip-[1-9]", "zle" and "lz4" - encryption can be "on", "off", "aes-128-ccm", "aes-192-ccm", "aes-256-ccm", "aes-128-gcm", "aes-192-gcm", and "aes-256-gcm" - dedup can be "on" and "off" - poolname can be string - ownernodeid can be string - thinprovision can be "yes" and "no" - volumetype can be "DATASET" and "ZVOL" Also added required fields needed to create ZFSVolume CR - ownerNodeID - poolname - volumeType - capacity Signed-off-by: Pawan <pawan@mayadata.io>
This commit is contained in:
parent
fbd4812642
commit
ae724ee096
12 changed files with 2206 additions and 342 deletions
|
|
@ -1,181 +0,0 @@
|
|||
|
||||
---
|
||||
apiVersion: apiextensions.k8s.io/v1beta1
|
||||
kind: CustomResourceDefinition
|
||||
metadata:
|
||||
annotations:
|
||||
controller-gen.kubebuilder.io/version: v0.2.8
|
||||
creationTimestamp: null
|
||||
name: zfsvolumes.zfs.openebs.io
|
||||
spec:
|
||||
additionalPrinterColumns:
|
||||
- JSONPath: .spec.poolName
|
||||
description: ZFS Pool where the volume is created
|
||||
name: ZPool
|
||||
type: string
|
||||
- JSONPath: .spec.ownerNodeID
|
||||
description: Node where the volume is created
|
||||
name: Node
|
||||
type: string
|
||||
- JSONPath: .spec.capacity
|
||||
description: Size of the volume
|
||||
name: Size
|
||||
type: string
|
||||
- JSONPath: .spec.volblocksize
|
||||
description: volblocksize of volume
|
||||
name: volblocksize
|
||||
type: string
|
||||
- JSONPath: .spec.recordsize
|
||||
description: recordsize of created zfs dataset
|
||||
name: recordsize
|
||||
type: string
|
||||
- JSONPath: .spec.fsType
|
||||
description: filesystem created on the volume
|
||||
name: Filesystem
|
||||
type: string
|
||||
- JSONPath: .status.creationTime
|
||||
description: Timestamp when the volume has been created.
|
||||
name: CreationTime
|
||||
type: date
|
||||
- JSONPath: .metadata.creationTimestamp
|
||||
name: Age
|
||||
type: date
|
||||
group: zfs.openebs.io
|
||||
names:
|
||||
kind: ZFSVolume
|
||||
listKind: ZFSVolumeList
|
||||
plural: zfsvolumes
|
||||
shortNames:
|
||||
- zfsvol
|
||||
- zv
|
||||
singular: zfsvolume
|
||||
preserveUnknownFields: false
|
||||
scope: Namespaced
|
||||
subresources: {}
|
||||
validation:
|
||||
openAPIV3Schema:
|
||||
description: ZFSVolume represents a ZFS based 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/api-conventions.md#resources'
|
||||
type: string
|
||||
kind:
|
||||
description: 'Kind is a string value representing the REST resource this
|
||||
object represents. Servers may infer this from the endpoint the client
|
||||
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds'
|
||||
type: string
|
||||
metadata:
|
||||
type: object
|
||||
spec:
|
||||
description: VolumeInfo contains the volume related info for all types of
|
||||
volumes in ZFSVolume
|
||||
properties:
|
||||
capacity:
|
||||
description: Capacity of the volume
|
||||
minLength: 1
|
||||
type: string
|
||||
compression:
|
||||
description: Controls the compression algorithm used for this dataset.
|
||||
Compression specifies if the it should enabled on the zvol. Setting
|
||||
compression to on indicates that the current default compression algorithm
|
||||
should be used. The current default compression algorithm is either
|
||||
lzjb or, if the lz4_compress feature is enabled, lz4. Changing this
|
||||
property affects only newly-written data.
|
||||
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
|
||||
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).
|
||||
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
|
||||
type: string
|
||||
keyformat:
|
||||
description: KeyFormat specifies format of the encryption key
|
||||
type: string
|
||||
keylocation:
|
||||
description: KeyLocation is the location of key for the encryption
|
||||
type: string
|
||||
ownerNodeID:
|
||||
minLength: 1
|
||||
type: string
|
||||
poolName:
|
||||
description: poolName specifies the name of the pool where this volume
|
||||
should be created
|
||||
minLength: 1
|
||||
type: string
|
||||
recordsize:
|
||||
description: RecordSize specifies the record size for the zfs dataset
|
||||
minLength: 1
|
||||
type: string
|
||||
snapname:
|
||||
description: SnapName specifies the name of the snapshot where this
|
||||
volume should be cloned
|
||||
type: string
|
||||
thinProvision:
|
||||
description: Thinprovision specifies if we should thin provisioned the
|
||||
volume or not
|
||||
enum:
|
||||
- "Yes"
|
||||
- "no"
|
||||
type: string
|
||||
volblocksize:
|
||||
description: VolBlockSize specifies the block size for the zvol
|
||||
minLength: 1
|
||||
type: string
|
||||
volumeType:
|
||||
description: volumeType determines whether the volume is of type "DATASET"
|
||||
or "ZVOL". if fsttype provided in the storageclass is "zfs", then
|
||||
it will create a volume of type "DATASET". If "ext4", "ext3", "ext2"
|
||||
or "xfs" is mentioned as fstype in the storageclass, it will create
|
||||
a volume of type "ZVOL" so that it can be further formatted with the
|
||||
fstype provided in the storageclass.
|
||||
enum:
|
||||
- ZVOL
|
||||
- DATASET
|
||||
type: string
|
||||
required:
|
||||
- capacity
|
||||
- ownerNodeID
|
||||
- poolName
|
||||
- volumeType
|
||||
type: object
|
||||
required:
|
||||
- spec
|
||||
type: object
|
||||
version: v1alpha1
|
||||
versions:
|
||||
- name: v1alpha1
|
||||
served: true
|
||||
storage: true
|
||||
status:
|
||||
acceptedNames:
|
||||
kind: ""
|
||||
plural: ""
|
||||
conditions: []
|
||||
storedVersions: []
|
||||
Loading…
Add table
Add a link
Reference in a new issue