feat: add immediate and deferred provisioning modes

This commit is contained in:
2026-06-13 17:58:50 +03:30
parent d36b309c9c
commit 082e80606f
7 changed files with 160 additions and 18 deletions
+4 -3
View File
@@ -3,8 +3,8 @@ package driver
import (
"context"
"github.com/container-storage-interface/spec/lib/go/csi"
"github.com/KubelanCloud/kks-csi-plugin/pkg/csi/provisioner"
"github.com/container-storage-interface/spec/lib/go/csi"
)
type ControllerServer struct {
@@ -33,8 +33,9 @@ func (s *ControllerServer) CreateVolume(ctx context.Context, req *csi.CreateVolu
}
vol, err := s.d.backend.CreateVolume(ctx, provisioner.CreateVolumeRequest{
Name: sanitizeVolumeName(req.GetName()),
SizeBytes: capacity,
Name: sanitizeVolumeName(req.GetName()),
SizeBytes: capacity,
Parameters: req.GetParameters(),
})
if err != nil {
return nil, internalError(err)
+63
View File
@@ -0,0 +1,63 @@
package driver
import (
"context"
"testing"
"github.com/KubelanCloud/kks-csi-plugin/pkg/csi/provisioner"
"github.com/container-storage-interface/spec/lib/go/csi"
)
type fakeBackend struct {
createReq provisioner.CreateVolumeRequest
}
func (f *fakeBackend) ClusterInfo(context.Context) (provisioner.ClusterInfo, error) {
return provisioner.ClusterInfo{}, nil
}
func (f *fakeBackend) CreateVolume(_ context.Context, req provisioner.CreateVolumeRequest) (provisioner.Volume, error) {
f.createReq = req
return provisioner.Volume{VolumeID: "vol-1", SizeBytes: req.SizeBytes}, nil
}
func (f *fakeBackend) DeleteVolume(context.Context, string) error { return nil }
func (f *fakeBackend) VolumeExists(context.Context, string) (bool, error) { return false, nil }
func (f *fakeBackend) PublishVolume(context.Context, string, string) (provisioner.PublishVolumeResponse, error) {
return provisioner.PublishVolumeResponse{}, nil
}
func (f *fakeBackend) UnpublishVolume(context.Context, string, string) error { return nil }
func (f *fakeBackend) Close() error { return nil }
func TestControllerCreateVolumeForwardsStorageClassParameters(t *testing.T) {
t.Parallel()
backend := &fakeBackend{}
s := &ControllerServer{d: &Driver{backend: backend}}
_, err := s.CreateVolume(context.Background(), &csi.CreateVolumeRequest{
Name: "pvc-demo",
CapacityRange: &csi.CapacityRange{
RequiredBytes: 10,
},
VolumeCapabilities: []*csi.VolumeCapability{{
AccessType: &csi.VolumeCapability_Mount{Mount: &csi.VolumeCapability_MountVolume{}},
AccessMode: &csi.VolumeCapability_AccessMode{Mode: csi.VolumeCapability_AccessMode_SINGLE_NODE_WRITER},
}},
Parameters: map[string]string{
"kks.kloud/provisioning-mode": "deferred",
"example": "value",
},
})
if err != nil {
t.Fatalf("CreateVolume returned error: %v", err)
}
if backend.createReq.Parameters["kks.kloud/provisioning-mode"] != "deferred" {
t.Fatalf("unexpected forwarded parameters: %#v", backend.createReq.Parameters)
}
}