From ae4c2a18589453ff91d7a3c94192967541d595d1 Mon Sep 17 00:00:00 2001 From: j-griffith Date: Thu, 11 Apr 2019 13:45:03 -0600 Subject: [PATCH] Enable PVC as DataSource for PVC creation This enables the ability to specify and existing PVC as a DataSource in a new PVC Spec (eg "clone" and existing volume). --- pkg/api/persistentvolumeclaim/util.go | 1 - pkg/apis/core/validation/validation_test.go | 45 +++++++++++++++++++++ 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/pkg/api/persistentvolumeclaim/util.go b/pkg/api/persistentvolumeclaim/util.go index 3612881107c..2fbb207a32e 100644 --- a/pkg/api/persistentvolumeclaim/util.go +++ b/pkg/api/persistentvolumeclaim/util.go @@ -65,7 +65,6 @@ func dataSourceIsEnabled(pvcSpec *core.PersistentVolumeClaimSpec) bool { *pvcSpec.DataSource.APIGroup == "snapshot.storage.k8s.io" && utilfeature.DefaultFeatureGate.Enabled(features.VolumeSnapshotDataSource) { return true - } } return false diff --git a/pkg/apis/core/validation/validation_test.go b/pkg/apis/core/validation/validation_test.go index 4e4cf4dbdb6..66258259f5b 100644 --- a/pkg/apis/core/validation/validation_test.go +++ b/pkg/apis/core/validation/validation_test.go @@ -13333,3 +13333,48 @@ func TestAlphaVolumePVCDataSource(t *testing.T) { } } } + +func testDataSourceInSpec(name string, kind string, apiGroup string) *core.PersistentVolumeClaimSpec { + scName := "csi-plugin" + dataSourceInSpec := core.PersistentVolumeClaimSpec{ + AccessModes: []core.PersistentVolumeAccessMode{ + core.ReadOnlyMany, + }, + Resources: core.ResourceRequirements{ + Requests: core.ResourceList{ + core.ResourceName(core.ResourceStorage): resource.MustParse("10G"), + }, + }, + StorageClassName: &scName, + DataSource: &core.TypedLocalObjectReference{ + APIGroup: &apiGroup, + Kind: kind, + Name: name, + }, + } + + return &dataSourceInSpec +} + +func TestAlphaVolumeDataSource(t *testing.T) { + successTestCases := []core.PersistentVolumeClaimSpec{ + *testDataSourceInSpec("test_snapshot", "VolumeSnapshot", "snapshot.storage.k8s.io"), + *testDataSourceInSpec("test_pvc", "PersistentVolumeClaim", ""), + } + failedTestCases := []core.PersistentVolumeClaimSpec{ + *testDataSourceInSpec("", "VolumeSnapshot", "snapshot.storage.k8s.io"), + *testDataSourceInSpec("test_snapshot", "PersistentVolumeClaim", "snapshot.storage.k8s.io"), + *testDataSourceInSpec("test_snapshot", "VolumeSnapshot", "storage.k8s.io"), + } + + for _, tc := range successTestCases { + if errs := ValidatePersistentVolumeClaimSpec(&tc, field.NewPath("spec")); len(errs) != 0 { + t.Errorf("expected success: %v", errs) + } + } + for _, tc := range failedTestCases { + if errs := ValidatePersistentVolumeClaimSpec(&tc, field.NewPath("spec")); len(errs) == 0 { + t.Errorf("expected failure: %v", errs) + } + } +}