github.com/kubernetes-sigs/blobfuse-csi-driver@v0.5.0/test/e2e/driver/blobfuse_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/blobfuse-csi-driver/pkg/blobfuse" 23 24 "github.com/kubernetes-csi/external-snapshotter/pkg/apis/volumesnapshot/v1alpha1" 25 v1 "k8s.io/api/core/v1" 26 storagev1 "k8s.io/api/storage/v1" 27 "k8s.io/apimachinery/pkg/api/resource" 28 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 29 ) 30 31 // Implement DynamicPVTestDriver interface 32 type blobFuseCSIDriver struct { 33 driverName string 34 } 35 36 // InitBlobFuseCSIDriver returns blobFuseCSIDriver that implemnts DynamicPVTestDriver interface 37 func InitBlobFuseCSIDriver() PVTestDriver { 38 return &blobFuseCSIDriver{ 39 driverName: blobfuse.DriverName, 40 } 41 } 42 43 func (d *blobFuseCSIDriver) GetDynamicProvisionStorageClass(parameters map[string]string, mountOptions []string, reclaimPolicy *v1.PersistentVolumeReclaimPolicy, bindingMode *storagev1.VolumeBindingMode, allowedTopologyValues []string, namespace string) *storagev1.StorageClass { 44 provisioner := d.driverName 45 generateName := fmt.Sprintf("%s-%s-dynamic-sc-", namespace, provisioner) 46 return getStorageClass(generateName, provisioner, parameters, mountOptions, reclaimPolicy, bindingMode, nil) 47 } 48 49 func (d *blobFuseCSIDriver) GetVolumeSnapshotClass(namespace string) *v1alpha1.VolumeSnapshotClass { 50 provisioner := d.driverName 51 generateName := fmt.Sprintf("%s-%s-dynamic-sc-", namespace, provisioner) 52 return getVolumeSnapshotClass(generateName, provisioner) 53 } 54 55 func (d *blobFuseCSIDriver) GetPersistentVolume(volumeID string, fsType string, size string, reclaimPolicy *v1.PersistentVolumeReclaimPolicy, namespace string, attrib map[string]string, nodeStageSecretRef string) *v1.PersistentVolume { 56 provisioner := d.driverName 57 generateName := fmt.Sprintf("%s-%s-preprovsioned-pv-", namespace, provisioner) 58 // Default to Retain ReclaimPolicy for pre-provisioned volumes 59 pvReclaimPolicy := v1.PersistentVolumeReclaimRetain 60 if reclaimPolicy != nil { 61 pvReclaimPolicy = *reclaimPolicy 62 } 63 stageSecretRef := &v1.SecretReference{} 64 if nodeStageSecretRef != "" { 65 stageSecretRef.Name = nodeStageSecretRef 66 stageSecretRef.Namespace = namespace 67 } else { 68 stageSecretRef = nil 69 } 70 return &v1.PersistentVolume{ 71 ObjectMeta: metav1.ObjectMeta{ 72 GenerateName: generateName, 73 Namespace: namespace, 74 // TODO remove if https://github.com/kubernetes-csi/external-provisioner/issues/202 is fixed 75 Annotations: map[string]string{ 76 "pv.kubernetes.io/provisioned-by": provisioner, 77 }, 78 }, 79 Spec: v1.PersistentVolumeSpec{ 80 AccessModes: []v1.PersistentVolumeAccessMode{v1.ReadWriteOnce}, 81 Capacity: v1.ResourceList{ 82 v1.ResourceName(v1.ResourceStorage): resource.MustParse(size), 83 }, 84 PersistentVolumeReclaimPolicy: pvReclaimPolicy, 85 PersistentVolumeSource: v1.PersistentVolumeSource{ 86 CSI: &v1.CSIPersistentVolumeSource{ 87 Driver: provisioner, 88 VolumeHandle: volumeID, 89 FSType: fsType, 90 VolumeAttributes: attrib, 91 NodeStageSecretRef: stageSecretRef, 92 }, 93 }, 94 }, 95 } 96 } 97 98 func (d *blobFuseCSIDriver) GetPreProvisionStorageClass(parameters map[string]string, mountOptions []string, reclaimPolicy *v1.PersistentVolumeReclaimPolicy, bindingMode *storagev1.VolumeBindingMode, allowedTopologyValues []string, namespace string) *storagev1.StorageClass { 99 provisioner := d.driverName 100 generateName := fmt.Sprintf("%s-%s-pre-provisioned-sc-", namespace, provisioner) 101 return getStorageClass(generateName, provisioner, parameters, mountOptions, reclaimPolicy, bindingMode, nil) 102 } 103 104 func GetParameters() map[string]string { 105 return map[string]string{ 106 "skuName": "Standard_LRS", 107 } 108 }