Skip to content

Commit 8bc453f

Browse files
committed
e2e: add VolumeAttributesClass test for NFS
Signed-off-by: Niels de Vos <ndevos@ibm.com>
1 parent 51775ee commit 8bc453f

3 files changed

Lines changed: 101 additions & 0 deletions

File tree

e2e/nfs.go

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,51 @@ func createNFSStorageClass(
227227
})
228228
}
229229

230+
func createNFSVolumeAttributesClass(
231+
c clientset.Interface,
232+
f *framework.Framework,
233+
enablePool bool,
234+
params map[string]string,
235+
) error {
236+
vacPath := fmt.Sprintf("%s/%s", nfsExamplePath, "vac-relocated.yaml")
237+
vac, err := getVolumeAttributesClass(vacPath)
238+
if err != nil {
239+
return err
240+
}
241+
vac.Parameters["server"] = "rook-ceph-nfs-my-nfs-a." + rookNamespace + ".svc.cluster.local"
242+
243+
// overload any parameters that were passed
244+
if params == nil {
245+
// create an empty params, so that params["clusterID"] below
246+
// does not panic
247+
params = map[string]string{}
248+
}
249+
for param, value := range params {
250+
vac.Parameters[param] = value
251+
}
252+
253+
vac.DriverName = nfsDriverName
254+
255+
timeout := time.Duration(deployTimeout) * time.Minute
256+
257+
return wait.PollUntilContextTimeout(context.TODO(), poll, timeout, true, func(ctx context.Context) (bool, error) {
258+
_, err = c.StorageV1().VolumeAttributesClasses().Create(ctx, &vac, metav1.CreateOptions{})
259+
if err != nil {
260+
framework.Logf("error creating VolumeAttributesClass %q: %v", vac.Name, err)
261+
if apierrs.IsAlreadyExists(err) {
262+
return true, nil
263+
}
264+
if isRetryableAPIError(err) {
265+
return false, nil
266+
}
267+
268+
return false, fmt.Errorf("failed to create VolumeAttributesClass %q: %w", vac.Name, err)
269+
}
270+
271+
return true, nil
272+
})
273+
}
274+
230275
// unmountNFSVolume unmounts a NFS volume mounted on a pod.
231276
func unmountNFSVolume(f *framework.Framework, appName, pvcName string) error {
232277
pod, err := f.ClientSet.CoreV1().Pods(f.UniqueName).Get(context.TODO(), appName, metav1.GetOptions{})
@@ -500,6 +545,46 @@ var _ = Describe("nfs", func() {
500545
}
501546
})
502547

548+
By("create a storageclass with relocated server and a PVC then bind it to an app", func() {
549+
if !k8sVersionGreaterEquals(c, 1, 34) {
550+
framework.Logf("skipping VolumeAttributesClass test, needs Kubernetes >= 1.34")
551+
552+
return
553+
}
554+
555+
err := createNFSStorageClass(f.ClientSet, f, false, map[string]string{
556+
"server": "relocated.example.net", // mounting will fail without vac
557+
})
558+
if err != nil {
559+
logAndFail("failed to create NFS storageclass: %v", err)
560+
}
561+
err = createNFSVolumeAttributesClass(f.ClientSet, f, false, nil)
562+
if err != nil {
563+
logAndFail("failed to create NFS voluemattributesclass: %v", err)
564+
}
565+
566+
pvc, err := loadPVC(pvcPath)
567+
if err != nil {
568+
logAndFail("Could not create PVC: 1 %v", err)
569+
}
570+
pvc.Namespace = f.UniqueName
571+
vacName := "relocated-server"
572+
pvc.Spec.VolumeAttributesClassName = &vacName
573+
err = createPVCAndvalidatePV(f.ClientSet, pvc, deployTimeout)
574+
if err != nil {
575+
logAndFail("failed to create PVC: %v", err)
576+
}
577+
578+
err = deleteResource(nfsExamplePath + "storageclass.yaml")
579+
if err != nil {
580+
logAndFail("failed to delete NFS storageclass: %v", err)
581+
}
582+
err = deleteResource(nfsExamplePath + "vac-relocated.yaml")
583+
if err != nil {
584+
logAndFail("failed to delete NFS storageclass: %v", err)
585+
}
586+
})
587+
503588
By("create a storageclass with sys,krb5i security and a PVC then bind it to an app", func() {
504589
err := createNFSStorageClass(f.ClientSet, f, false, map[string]string{
505590
"secTypes": "sys,krb5i",

e2e/utils.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -368,6 +368,13 @@ func getStorageClass(path string) (scv1.StorageClass, error) {
368368
return sc, err
369369
}
370370

371+
func getVolumeAttributesClass(path string) (scv1.VolumeAttributesClass, error) {
372+
vac := scv1.VolumeAttributesClass{}
373+
err := unmarshal(path, &vac)
374+
375+
return vac, err
376+
}
377+
371378
func getSecret(path string) (v1.Secret, error) {
372379
sc := v1.Secret{}
373380
err := unmarshal(path, &sc)

examples/nfs/vac-relocated.yaml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
---
2+
# apiVersion: storage.k8s.io/v1beta1 for k8s version 1.33
3+
apiVersion: storage.k8s.io/v1
4+
kind: VolumeAttributesClass
5+
metadata:
6+
name: relocated-server
7+
driverName: nfs.csi.ceph.com
8+
parameters:
9+
server: to-be-deployed.example.net

0 commit comments

Comments
 (0)