diff --git a/apis/apps/v1alpha1/cluster_types.go b/apis/apps/v1alpha1/cluster_types.go index 985dd6e483d..33fdaad0356 100644 --- a/apis/apps/v1alpha1/cluster_types.go +++ b/apis/apps/v1alpha1/cluster_types.go @@ -414,12 +414,10 @@ type ClusterComponentVolumeClaimTemplate struct { } func (r *ClusterComponentVolumeClaimTemplate) toVolumeClaimTemplate() corev1.PersistentVolumeClaimTemplate { - return corev1.PersistentVolumeClaimTemplate{ - ObjectMeta: metav1.ObjectMeta{ - Name: r.Name, - }, - Spec: r.Spec.ToV1PersistentVolumeClaimSpec(), - } + t := corev1.PersistentVolumeClaimTemplate{} + t.ObjectMeta.Name = r.Name + t.Spec = r.Spec.ToV1PersistentVolumeClaimSpec() + return t } type PersistentVolumeClaimSpec struct { @@ -440,9 +438,12 @@ type PersistentVolumeClaimSpec struct { // More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1. // +optional StorageClassName *string `json:"storageClassName,omitempty" protobuf:"bytes,5,opt,name=storageClassName"` - // volumeMode defines what type of volume is required by the claim. - // +optional - VolumeMode *corev1.PersistentVolumeMode `json:"volumeMode,omitempty" protobuf:"bytes,6,opt,name=volumeMode,casttype=PersistentVolumeMode"` + // TODO: + // // preferStorageClassNames added support specifying storageclasses.storage.k8s.io names, in order + // // to adapt multi-cloud deployment, where storageclasses are all distinctly different among clouds. + // // +listType=set + // // +optional + // PreferSCNames []string `json:"preferStorageClassNames,omitempty"` } // ToV1PersistentVolumeClaimSpec converts to corev1.PersistentVolumeClaimSpec. @@ -450,21 +451,21 @@ func (r *PersistentVolumeClaimSpec) ToV1PersistentVolumeClaimSpec() corev1.Persi return corev1.PersistentVolumeClaimSpec{ AccessModes: r.AccessModes, Resources: r.Resources, - StorageClassName: r.getStorageClassName(viper.GetString(constant.CfgKeyDefaultStorageClass)), - VolumeMode: r.VolumeMode, + StorageClassName: r.GetStorageClassName(viper.GetString(constant.CfgKeyDefaultStorageClass)), } } -// getStorageClassName returns PersistentVolumeClaimSpec.StorageClassName if a value is assigned; otherwise, +// GetStorageClassName returns PersistentVolumeClaimSpec.StorageClassName if a value is assigned; otherwise, // it returns preferSC argument. -func (r *PersistentVolumeClaimSpec) getStorageClassName(preferSC string) *string { +func (r *PersistentVolumeClaimSpec) GetStorageClassName(preferSC string) *string { if r.StorageClassName != nil && *r.StorageClassName != "" { return r.StorageClassName } - if preferSC != "" { - return &preferSC + + if preferSC == "" { + return nil } - return nil + return &preferSC } type Affinity struct { diff --git a/apis/apps/v1alpha1/cluster_types_test.go b/apis/apps/v1alpha1/cluster_types_test.go index 205dd990f51..0f991b0883c 100644 --- a/apis/apps/v1alpha1/cluster_types_test.go +++ b/apis/apps/v1alpha1/cluster_types_test.go @@ -24,7 +24,6 @@ import ( . "github.com/onsi/gomega" "github.com/spf13/viper" - corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/util/intstr" "k8s.io/apimachinery/pkg/util/yaml" @@ -32,6 +31,7 @@ import ( ) var _ = Describe("", func() { + It("test GetMinAvailable", func() { prefer := intstr.IntOrString{} clusterCompSpec := &ClusterComponentSpec{} @@ -56,8 +56,7 @@ var _ = Describe("", func() { pvcSpec := r.ToV1PersistentVolumeClaimSpec() Expect(pvcSpec.AccessModes).Should(BeEquivalentTo(r.AccessModes)) Expect(pvcSpec.Resources).Should(BeEquivalentTo(r.Resources)) - Expect(pvcSpec.StorageClassName).Should(BeEquivalentTo(r.getStorageClassName(viper.GetString(constant.CfgKeyDefaultStorageClass)))) - Expect(pvcSpec.VolumeMode).Should(BeEquivalentTo(r.VolumeMode)) + Expect(pvcSpec.StorageClassName).Should(BeEquivalentTo(r.GetStorageClassName(viper.GetString(constant.CfgKeyDefaultStorageClass)))) }) It("test ToV1PersistentVolumeClaimSpec with default storage class", func() { @@ -69,24 +68,14 @@ var _ = Describe("", func() { viper.Set(constant.CfgKeyDefaultStorageClass, "") }) - It("test ToV1PersistentVolumeClaimSpec with volume mode", func() { - for _, mode := range []corev1.PersistentVolumeMode{corev1.PersistentVolumeBlock, corev1.PersistentVolumeFilesystem} { - r := PersistentVolumeClaimSpec{ - VolumeMode: &mode, - } - pvcSpec := r.ToV1PersistentVolumeClaimSpec() - Expect(pvcSpec.VolumeMode).Should(BeEquivalentTo(r.VolumeMode)) - } - }) - - It("test getStorageClassName", func() { + It("test GetStorageClassName", func() { preferSC := "prefer-sc" r := PersistentVolumeClaimSpec{} r.StorageClassName = nil - Expect(r.getStorageClassName(preferSC)).Should(BeEquivalentTo(&preferSC)) + Expect(r.GetStorageClassName(preferSC)).Should(BeEquivalentTo(&preferSC)) scName := "test-sc" r.StorageClassName = &scName - Expect(r.getStorageClassName(preferSC)).Should(BeEquivalentTo(&scName)) + Expect(r.GetStorageClassName(preferSC)).Should(BeEquivalentTo(&scName)) }) It("test IsDeleting", func() { diff --git a/apis/apps/v1alpha1/zz_generated.deepcopy.go b/apis/apps/v1alpha1/zz_generated.deepcopy.go index feda2d5696f..7a22043804f 100644 --- a/apis/apps/v1alpha1/zz_generated.deepcopy.go +++ b/apis/apps/v1alpha1/zz_generated.deepcopy.go @@ -2695,11 +2695,6 @@ func (in *PersistentVolumeClaimSpec) DeepCopyInto(out *PersistentVolumeClaimSpec *out = new(string) **out = **in } - if in.VolumeMode != nil { - in, out := &in.VolumeMode, &out.VolumeMode - *out = new(v1.PersistentVolumeMode) - **out = **in - } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PersistentVolumeClaimSpec. diff --git a/config/crd/bases/apps.kubeblocks.io_clusters.yaml b/config/crd/bases/apps.kubeblocks.io_clusters.yaml index 5fb5188f913..449998a3cf7 100644 --- a/config/crd/bases/apps.kubeblocks.io_clusters.yaml +++ b/config/crd/bases/apps.kubeblocks.io_clusters.yaml @@ -562,10 +562,6 @@ spec: description: 'storageClassName is the name of the StorageClass required by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1.' type: string - volumeMode: - description: volumeMode defines what type of volume - is required by the claim. - type: string type: object required: - name diff --git a/controllers/apps/components/base_stateful.go b/controllers/apps/components/base_stateful.go index 97b27b8608a..c21a1de0add 100644 --- a/controllers/apps/components/base_stateful.go +++ b/controllers/apps/components/base_stateful.go @@ -220,9 +220,9 @@ func (c *statefulComponentBase) Restart(reqCtx intctrlutil.RequestCtx, cli clien func (c *statefulComponentBase) ExpandVolume(reqCtx intctrlutil.RequestCtx, cli client.Client) error { for _, vct := range c.runningWorkload.Spec.VolumeClaimTemplates { var proto *corev1.PersistentVolumeClaimTemplate - for i, v := range c.Component.VolumeClaimTemplates { + for _, v := range c.Component.VolumeClaimTemplates { if v.Name == vct.Name { - proto = &c.Component.VolumeClaimTemplates[i] + proto = &v break } } diff --git a/deploy/helm/crds/apps.kubeblocks.io_clusters.yaml b/deploy/helm/crds/apps.kubeblocks.io_clusters.yaml index 5fb5188f913..449998a3cf7 100644 --- a/deploy/helm/crds/apps.kubeblocks.io_clusters.yaml +++ b/deploy/helm/crds/apps.kubeblocks.io_clusters.yaml @@ -562,10 +562,6 @@ spec: description: 'storageClassName is the name of the StorageClass required by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1.' type: string - volumeMode: - description: volumeMode defines what type of volume - is required by the claim. - type: string type: object required: - name