sigs.k8s.io/blob-csi-driver@v1.24.1/test/e2e/driver/blob_csi_driver.go (about) 1 /* 2 Copyright 2019 The Kubernetes Authors. 3 4 Licensed under the Apache License, Version 2.0 (the "License"); 5 you may not use this file except in compliance with the License. 6 You may obtain a copy of the License at 7 8 http://www.apache.org/licenses/LICENSE-2.0 9 10 Unless required by applicable law or agreed to in writing, software 11 distributed under the License is distributed on an "AS IS" BASIS, 12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 See the License for the specific language governing permissions and 14 limitations under the License. 15 */ 16 17 package driver 18 19 import ( 20 "fmt" 21 22 "sigs.k8s.io/blob-csi-driver/pkg/blob" 23 24 v1 "k8s.io/api/core/v1" 25 storagev1 "k8s.io/api/storage/v1" 26 "k8s.io/apimachinery/pkg/api/resource" 27 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 28 ) 29 30 // Implement DynamicPVTestDriver interface 31 type blobCSIDriver struct { 32 driverName string 33 } 34 35 // InitBlobCSIDriver returns blobCSIDriver that implements DynamicPVTestDriver interface 36 func InitBlobCSIDriver() PVTestDriver { 37 return &blobCSIDriver{ 38 driverName: blob.DefaultDriverName, 39 } 40 } 41 42 func (d *blobCSIDriver) GetProvisionStorageClass(parameters map[string]string, mountOptions []string, reclaimPolicy *v1.PersistentVolumeReclaimPolicy, bindingMode *storagev1.VolumeBindingMode, _ []string, namespace string) *storagev1.StorageClass { 43 provisioner := d.driverName 44 generateName := fmt.Sprintf("%s-%s-sc-", namespace, provisioner) 45 return getStorageClass(generateName, provisioner, parameters, mountOptions, reclaimPolicy, bindingMode, nil) 46 } 47 48 func (d *blobCSIDriver) GetPersistentVolume(volumeID string, fsType string, size string, reclaimPolicy *v1.PersistentVolumeReclaimPolicy, namespace string, attrib map[string]string, nodeStageSecretRef string) *v1.PersistentVolume { 49 provisioner := d.driverName 50 generateName := fmt.Sprintf("%s-%s-preprovsioned-pv-", namespace, provisioner) 51 // Default to Retain ReclaimPolicy for pre-provisioned volumes 52 pvReclaimPolicy := v1.PersistentVolumeReclaimRetain 53 if reclaimPolicy != nil { 54 pvReclaimPolicy = *reclaimPolicy 55 } 56 stageSecretRef := &v1.SecretReference{} 57 if nodeStageSecretRef != "" { 58 stageSecretRef.Name = nodeStageSecretRef 59 stageSecretRef.Namespace = namespace 60 } else { 61 stageSecretRef = nil 62 } 63 return &v1.PersistentVolume{ 64 ObjectMeta: metav1.ObjectMeta{ 65 GenerateName: generateName, 66 Namespace: namespace, 67 // TODO remove if https://github.com/kubernetes-csi/external-provisioner/issues/202 is fixed 68 Annotations: map[string]string{ 69 "pv.kubernetes.io/provisioned-by": provisioner, 70 }, 71 }, 72 Spec: v1.PersistentVolumeSpec{ 73 AccessModes: []v1.PersistentVolumeAccessMode{v1.ReadWriteMany}, 74 Capacity: v1.ResourceList{ 75 v1.ResourceName(v1.ResourceStorage): resource.MustParse(size), 76 }, 77 PersistentVolumeReclaimPolicy: pvReclaimPolicy, 78 PersistentVolumeSource: v1.PersistentVolumeSource{ 79 CSI: &v1.CSIPersistentVolumeSource{ 80 Driver: provisioner, 81 VolumeHandle: volumeID, 82 FSType: fsType, 83 VolumeAttributes: attrib, 84 NodeStageSecretRef: stageSecretRef, 85 }, 86 }, 87 }, 88 } 89 }