github.com/gocrane/crane@v0.11.0/pkg/utils/vpa.go (about)

     1  package utils
     2  
     3  import (
     4  	"context"
     5  
     6  	corev1 "k8s.io/api/core/v1"
     7  	"sigs.k8s.io/controller-runtime/pkg/client"
     8  
     9  	autoscalingapi "github.com/gocrane/api/autoscaling/v1alpha1"
    10  )
    11  
    12  func GetEVPAFromScaleTarget(context context.Context, kubeClient client.Client, namespace string, objRef corev1.ObjectReference) (*autoscalingapi.EffectiveVerticalPodAutoscaler, error) {
    13  	evpaList := &autoscalingapi.EffectiveVerticalPodAutoscalerList{}
    14  	opts := []client.ListOption{
    15  		client.InNamespace(namespace),
    16  	}
    17  	err := kubeClient.List(context, evpaList, opts...)
    18  	if err != nil {
    19  		return nil, err
    20  	}
    21  
    22  	for _, evpa := range evpaList.Items {
    23  		if evpa.Spec.TargetRef.Name == objRef.Name &&
    24  			evpa.Spec.TargetRef.Kind == objRef.Kind &&
    25  			evpa.Spec.TargetRef.APIVersion == objRef.APIVersion {
    26  			return &evpa, nil
    27  		}
    28  	}
    29  
    30  	return nil, nil
    31  }