sigs.k8s.io/cluster-api-provider-azure@v1.14.3/test/e2e/kubernetes/storageclass/storageclass.go (about) 1 //go:build e2e 2 // +build e2e 3 4 /* 5 Copyright 2022 The Kubernetes Authors. 6 7 Licensed under the Apache License, Version 2.0 (the "License"); 8 you may not use this file except in compliance with the License. 9 You may obtain a copy of the License at 10 11 http://www.apache.org/licenses/LICENSE-2.0 12 13 Unless required by applicable law or agreed to in writing, software 14 distributed under the License is distributed on an "AS IS" BASIS, 15 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 See the License for the specific language governing permissions and 17 limitations under the License. 18 */ 19 20 package storageclass 21 22 import ( 23 "context" 24 "log" 25 "time" 26 27 . "github.com/onsi/gomega" 28 storagev1 "k8s.io/api/storage/v1" 29 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 30 "k8s.io/client-go/kubernetes" 31 ) 32 33 /* 34 // In-tree azuredisk csi driver sc example 35 kind: StorageClass 36 apiVersion: storage.k8s.io/v1 37 metadata: 38 name: managedhdd 39 provisioner: kubernetes.io/azure-disk 40 volumeBindingMode: WaitForFirstConsumer 41 parameters: 42 storageaccounttype: Standard_LRS 43 kind: Managed 44 */ 45 46 /* 47 // External azuredisk csi driver sc example 48 apiVersion: storage.k8s.io/v1 49 kind: StorageClass 50 metadata: 51 name: managed-csi 52 provisioner: disk.csi.azure.com 53 parameters: 54 skuName: StandardSSD_LRS # alias: storageaccounttype, available values: Standard_LRS, Premium_LRS, StandardSSD_LRS, UltraSSD_LRS 55 reclaimPolicy: Delete 56 volumeBindingMode: WaitForFirstConsumer 57 allowVolumeExpansion: true 58 */ 59 60 const ( 61 scOperationTimeout = 30 * time.Second 62 scOperationSleepBetweenRetries = 3 * time.Second 63 AzureDiskProvisioner = "kubernetes.io/azure-disk" 64 OotAzureDiskProvisioner = "disk.csi.azure.com" 65 ) 66 67 // Builder provides a helper interface for building storage class manifest. 68 type Builder struct { 69 sc *storagev1.StorageClass 70 } 71 72 // Create creates a storage class builder manifest. 73 func Create(scName string) *Builder { 74 scBuilder := &Builder{ 75 sc: &storagev1.StorageClass{ 76 ObjectMeta: metav1.ObjectMeta{ 77 Name: scName, 78 }, 79 Provisioner: AzureDiskProvisioner, 80 Parameters: map[string]string{ 81 "storageaccounttype": "Standard_LRS", 82 "kind": "managed", 83 }, 84 }, 85 } 86 return scBuilder 87 } 88 89 // WithWaitForFirstConsumer sets volume binding on first consumer. 90 func (d *Builder) WithWaitForFirstConsumer() *Builder { 91 volumeBinding := storagev1.VolumeBindingWaitForFirstConsumer 92 d.sc.VolumeBindingMode = &volumeBinding 93 return d 94 } 95 96 // WithOotProvisionerName sets the correct external azure disk csi driver provisioner name. 97 func (d *Builder) WithOotProvisionerName() *Builder { 98 d.sc.Provisioner = OotAzureDiskProvisioner 99 return d 100 } 101 102 // WithOotParameters sets the sc parameters for out of tree csi drivers. 103 func (d *Builder) WithOotParameters() *Builder { 104 d.sc.Parameters = map[string]string{ 105 "skuName": "StandardSSD_LRS", 106 } 107 return d 108 } 109 110 // DeployStorageClass creates a storage class on the k8s cluster. 111 func (d *Builder) DeployStorageClass(clientset *kubernetes.Clientset) { 112 Eventually(func(g Gomega) { 113 _, err := clientset.StorageV1().StorageClasses().Create(context.TODO(), d.sc, metav1.CreateOptions{}) 114 if err != nil { 115 log.Printf("Error trying to deploy storage class %s in namespace %s:%s\n", d.sc.Name, d.sc.ObjectMeta.Namespace, err.Error()) 116 } 117 g.Expect(err).To(HaveOccurred()) 118 }, scOperationTimeout, scOperationSleepBetweenRetries).Should(Succeed()) 119 }