Dedupe all Make PVC API object functions into the one MakePersistentVolumeClaim to rule them all

This commit is contained in:
David Zhu 2019-07-19 16:45:04 -07:00
parent 7e806a2dd6
commit e194cf24cc
15 changed files with 206 additions and 151 deletions

View File

@ -88,15 +88,22 @@ type PersistentVolumeConfig struct {
VolumeMode *v1.PersistentVolumeMode
}
// PersistentVolumeClaimConfig is consumed by MakePersistentVolumeClaim() to generate a PVC object.
// AccessModes defaults to all modes (RWO, RWX, ROX) if left empty
// (+optional) Annotations defines the PVC's annotations
// PersistentVolumeClaimConfig is consumed by MakePersistentVolumeClaim() to
// generate a PVC object.
type PersistentVolumeClaimConfig struct {
// NamePrefix defaults to "pvc-" if unspecified
NamePrefix string
// ClaimSize must be specified in the Quantity format. Defaults to 2Gi if
// unspecified
ClaimSize string
// AccessModes defaults to RWO if unspecified
AccessModes []v1.PersistentVolumeAccessMode
Annotations map[string]string
Selector *metav1.LabelSelector
StorageClassName *string
VolumeMode *v1.PersistentVolumeMode
// VolumeMode defaults to nil if unspecified or specified as the empty
// string
VolumeMode *v1.PersistentVolumeMode
}
// NodeSelection specifies where to run a pod, using a combination of fixed node name,
@ -613,21 +620,29 @@ func MakePersistentVolume(pvConfig PersistentVolumeConfig) *v1.PersistentVolume
}
}
// MakePersistentVolumeClaim returns a PVC definition based on the namespace.
// Note: if this PVC is intended to be pre-bound to a PV, whose name is not
// known until the PV is instantiated, then the func CreatePVPVC will add
// pvc.Spec.VolumeName to this claim.
// MakePersistentVolumeClaim returns a PVC API Object based on the PersistentVolumeClaimConfig.
func MakePersistentVolumeClaim(cfg PersistentVolumeClaimConfig, ns string) *v1.PersistentVolumeClaim {
// Specs are expected to match this test's PersistentVolume
if len(cfg.AccessModes) == 0 {
e2elog.Logf("AccessModes unspecified, default: ReadWriteOnce (RWO).")
cfg.AccessModes = append(cfg.AccessModes, v1.ReadWriteOnce)
}
if len(cfg.ClaimSize) == 0 {
cfg.ClaimSize = "2Gi"
}
if len(cfg.NamePrefix) == 0 {
cfg.NamePrefix = "pvc-"
}
if cfg.VolumeMode != nil && *cfg.VolumeMode == "" {
e2elog.Logf("Warning: Making PVC: VolumeMode specified as invalid empty string, treating as nil")
cfg.VolumeMode = nil
}
return &v1.PersistentVolumeClaim{
ObjectMeta: metav1.ObjectMeta{
GenerateName: "pvc-",
GenerateName: cfg.NamePrefix,
Namespace: ns,
Annotations: cfg.Annotations,
},
@ -636,7 +651,7 @@ func MakePersistentVolumeClaim(cfg PersistentVolumeClaimConfig, ns string) *v1.P
AccessModes: cfg.AccessModes,
Resources: v1.ResourceRequirements{
Requests: v1.ResourceList{
v1.ResourceName(v1.ResourceStorage): resource.MustParse("1Gi"),
v1.ResourceName(v1.ResourceStorage): resource.MustParse(cfg.ClaimSize),
},
},
StorageClassName: cfg.StorageClassName,

View File

@ -602,8 +602,11 @@ func startPausePod(cs clientset.Interface, t testsuites.StorageClassTest, node f
framework.ExpectNoError(err, "Failed to create class : %v", err)
}
claim := newClaim(t, ns, "")
claim.Spec.StorageClassName = &class.Name
claim := framework.MakePersistentVolumeClaim(framework.PersistentVolumeClaimConfig{
ClaimSize: t.ClaimSize,
StorageClassName: &(class.Name),
VolumeMode: &t.VolumeMode,
}, ns)
claim, err = cs.CoreV1().PersistentVolumeClaims(ns).Create(claim)
framework.ExpectNoError(err, "Failed to create claim: %v", err)

View File

@ -119,8 +119,11 @@ func testTopologyPositive(cs clientset.Interface, suffix, namespace string, dela
addSingleCSIZoneAllowedTopologyToStorageClass(cs, class, topoZone)
}
test.Client = cs
test.Claim = newClaim(test, namespace, suffix)
test.Claim.Spec.StorageClassName = &class.Name
test.Claim = framework.MakePersistentVolumeClaim(framework.PersistentVolumeClaimConfig{
ClaimSize: test.ClaimSize,
StorageClassName: &(class.Name),
VolumeMode: &test.VolumeMode,
}, namespace)
test.Class = class
if delayBinding {
@ -150,8 +153,11 @@ func testTopologyNegative(cs clientset.Interface, suffix, namespace string, dela
test.Client = cs
test.Class = newStorageClass(test, namespace, suffix)
addSingleCSIZoneAllowedTopologyToStorageClass(cs, test.Class, pvZone)
test.Claim = newClaim(test, namespace, suffix)
test.Claim.Spec.StorageClassName = &test.Class.Name
test.Claim = framework.MakePersistentVolumeClaim(framework.PersistentVolumeClaimConfig{
ClaimSize: test.ClaimSize,
StorageClassName: &(test.Class.Name),
VolumeMode: &test.VolumeMode,
}, namespace)
if delayBinding {
test.TestBindingWaitForFirstConsumer(nodeSelector, true /* expect unschedulable */)
} else {

View File

@ -96,8 +96,10 @@ var _ = utils.SIGDescribe("Mounted flexvolume expand[Slow]", func() {
framework.ExpectNoError(err, "Error creating resizable storage class")
gomega.Expect(*resizableSc.AllowVolumeExpansion).To(gomega.BeTrue())
pvc = getClaim("2Gi", ns)
pvc.Spec.StorageClassName = &resizableSc.Name
pvc = framework.MakePersistentVolumeClaim(framework.PersistentVolumeClaimConfig{
StorageClassName: &(resizableSc.Name),
ClaimSize: "2Gi",
}, ns)
pvc, err = c.CoreV1().PersistentVolumeClaims(pvc.Namespace).Create(pvc)
framework.ExpectNoError(err, "Error creating pvc")
})

View File

@ -88,8 +88,10 @@ var _ = utils.SIGDescribe("Mounted flexvolume volume expand [Slow] [Feature:Expa
framework.ExpectNoError(err, "Error creating resizable storage class: %v", err)
gomega.Expect(*resizableSc.AllowVolumeExpansion).To(gomega.BeTrue())
pvc = getClaim("2Gi", ns)
pvc.Spec.StorageClassName = &resizableSc.Name
pvc = framework.MakePersistentVolumeClaim(framework.PersistentVolumeClaimConfig{
StorageClassName: &(resizableSc.Name),
ClaimSize: "2Gi",
}, ns)
pvc, err = c.CoreV1().PersistentVolumeClaims(pvc.Namespace).Create(pvc)
framework.ExpectNoError(err, "Error creating pvc: %v", err)

View File

@ -90,7 +90,10 @@ func createPodPVCFromSC(f *framework.Framework, c clientset.Interface, ns string
Name: "default",
ClaimSize: "2Gi",
}
pvc := newClaim(test, ns, "default")
pvc := framework.MakePersistentVolumeClaim(framework.PersistentVolumeClaimConfig{
ClaimSize: test.ClaimSize,
VolumeMode: &test.VolumeMode,
}, ns)
pvc, err = c.CoreV1().PersistentVolumeClaims(pvc.Namespace).Create(pvc)
framework.ExpectNoError(err, "Error creating pvc")
pvcClaims := []*v1.PersistentVolumeClaim{pvc}

View File

@ -85,8 +85,11 @@ var _ = utils.SIGDescribe("Mounted volume expand", func() {
framework.ExpectNoError(err, "Error creating resizable storage class")
gomega.Expect(*resizableSc.AllowVolumeExpansion).To(gomega.BeTrue())
pvc = newClaim(test, ns, "default")
pvc.Spec.StorageClassName = &resizableSc.Name
pvc = framework.MakePersistentVolumeClaim(framework.PersistentVolumeClaimConfig{
ClaimSize: test.ClaimSize,
StorageClassName: &(resizableSc.Name),
VolumeMode: &test.VolumeMode,
}, ns)
pvc, err = c.CoreV1().PersistentVolumeClaims(pvc.Namespace).Create(pvc)
framework.ExpectNoError(err, "Error creating pvc")
})

View File

@ -47,12 +47,16 @@ var _ = utils.SIGDescribe("PVC Protection", func() {
framework.ExpectNoError(framework.WaitForAllNodesSchedulable(client, framework.TestContext.NodeSchedulableTimeout))
ginkgo.By("Creating a PVC")
suffix := "pvc-protection"
prefix := "pvc-protection"
framework.SkipIfNoDefaultStorageClass(client)
testStorageClass := testsuites.StorageClassTest{
t := testsuites.StorageClassTest{
ClaimSize: "1Gi",
}
pvc = newClaim(testStorageClass, nameSpace, suffix)
pvc = framework.MakePersistentVolumeClaim(framework.PersistentVolumeClaimConfig{
NamePrefix: prefix,
ClaimSize: t.ClaimSize,
VolumeMode: &t.VolumeMode,
}, nameSpace)
pvc, err = client.CoreV1().PersistentVolumeClaims(pvc.Namespace).Create(pvc)
framework.ExpectNoError(err, "Error creating PVC")
pvcCreatedAndNotDeleted = true

View File

@ -149,8 +149,11 @@ func testVolumeProvisioning(c clientset.Interface, ns string) {
for _, test := range tests {
test.Client = c
test.Class = newStorageClass(test, ns, "" /* suffix */)
test.Claim = newClaim(test, ns, "" /* suffix */)
test.Claim.Spec.StorageClassName = &test.Class.Name
test.Claim = framework.MakePersistentVolumeClaim(framework.PersistentVolumeClaimConfig{
ClaimSize: test.ClaimSize,
StorageClassName: &(test.Class.Name),
VolumeMode: &test.VolumeMode,
}, ns)
test.TestDynamicProvisioning()
}
}
@ -170,9 +173,12 @@ func testZonalFailover(c clientset.Interface, ns string) {
ExpectedSize: repdMinSize,
}
class := newStorageClass(testSpec, ns, "" /* suffix */)
claimTemplate := newClaim(testSpec, ns, "" /* suffix */)
claimTemplate.Name = pvcName
claimTemplate.Spec.StorageClassName = &class.Name
claimTemplate := framework.MakePersistentVolumeClaim(framework.PersistentVolumeClaimConfig{
NamePrefix: pvcName,
ClaimSize: testSpec.ClaimSize,
StorageClassName: &(class.Name),
VolumeMode: &testSpec.VolumeMode,
}, ns)
statefulSet, service, regionalPDLabels := newStatefulSet(claimTemplate, ns)
ginkgo.By("creating a StorageClass " + class.Name)
@ -332,8 +338,11 @@ func testRegionalDelayedBinding(c clientset.Interface, ns string, pvcCount int)
test.Class = newStorageClass(test, ns, suffix)
var claims []*v1.PersistentVolumeClaim
for i := 0; i < pvcCount; i++ {
claim := newClaim(test, ns, suffix)
claim.Spec.StorageClassName = &test.Class.Name
claim := framework.MakePersistentVolumeClaim(framework.PersistentVolumeClaimConfig{
ClaimSize: test.ClaimSize,
StorageClassName: &(test.Class.Name),
VolumeMode: &test.VolumeMode,
}, ns)
claims = append(claims, claim)
}
pvs, node := test.TestBindingWaitForFirstConsumerMultiPVC(claims, nil /* node selector */, false /* expect unschedulable */)
@ -366,8 +375,12 @@ func testRegionalAllowedTopologies(c clientset.Interface, ns string) {
test.Class = newStorageClass(test, ns, suffix)
zones := getTwoRandomZones(c)
addAllowedTopologiesToStorageClass(c, test.Class, zones)
test.Claim = newClaim(test, ns, suffix)
test.Claim.Spec.StorageClassName = &test.Class.Name
test.Claim = framework.MakePersistentVolumeClaim(framework.PersistentVolumeClaimConfig{
NamePrefix: pvcName,
ClaimSize: test.ClaimSize,
StorageClassName: &(test.Class.Name),
VolumeMode: &test.VolumeMode,
}, ns)
pv := test.TestDynamicProvisioning()
checkZonesFromLabelAndAffinity(pv, sets.NewString(zones...), true)
@ -392,8 +405,11 @@ func testRegionalAllowedTopologiesWithDelayedBinding(c clientset.Interface, ns s
addAllowedTopologiesToStorageClass(c, test.Class, topoZones)
var claims []*v1.PersistentVolumeClaim
for i := 0; i < pvcCount; i++ {
claim := newClaim(test, ns, suffix)
claim.Spec.StorageClassName = &test.Class.Name
claim := framework.MakePersistentVolumeClaim(framework.PersistentVolumeClaimConfig{
ClaimSize: test.ClaimSize,
StorageClassName: &(test.Class.Name),
VolumeMode: &test.VolumeMode,
}, ns)
claims = append(claims, claim)
}
pvs, node := test.TestBindingWaitForFirstConsumerMultiPVC(claims, nil /* node selector */, false /* expect unschedulable */)

View File

@ -29,7 +29,6 @@ import (
v1 "k8s.io/api/core/v1"
storagev1 "k8s.io/api/storage/v1"
apierrs "k8s.io/apimachinery/pkg/api/errors"
"k8s.io/apimachinery/pkg/api/resource"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
utilerrors "k8s.io/apimachinery/pkg/util/errors"
@ -202,7 +201,8 @@ func createGenericVolumeTestResource(driver TestDriver, config *PerTestConfig, p
if pDriver, ok := driver.(PreprovisionedPVTestDriver); ok {
pvSource, volumeNodeAffinity := pDriver.GetPersistentVolumeSource(false, pattern.FsType, r.volume)
if pvSource != nil {
r.volSource, r.pv, r.pvc = createVolumeSourceWithPVCPV(f, dInfo.Name, pvSource, volumeNodeAffinity, false, pattern.VolMode)
r.pv, r.pvc = createPVCPV(f, dInfo.Name, pvSource, volumeNodeAffinity, pattern.VolMode)
r.volSource = createVolumeSource(r.pvc.Name, false /* readOnly */)
}
r.volType = fmt.Sprintf("%s-preprovisionedPV", dInfo.Name)
}
@ -225,8 +225,9 @@ func createGenericVolumeTestResource(driver TestDriver, config *PerTestConfig, p
framework.ExpectNoError(err)
if r.sc != nil {
r.volSource, r.pv, r.pvc = createVolumeSourceWithPVCPVFromDynamicProvisionSC(
f, dInfo.Name, claimSize, r.sc, false, pattern.VolMode)
r.pv, r.pvc = createPVCPVFromDynamicProvisionSC(
f, dInfo.Name, claimSize, r.sc, pattern.VolMode)
r.volSource = createVolumeSource(r.pvc.Name, false /* readOnly */)
}
r.volType = fmt.Sprintf("%s-dynamicPV", dInfo.Name)
}
@ -241,6 +242,16 @@ func createGenericVolumeTestResource(driver TestDriver, config *PerTestConfig, p
return &r
}
func createVolumeSource(pvcName string, readOnly bool) *v1.VolumeSource {
return &v1.VolumeSource{
PersistentVolumeClaim: &v1.PersistentVolumeClaimVolumeSource{
ClaimName: pvcName,
ReadOnly: readOnly,
},
}
}
// cleanupResource cleans up genericVolumeTestResource
func (r *genericVolumeTestResource) cleanupResource() {
f := r.config.Framework
@ -283,14 +294,13 @@ func (r *genericVolumeTestResource) cleanupResource() {
}
}
func createVolumeSourceWithPVCPV(
func createPVCPV(
f *framework.Framework,
name string,
pvSource *v1.PersistentVolumeSource,
volumeNodeAffinity *v1.VolumeNodeAffinity,
readOnly bool,
volMode v1.PersistentVolumeMode,
) (*v1.VolumeSource, *v1.PersistentVolume, *v1.PersistentVolumeClaim) {
) (*v1.PersistentVolume, *v1.PersistentVolumeClaim) {
pvConfig := framework.PersistentVolumeConfig{
NamePrefix: fmt.Sprintf("%s-", name),
StorageClassName: f.Namespace.Name,
@ -314,33 +324,32 @@ func createVolumeSourceWithPVCPV(
err = framework.WaitOnPVandPVC(f.ClientSet, f.Namespace.Name, pv, pvc)
framework.ExpectNoError(err, "PVC, PV failed to bind")
volSource := &v1.VolumeSource{
PersistentVolumeClaim: &v1.PersistentVolumeClaimVolumeSource{
ClaimName: pvc.Name,
ReadOnly: readOnly,
},
}
return volSource, pv, pvc
return pv, pvc
}
func createVolumeSourceWithPVCPVFromDynamicProvisionSC(
func createPVCPVFromDynamicProvisionSC(
f *framework.Framework,
name string,
claimSize string,
sc *storagev1.StorageClass,
readOnly bool,
volMode v1.PersistentVolumeMode,
) (*v1.VolumeSource, *v1.PersistentVolume, *v1.PersistentVolumeClaim) {
) (*v1.PersistentVolume, *v1.PersistentVolumeClaim) {
cs := f.ClientSet
ns := f.Namespace.Name
ginkgo.By("creating a claim")
pvc := getClaim(claimSize, ns)
pvc.Spec.StorageClassName = &sc.Name
if volMode != "" {
pvc.Spec.VolumeMode = &volMode
pvcCfg := framework.PersistentVolumeClaimConfig{
NamePrefix: name,
ClaimSize: claimSize,
StorageClassName: &(sc.Name),
}
if len(volMode) != 0 {
pvcCfg.VolumeMode = &volMode
}
pvc := framework.MakePersistentVolumeClaim(pvcCfg, ns)
var err error
pvc, err = cs.CoreV1().PersistentVolumeClaims(ns).Create(pvc)
framework.ExpectNoError(err)
@ -359,13 +368,7 @@ func createVolumeSourceWithPVCPVFromDynamicProvisionSC(
framework.ExpectNoError(err)
}
volSource := &v1.VolumeSource{
PersistentVolumeClaim: &v1.PersistentVolumeClaimVolumeSource{
ClaimName: pvc.Name,
ReadOnly: readOnly,
},
}
return volSource, pv, pvc
return pv, pvc
}
func isDelayedBinding(sc *storagev1.StorageClass) bool {
@ -375,27 +378,6 @@ func isDelayedBinding(sc *storagev1.StorageClass) bool {
return false
}
func getClaim(claimSize string, ns string) *v1.PersistentVolumeClaim {
claim := v1.PersistentVolumeClaim{
ObjectMeta: metav1.ObjectMeta{
GenerateName: "pvc-",
Namespace: ns,
},
Spec: v1.PersistentVolumeClaimSpec{
AccessModes: []v1.PersistentVolumeAccessMode{
v1.ReadWriteOnce,
},
Resources: v1.ResourceRequirements{
Requests: v1.ResourceList{
v1.ResourceName(v1.ResourceStorage): resource.MustParse(claimSize),
},
},
},
}
return &claim
}
// deleteStorageClass deletes the passed in StorageClass and catches errors other than "Not Found"
func deleteStorageClass(cs clientset.Interface, className string) {
err := cs.StorageV1().StorageClasses().Delete(className, nil)

View File

@ -130,8 +130,10 @@ func (p *provisioningTestSuite) defineTests(driver TestDriver, pattern testpatte
if l.sc == nil {
framework.Skipf("Driver %q does not define Dynamic Provision StorageClass - skipping", dInfo.Name)
}
l.pvc = getClaim(claimSize, l.config.Framework.Namespace.Name)
l.pvc.Spec.StorageClassName = &l.sc.Name
l.pvc = framework.MakePersistentVolumeClaim(framework.PersistentVolumeClaimConfig{
ClaimSize: claimSize,
StorageClassName: &(l.sc.Name),
}, l.config.Framework.Namespace.Name)
e2elog.Logf("In creating storage class object and pvc object for driver - sc: %v, pvc: %v", l.sc, l.pvc)
l.testCase = &StorageClassTest{
Client: l.config.Framework.ClientSet,

View File

@ -107,9 +107,11 @@ func (s *snapshottableTestSuite) defineTests(driver TestDriver, pattern testpatt
framework.Skipf("Driver %q does not define Dynamic Provision StorageClass - skipping", driver.GetDriverInfo().Name)
}
claimSize := dDriver.GetClaimSize()
pvc := getClaim(claimSize, config.Framework.Namespace.Name)
pvc.Spec.StorageClassName = &class.Name
pvc := framework.MakePersistentVolumeClaim(framework.PersistentVolumeClaimConfig{
ClaimSize: dDriver.GetClaimSize(),
StorageClassName: &(class.Name),
}, config.Framework.Namespace.Name)
e2elog.Logf("In creating storage class object and pvc object for driver - sc: %v, pvc: %v", class, pvc)
ginkgo.By("creating a StorageClass " + class.Name)

View File

@ -139,10 +139,11 @@ func (t *volumeModeTestSuite) defineTests(driver TestDriver, pattern testpattern
}
l.sc.VolumeBindingMode = &volBindMode
claimSize := dDriver.GetClaimSize()
l.pvc = getClaim(claimSize, l.ns.Name)
l.pvc.Spec.StorageClassName = &l.sc.Name
l.pvc.Spec.VolumeMode = &pattern.VolMode
l.pvc = framework.MakePersistentVolumeClaim(framework.PersistentVolumeClaimConfig{
ClaimSize: dDriver.GetClaimSize(),
StorageClassName: &(l.sc.Name),
VolumeMode: &pattern.VolMode,
}, l.ns.Name)
}
default:
e2elog.Failf("Volume mode test doesn't support: %s", pattern.VolType)

View File

@ -65,7 +65,10 @@ var _ = utils.SIGDescribe("[Serial] Volume metrics", func() {
ClaimSize: "2Gi",
}
pvc = newClaim(test, ns, "default")
pvc = framework.MakePersistentVolumeClaim(framework.PersistentVolumeClaimConfig{
ClaimSize: test.ClaimSize,
VolumeMode: &test.VolumeMode,
}, ns)
metricsGrabber, err = metrics.NewMetricsGrabber(c, nil, true, false, true, false, false)

View File

@ -225,8 +225,11 @@ func testZonalDelayedBinding(c clientset.Interface, ns string, specifyAllowedTop
ginkgo.By(action)
var claims []*v1.PersistentVolumeClaim
for i := 0; i < pvcCount; i++ {
claim := newClaim(test, ns, suffix)
claim.Spec.StorageClassName = &test.Class.Name
claim := framework.MakePersistentVolumeClaim(framework.PersistentVolumeClaimConfig{
ClaimSize: test.ClaimSize,
StorageClassName: &test.Class.Name,
VolumeMode: &test.VolumeMode,
}, ns)
claims = append(claims, claim)
}
pvs, node := test.TestBindingWaitForFirstConsumerMultiPVC(claims, nil /* node selector */, false /* expect unschedulable */)
@ -458,8 +461,11 @@ var _ = utils.SIGDescribe("Dynamic Provisioning", func() {
suffix := fmt.Sprintf("%d", i)
test.Client = c
test.Class = newStorageClass(test, ns, suffix)
test.Claim = newClaim(test, ns, suffix)
test.Claim.Spec.StorageClassName = &test.Class.Name
test.Claim = framework.MakePersistentVolumeClaim(framework.PersistentVolumeClaimConfig{
ClaimSize: test.ClaimSize,
StorageClassName: &test.Class.Name,
VolumeMode: &test.VolumeMode,
}, ns)
test.TestDynamicProvisioning()
}
@ -474,7 +480,11 @@ var _ = utils.SIGDescribe("Dynamic Provisioning", func() {
betaTest.Client = c
betaTest.Class = nil
betaTest.Claim = newClaim(*betaTest, ns, "beta")
betaTest.Claim = framework.MakePersistentVolumeClaim(framework.PersistentVolumeClaimConfig{
ClaimSize: betaTest.ClaimSize,
StorageClassName: &class.Name,
VolumeMode: &betaTest.VolumeMode,
}, ns)
betaTest.Claim.Spec.StorageClassName = &(class.Name)
(*betaTest).TestDynamicProvisioning()
}
@ -504,8 +514,11 @@ var _ = utils.SIGDescribe("Dynamic Provisioning", func() {
test.Class = newStorageClass(test, ns, "reclaimpolicy")
retain := v1.PersistentVolumeReclaimRetain
test.Class.ReclaimPolicy = &retain
test.Claim = newClaim(test, ns, "reclaimpolicy")
test.Claim.Spec.StorageClassName = &test.Class.Name
test.Claim = framework.MakePersistentVolumeClaim(framework.PersistentVolumeClaimConfig{
ClaimSize: test.ClaimSize,
StorageClassName: &test.Class.Name,
VolumeMode: &test.VolumeMode,
}, ns)
pv := test.TestDynamicProvisioning()
ginkgo.By(fmt.Sprintf("waiting for the provisioned PV %q to enter phase %s", pv.Name, v1.VolumeReleased))
@ -563,8 +576,11 @@ var _ = utils.SIGDescribe("Dynamic Provisioning", func() {
defer deleteStorageClass(c, sc.Name)
ginkgo.By("Creating a claim and expecting it to timeout")
pvc := newClaim(test, ns, suffix)
pvc.Spec.StorageClassName = &sc.Name
pvc := framework.MakePersistentVolumeClaim(framework.PersistentVolumeClaimConfig{
ClaimSize: test.ClaimSize,
StorageClassName: &sc.Name,
VolumeMode: &test.VolumeMode,
}, ns)
pvc, err = c.CoreV1().PersistentVolumeClaims(ns).Create(pvc)
framework.ExpectNoError(err)
defer func() {
@ -601,9 +617,13 @@ var _ = utils.SIGDescribe("Dynamic Provisioning", func() {
// To increase chance of detection, attempt multiple iterations
for i := 0; i < raceAttempts; i++ {
suffix := fmt.Sprintf("race-%d", i)
claim := newClaim(test, ns, suffix)
claim.Spec.StorageClassName = &class.Name
prefix := fmt.Sprintf("race-%d", i)
claim := framework.MakePersistentVolumeClaim(framework.PersistentVolumeClaimConfig{
NamePrefix: prefix,
ClaimSize: test.ClaimSize,
StorageClassName: &class.Name,
VolumeMode: &test.VolumeMode,
}, ns)
tmpClaim, err := framework.CreatePVC(c, ns, claim)
framework.ExpectNoError(err)
framework.ExpectNoError(framework.DeletePersistentVolumeClaim(c, tmpClaim.Name, ns))
@ -749,8 +769,11 @@ var _ = utils.SIGDescribe("Dynamic Provisioning", func() {
ExpectedSize: "1500Mi",
}
test.Class = newStorageClass(test, ns, "external")
test.Claim = newClaim(test, ns, "external")
test.Claim.Spec.StorageClassName = &test.Class.Name
test.Claim = framework.MakePersistentVolumeClaim(framework.PersistentVolumeClaimConfig{
ClaimSize: test.ClaimSize,
StorageClassName: &test.Class.Name,
VolumeMode: &test.VolumeMode,
}, ns)
ginkgo.By("creating a claim with a external provisioning annotation")
test.TestDynamicProvisioning()
@ -769,7 +792,10 @@ var _ = utils.SIGDescribe("Dynamic Provisioning", func() {
ExpectedSize: "2Gi",
}
test.Claim = newClaim(test, ns, "default")
test.Claim = framework.MakePersistentVolumeClaim(framework.PersistentVolumeClaimConfig{
ClaimSize: test.ClaimSize,
VolumeMode: &test.VolumeMode,
}, ns)
test.TestDynamicProvisioning()
})
@ -791,7 +817,10 @@ var _ = utils.SIGDescribe("Dynamic Provisioning", func() {
updateDefaultStorageClass(c, scName, "false")
ginkgo.By("creating a claim with default storageclass and expecting it to timeout")
claim := newClaim(test, ns, "default")
claim := framework.MakePersistentVolumeClaim(framework.PersistentVolumeClaimConfig{
ClaimSize: test.ClaimSize,
VolumeMode: &test.VolumeMode,
}, ns)
claim, err := c.CoreV1().PersistentVolumeClaims(ns).Create(claim)
framework.ExpectNoError(err)
defer func() {
@ -825,7 +854,10 @@ var _ = utils.SIGDescribe("Dynamic Provisioning", func() {
updateDefaultStorageClass(c, scName, "")
ginkgo.By("creating a claim with default storageclass and expecting it to timeout")
claim := newClaim(test, ns, "default")
claim := framework.MakePersistentVolumeClaim(framework.PersistentVolumeClaimConfig{
ClaimSize: test.ClaimSize,
VolumeMode: &test.VolumeMode,
}, ns)
claim, err := c.CoreV1().PersistentVolumeClaims(ns).Create(claim)
framework.ExpectNoError(err)
defer func() {
@ -861,8 +893,11 @@ var _ = utils.SIGDescribe("Dynamic Provisioning", func() {
test.Class = newStorageClass(test, ns, suffix)
ginkgo.By("creating a claim object with a suffix for gluster dynamic provisioner")
test.Claim = newClaim(test, ns, suffix)
test.Claim.Spec.StorageClassName = &test.Class.Name
test.Claim = framework.MakePersistentVolumeClaim(framework.PersistentVolumeClaimConfig{
ClaimSize: test.ClaimSize,
StorageClassName: &test.Class.Name,
VolumeMode: &test.VolumeMode,
}, ns)
test.TestDynamicProvisioning()
})
@ -889,8 +924,11 @@ var _ = utils.SIGDescribe("Dynamic Provisioning", func() {
}()
ginkgo.By("creating a claim object with a suffix for gluster dynamic provisioner")
claim := newClaim(test, ns, suffix)
claim.Spec.StorageClassName = &class.Name
claim := framework.MakePersistentVolumeClaim(framework.PersistentVolumeClaimConfig{
ClaimSize: test.ClaimSize,
StorageClassName: &class.Name,
VolumeMode: &test.VolumeMode,
}, ns)
claim, err = c.CoreV1().PersistentVolumeClaims(claim.Namespace).Create(claim)
framework.ExpectNoError(err)
defer func() {
@ -967,8 +1005,11 @@ var _ = utils.SIGDescribe("Dynamic Provisioning", func() {
test.Class = newStorageClass(test, ns, suffix)
zone := getRandomClusterZone(c)
addSingleZoneAllowedTopologyToStorageClass(c, test.Class, zone)
test.Claim = newClaim(test, ns, suffix)
test.Claim.Spec.StorageClassName = &test.Class.Name
test.Claim = framework.MakePersistentVolumeClaim(framework.PersistentVolumeClaimConfig{
ClaimSize: test.ClaimSize,
StorageClassName: &test.Class.Name,
VolumeMode: &test.VolumeMode,
}, ns)
pv := test.TestDynamicProvisioning()
checkZoneFromLabelAndAffinity(pv, zone, true)
}
@ -1013,36 +1054,6 @@ func updateDefaultStorageClass(c clientset.Interface, scName string, defaultStr
verifyDefaultStorageClass(c, scName, expectedDefault)
}
func getClaim(claimSize string, ns string) *v1.PersistentVolumeClaim {
claim := v1.PersistentVolumeClaim{
ObjectMeta: metav1.ObjectMeta{
GenerateName: "pvc-",
Namespace: ns,
},
Spec: v1.PersistentVolumeClaimSpec{
AccessModes: []v1.PersistentVolumeAccessMode{
v1.ReadWriteOnce,
},
Resources: v1.ResourceRequirements{
Requests: v1.ResourceList{
v1.ResourceName(v1.ResourceStorage): resource.MustParse(claimSize),
},
},
},
}
return &claim
}
func newClaim(t testsuites.StorageClassTest, ns, suffix string) *v1.PersistentVolumeClaim {
claim := getClaim(t.ClaimSize, ns)
if t.VolumeMode == v1.PersistentVolumeBlock {
blockVolumeMode := v1.PersistentVolumeBlock
claim.Spec.VolumeMode = &blockVolumeMode
}
return claim
}
func getDefaultPluginName() string {
switch {
case framework.ProviderIs("gke"), framework.ProviderIs("gce"):