Make testing example more complex; improve handling for NodeUnpublishVolume/ControllerUnpublishVolume for volumes that were externally deleted

This commit is contained in:
Garrett Mills 2024-10-02 00:05:26 -04:00
parent beee5a441d
commit 96956ba7ff
4 changed files with 76 additions and 6 deletions

View File

@ -2,7 +2,33 @@
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: example-pvc
name: example-pvc-1
namespace: p5x-system
spec:
storageClassName: p5x
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: example-pvc-2
namespace: p5x-system
spec:
storageClassName: p5x
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: example-pvc-3
namespace: p5x-system
spec:
storageClassName: p5x
@ -15,7 +41,7 @@ spec:
apiVersion: v1
kind: Pod
metadata:
name: example-pod
name: example-pod-1
namespace: p5x-system
spec:
containers:
@ -24,9 +50,33 @@ spec:
command: ['/bin/bash', '-c', '--']
args: ['while true; do sleep 30; done;']
volumeMounts:
- mountPath: '/mnt/example-pvc'
name: example-pvc
- mountPath: '/mnt/example-pvc-1'
name: example-pvc-1
- mountPath: '/mnt/example-pvc-2'
name: example-pvc-2
volumes:
- name: example-pvc
- name: example-pvc-1
persistentVolumeClaim:
claimName: example-pvc
claimName: example-pvc-1
- name: example-pvc-2
persistentVolumeClaim:
claimName: example-pvc-2
---
apiVersion: v1
kind: Pod
metadata:
name: example-pod-2
namespace: p5x-system
spec:
containers:
- name: example-ct
image: fedora:39
command: ['/bin/bash', '-c', '--']
args: ['while true; do sleep 30; done;']
volumeMounts:
- mountPath: '/mnt/example-pvc-3'
name: example-pvc-3
volumes:
- name: example-pvc-3
persistentVolumeClaim:
claimName: example-pvc-3

View File

@ -18,6 +18,7 @@ package csi
import (
"context"
"errors"
"k8s.io/klog"
"github.com/container-storage-interface/spec/lib/go/csi"
@ -90,6 +91,11 @@ func (d *controllerService) DeleteVolume(ctx context.Context, request *csi.Delet
vol, err := d.p5x.GetVolumeByName(request.GetVolumeId())
if err != nil {
if errors.Is(err, ErrVolumeNotFound) {
klog.Infof("controller.DeleteVolume: Could not find volume %s -- assuming it has already been deleted", request.GetVolumeId())
return &csi.DeleteVolumeResponse{}, nil
}
return nil, err
}

View File

@ -18,6 +18,7 @@ package csi
import (
"context"
"errors"
"k8s.io/klog"
"github.com/container-storage-interface/spec/lib/go/csi"
@ -131,6 +132,11 @@ func (n *nodeService) NodeUnpublishVolume(ctx context.Context, request *csi.Node
vol, err := n.p5x.GetVolumeByName(request.GetVolumeId())
if err != nil {
if errors.Is(err, ErrVolumeNotFound) {
klog.Infof("node.NodeUnpublishVolume: Could not find volume %s - assuming it has already been deleted", request.GetVolumeId())
return &csi.NodeUnpublishVolumeResponse{}, nil
}
return nil, err
}

View File

@ -3,10 +3,12 @@ package csi
import (
"bytes"
"encoding/json"
"errors"
"fmt"
"io"
"k8s.io/klog"
"net/http"
"strings"
)
type p5xApi struct {
@ -45,6 +47,8 @@ func (p5x *p5xApi) CreateVolume(name string, sizeInBytes int64) (*p5xVolume, err
return vol, nil
}
var ErrVolumeNotFound = errors.New("p5x volume not found")
func (p5x *p5xApi) GetVolumeByName(name string) (*p5xVolume, error) {
klog.Infof("p5x.GetVolumeByName: %s", name)
route := fmt.Sprintf("volumes/%s", name)
@ -53,6 +57,10 @@ func (p5x *p5xApi) GetVolumeByName(name string) (*p5xVolume, error) {
return nil, err
}
if strings.Contains(string(resBody[:]), "Could not find volume with the name") {
return nil, ErrVolumeNotFound
}
vol := &p5xVolume{}
err = json.Unmarshal(resBody, vol)
if err != nil {