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

     1  package utils
     2  
     3  import corev1 "k8s.io/api/core/v1"
     4  
     5  func IsCPUResourceEqual(oldResource, desiredResource corev1.ResourceList) bool {
     6  	oldCpuResource, ok1 := oldResource[corev1.ResourceCPU]
     7  	desiredCpuResource, ok2 := desiredResource[corev1.ResourceCPU]
     8  	if ok1 != ok2 {
     9  		return false
    10  	}
    11  	if ok1 == ok2 && ok1 {
    12  		return oldCpuResource.Equal(desiredCpuResource)
    13  	}
    14  	return true
    15  }
    16  
    17  func IsMemoryResourceEqual(oldResource, desiredResource corev1.ResourceList) bool {
    18  	oldMemoryResource, ok1 := oldResource[corev1.ResourceMemory]
    19  	desiredMemoryResource, ok2 := desiredResource[corev1.ResourceMemory]
    20  	if ok1 != ok2 {
    21  		return false
    22  	}
    23  	if ok1 == ok2 && ok1 {
    24  		return oldMemoryResource.Equal(desiredMemoryResource)
    25  	}
    26  	return true
    27  }
    28  
    29  func IsResourceEqual(oldResource, desiredResource corev1.ResourceList) bool {
    30  	// Compare CPU Resource
    31  	if !IsCPUResourceEqual(oldResource, desiredResource) {
    32  		return false
    33  	}
    34  	// Compare Memory Resource
    35  	if !IsMemoryResourceEqual(oldResource, desiredResource) {
    36  		return false
    37  	}
    38  	return true
    39  }
    40  
    41  func IsEqual(oldResource, desiredResource *corev1.ResourceRequirements) bool {
    42  	// Compare Request Resource
    43  	if !IsResourceEqual(oldResource.Requests, desiredResource.Requests) {
    44  		return false
    45  	}
    46  	// Compare Limit Resource
    47  	if !IsResourceEqual(oldResource.Limits, desiredResource.Limits) {
    48  		return false
    49  	}
    50  	return true
    51  }
    52  
    53  func GetResourceByPodTemplate(podTemplate *corev1.PodTemplateSpec, containerName string) (*corev1.ResourceRequirements, bool) {
    54  	for _, containerSpec := range podTemplate.Spec.Containers {
    55  		if containerSpec.Name == containerName {
    56  			return &containerSpec.Resources, true
    57  		}
    58  	}
    59  
    60  	return nil, false
    61  }