mirror of
https://github.com/TECHNOFAB11/zfs-localpv.git
synced 2025-12-12 14:30:12 +01:00
feat(zfspv): pvc should be bound only if volume has been created.
The controller does not check whether the volume has been created or not and return successful. Which in turn binds the pvc to the pv. The PVC should not bound until corresponding zfs volume has been created. Now controller will check the ZFSVolume CR state to be "Ready" before returning successful. The CSI will retry the CreateVolume request when it will get a error reply and when the ZFS node agent creates the ZFS volume and sets the ZFSVolume CR state to be "Ready", the controller will return success for the CreateVolume Request and then PVC will be bound. Signed-off-by: Pawan <pawan@mayadata.io>
This commit is contained in:
parent
9118f56600
commit
25d1f1a413
13 changed files with 150 additions and 5 deletions
|
|
@ -30,6 +30,7 @@ import (
|
|||
// +kubebuilder:printcolumn:name="ZPool",type=string,JSONPath=`.spec.poolName`,description="ZFS Pool where the volume is created"
|
||||
// +kubebuilder:printcolumn:name="Node",type=string,JSONPath=`.spec.ownerNodeID`,description="Node where the volume is created"
|
||||
// +kubebuilder:printcolumn:name="Size",type=string,JSONPath=`.spec.capacity`,description="Size of the volume"
|
||||
// +kubebuilder:printcolumn:name="Status",type=string,JSONPath=`.status.state`,description="Status of the volume"
|
||||
// +kubebuilder:printcolumn:name="volblocksize",type=string,JSONPath=`.spec.volblocksize`,description="volblocksize of volume"
|
||||
// +kubebuilder:printcolumn:name="recordsize",type=string,JSONPath=`.spec.recordsize`,description="recordsize of created zfs dataset"
|
||||
// +kubebuilder:printcolumn:name="Filesystem",type=string,JSONPath=`.spec.fsType`,description="filesystem created on the volume"
|
||||
|
|
@ -39,7 +40,8 @@ type ZFSVolume struct {
|
|||
metav1.TypeMeta `json:",inline"`
|
||||
metav1.ObjectMeta `json:"metadata,omitempty"`
|
||||
|
||||
Spec VolumeInfo `json:"spec"`
|
||||
Spec VolumeInfo `json:"spec"`
|
||||
Status VolStatus `json:"status,omitempty"`
|
||||
}
|
||||
|
||||
// MountInfo contains the volume related info
|
||||
|
|
@ -198,3 +200,12 @@ type VolumeInfo struct {
|
|||
// Default Value: ext4.
|
||||
FsType string `json:"fsType,omitempty"`
|
||||
}
|
||||
|
||||
type VolStatus struct {
|
||||
// State specifies the current state of the volume provisioning request.
|
||||
// The state "Pending" means that the volume creation request has not
|
||||
// processed yet. The state "Ready" means that the volume has been created
|
||||
// and it is ready for the use.
|
||||
// +kubebuilder:validation:Enum=Pending;Ready
|
||||
State string `json:"state,omitempty"`
|
||||
}
|
||||
|
|
|
|||
|
|
@ -66,6 +66,22 @@ func (in *SnapStatus) DeepCopy() *SnapStatus {
|
|||
return out
|
||||
}
|
||||
|
||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||
func (in *VolStatus) DeepCopyInto(out *VolStatus) {
|
||||
*out = *in
|
||||
return
|
||||
}
|
||||
|
||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VolStatus.
|
||||
func (in *VolStatus) DeepCopy() *VolStatus {
|
||||
if in == nil {
|
||||
return nil
|
||||
}
|
||||
out := new(VolStatus)
|
||||
in.DeepCopyInto(out)
|
||||
return out
|
||||
}
|
||||
|
||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||
func (in *VolumeInfo) DeepCopyInto(out *VolumeInfo) {
|
||||
*out = *in
|
||||
|
|
@ -149,6 +165,7 @@ func (in *ZFSVolume) DeepCopyInto(out *ZFSVolume) {
|
|||
out.TypeMeta = in.TypeMeta
|
||||
in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
|
||||
out.Spec = in.Spec
|
||||
out.Status = in.Status
|
||||
return
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue