github.com/jmclong/azuredisk-csi-driver@v0.7.0/test/e2e/driver/azuredisk_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  	"os"
    22  	"strings"
    23  
    24  	"sigs.k8s.io/azuredisk-csi-driver/pkg/azuredisk"
    25  
    26  	"github.com/kubernetes-csi/external-snapshotter/pkg/apis/volumesnapshot/v1beta1"
    27  	v1 "k8s.io/api/core/v1"
    28  	storagev1 "k8s.io/api/storage/v1"
    29  	"k8s.io/apimachinery/pkg/api/resource"
    30  	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
    31  	"k8s.io/klog"
    32  )
    33  
    34  const (
    35  	AzureDriverNameVar = "AZURE_STORAGE_DRIVER"
    36  	TopologyKey        = "topology.disk.csi.azure.com/zone"
    37  )
    38  
    39  // Implement DynamicPVTestDriver interface
    40  type azureDiskDriver struct {
    41  	driverName string
    42  }
    43  
    44  // normalizeProvisioner extracts any '/' character in the provisioner name to '-'.
    45  // StorageClass name cannot container '/' character.
    46  func normalizeProvisioner(provisioner string) string {
    47  	return strings.ReplaceAll(provisioner, "/", "-")
    48  }
    49  
    50  // InitAzureDiskDriver returns azureDiskDriver that implements DynamicPVTestDriver interface
    51  func InitAzureDiskDriver() PVTestDriver {
    52  	driverName := os.Getenv(AzureDriverNameVar)
    53  	if driverName == "" {
    54  		driverName = azuredisk.DriverName
    55  	}
    56  
    57  	klog.Infof("Using azure disk driver: %s", driverName)
    58  	return &azureDiskDriver{
    59  		driverName: driverName,
    60  	}
    61  }
    62  
    63  func (d *azureDiskDriver) GetDynamicProvisionStorageClass(parameters map[string]string, mountOptions []string, reclaimPolicy *v1.PersistentVolumeReclaimPolicy, bindingMode *storagev1.VolumeBindingMode, allowedTopologyValues []string, namespace string) *storagev1.StorageClass {
    64  	provisioner := d.driverName
    65  	generateName := fmt.Sprintf("%s-%s-dynamic-sc-", namespace, normalizeProvisioner(provisioner))
    66  	var allowedTopologies []v1.TopologySelectorTerm
    67  	if len(allowedTopologyValues) > 0 {
    68  		allowedTopologies = []v1.TopologySelectorTerm{
    69  			{
    70  				MatchLabelExpressions: []v1.TopologySelectorLabelRequirement{
    71  					{
    72  						Key:    TopologyKey,
    73  						Values: allowedTopologyValues,
    74  					},
    75  				},
    76  			},
    77  		}
    78  	}
    79  
    80  	return getStorageClass(generateName, provisioner, parameters, mountOptions, reclaimPolicy, bindingMode, allowedTopologies)
    81  }
    82  
    83  func (d *azureDiskDriver) GetVolumeSnapshotClass(namespace string) *v1beta1.VolumeSnapshotClass {
    84  	provisioner := d.driverName
    85  	generateName := fmt.Sprintf("%s-%s-dynamic-sc-", namespace, normalizeProvisioner(provisioner))
    86  	return getVolumeSnapshotClass(generateName, provisioner)
    87  }
    88  
    89  func (d *azureDiskDriver) GetPersistentVolume(volumeID string, fsType string, size string, reclaimPolicy *v1.PersistentVolumeReclaimPolicy, namespace string) *v1.PersistentVolume {
    90  	provisioner := d.driverName
    91  	generateName := fmt.Sprintf("%s-%s-preprovsioned-pv-", namespace, normalizeProvisioner(provisioner))
    92  	// Default to Retain ReclaimPolicy for pre-provisioned volumes
    93  	pvReclaimPolicy := v1.PersistentVolumeReclaimRetain
    94  	if reclaimPolicy != nil {
    95  		pvReclaimPolicy = *reclaimPolicy
    96  	}
    97  	return &v1.PersistentVolume{
    98  		ObjectMeta: metav1.ObjectMeta{
    99  			GenerateName: generateName,
   100  			Namespace:    namespace,
   101  			// TODO remove if https://github.com/kubernetes-csi/external-provisioner/issues/202 is fixed
   102  			Annotations: map[string]string{
   103  				"pv.kubernetes.io/provisioned-by": provisioner,
   104  			},
   105  		},
   106  		Spec: v1.PersistentVolumeSpec{
   107  			AccessModes: []v1.PersistentVolumeAccessMode{v1.ReadWriteOnce},
   108  			Capacity: v1.ResourceList{
   109  				v1.ResourceName(v1.ResourceStorage): resource.MustParse(size),
   110  			},
   111  			PersistentVolumeReclaimPolicy: pvReclaimPolicy,
   112  			PersistentVolumeSource: v1.PersistentVolumeSource{
   113  				CSI: &v1.CSIPersistentVolumeSource{
   114  					Driver:       provisioner,
   115  					VolumeHandle: volumeID,
   116  					FSType:       fsType,
   117  				},
   118  			},
   119  		},
   120  	}
   121  }
   122  
   123  func GetParameters() map[string]string {
   124  	return map[string]string{
   125  		"skuName": "Standard_LRS",
   126  	}
   127  }