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  }