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  }