mirror of
https://github.com/TECHNOFAB11/zfs-localpv.git
synced 2025-12-12 06:20:11 +01:00
feat(crd-gen): automate the CRDs generation with validations for APIs (#75)
- To generate the CRD spec `make manifest` generate then under deploy/yamls directory - added a update-crd script to automate the steps to generate CRDs and its validation of each types Signed-off-by: prateekpandey14 <prateek.pandey@mayadata.io>
This commit is contained in:
parent
8a9ac43ab5
commit
6033789c17
26 changed files with 509 additions and 82 deletions
153
deploy/yamls/zfs.openebs.io_zfssnapshots.yaml
Normal file
153
deploy/yamls/zfs.openebs.io_zfssnapshots.yaml
Normal file
|
|
@ -0,0 +1,153 @@
|
|||
|
||||
---
|
||||
apiVersion: apiextensions.k8s.io/v1beta1
|
||||
kind: CustomResourceDefinition
|
||||
metadata:
|
||||
annotations:
|
||||
controller-gen.kubebuilder.io/version: v0.2.8
|
||||
creationTimestamp: null
|
||||
name: zfssnapshots.zfs.openebs.io
|
||||
spec:
|
||||
group: zfs.openebs.io
|
||||
names:
|
||||
kind: ZFSSnapshot
|
||||
listKind: ZFSSnapshotList
|
||||
plural: zfssnapshots
|
||||
shortNames:
|
||||
- zfssnap
|
||||
singular: zfssnapshot
|
||||
preserveUnknownFields: false
|
||||
scope: Namespaced
|
||||
validation:
|
||||
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/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
|
||||
status:
|
||||
properties:
|
||||
state:
|
||||
type: string
|
||||
type: object
|
||||
required:
|
||||
- spec
|
||||
- status
|
||||
type: object
|
||||
version: v1alpha1
|
||||
versions:
|
||||
- name: v1alpha1
|
||||
served: true
|
||||
storage: true
|
||||
status:
|
||||
acceptedNames:
|
||||
kind: ""
|
||||
plural: ""
|
||||
conditions: []
|
||||
storedVersions: []
|
||||
181
deploy/yamls/zfs.openebs.io_zfsvolumes.yaml
Normal file
181
deploy/yamls/zfs.openebs.io_zfsvolumes.yaml
Normal file
|
|
@ -0,0 +1,181 @@
|
|||
|
||||
---
|
||||
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