github.com/verrazzano/verrazzano-monitoring-operator@v0.0.30/pkg/resources/pvcs/pvc.go (about) 1 // Copyright (C) 2020, 2022, Oracle and/or its affiliates. 2 // Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. 3 4 package pvcs 5 6 import ( 7 vmcontrollerv1 "github.com/verrazzano/verrazzano-monitoring-operator/pkg/apis/vmcontroller/v1" 8 "github.com/verrazzano/verrazzano-monitoring-operator/pkg/config" 9 "github.com/verrazzano/verrazzano-monitoring-operator/pkg/constants" 10 "github.com/verrazzano/verrazzano-monitoring-operator/pkg/resources" 11 "github.com/verrazzano/verrazzano-monitoring-operator/pkg/resources/nodes" 12 corev1 "k8s.io/api/core/v1" 13 "k8s.io/apimachinery/pkg/api/resource" 14 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 15 ) 16 17 // New will return a new Service for VMO that needs to executed for on Complete 18 func New(vmo *vmcontrollerv1.VerrazzanoMonitoringInstance, storageClassName string) ([]*corev1.PersistentVolumeClaim, error) { 19 var pvcList []*corev1.PersistentVolumeClaim 20 21 if vmo.Spec.Elasticsearch.Enabled { 22 for _, dataNode := range nodes.DataNodes(vmo) { 23 if dataNode.Storage != nil && dataNode.Storage.Size != "" { 24 pvcs, err := createPvcElements(vmo, dataNode.Storage, config.ElasticsearchData, storageClassName) 25 if err != nil { 26 return pvcList, err 27 } 28 pvcList = append(pvcList, pvcs...) 29 } 30 } 31 } 32 if vmo.Spec.Grafana.Enabled && vmo.Spec.Grafana.Storage.Size != "" { 33 pvcs, err := createPvcElements(vmo, &vmo.Spec.Grafana.Storage, config.Grafana, storageClassName) 34 if err != nil { 35 return pvcList, err 36 } 37 pvcList = append(pvcList, pvcs...) 38 } 39 return pvcList, nil 40 } 41 42 // Returns slice of pvc elements 43 func createPvcElements(vmo *vmcontrollerv1.VerrazzanoMonitoringInstance, vmoStorage *vmcontrollerv1.Storage, componentDetails config.ComponentDetails, storageClassName string) ([]*corev1.PersistentVolumeClaim, error) { 44 storageQuantity, err := resource.ParseQuantity(vmoStorage.Size) 45 if err != nil { 46 return nil, err 47 } 48 49 var pvcList []*corev1.PersistentVolumeClaim 50 for _, pvcName := range vmoStorage.PvcNames { 51 52 resourceLabel := resources.GetMetaLabels(vmo) 53 resourceLabel[constants.ComponentLabel] = resources.GetCompLabel(componentDetails.Name) 54 55 pvc := &corev1.PersistentVolumeClaim{ 56 ObjectMeta: metav1.ObjectMeta{ 57 Labels: resourceLabel, 58 Name: pvcName, 59 Namespace: vmo.Namespace, 60 OwnerReferences: resources.GetOwnerReferences(vmo), 61 }, 62 Spec: corev1.PersistentVolumeClaimSpec{ 63 AccessModes: []corev1.PersistentVolumeAccessMode{ 64 corev1.PersistentVolumeAccessMode("ReadWriteOnce"), 65 }, 66 Resources: corev1.ResourceRequirements{ 67 Requests: corev1.ResourceList{ 68 "storage": storageQuantity, 69 }, 70 }, 71 StorageClassName: &storageClassName, 72 }, 73 } 74 pvcList = append(pvcList, pvc) 75 } 76 return pvcList, nil 77 }