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  }