Ctrl K
ComunidadGuías…

builder/job/resources.go

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
package job

import (
	"fmt"
	"os"
	"strings"

	corev1 "k8s.io/api/core/v1"
	"k8s.io/apimachinery/pkg/api/resource"
)

func applyBuildPodResources(pod *corev1.Pod) error {
	resources := corev1.ResourceList{}
	for _, setting := range []struct {
		env  string
		name corev1.ResourceName
	}{
		{env: "BUILD_POD_CPU", name: corev1.ResourceCPU},
		{env: "BUILD_POD_MEMORY", name: corev1.ResourceMemory},
	} {
		value := strings.TrimSpace(os.Getenv(setting.env))
		if value == "" {
			continue
		}
		quantity, err := resource.ParseQuantity(value)
		if err != nil || quantity.Sign() <= 0 {
			return fmt.Errorf("%s must be a positive Kubernetes resource quantity", setting.env)
		}
		if setting.name == corev1.ResourceCPU && !quantity.RoundUp(resource.Milli) {
			return fmt.Errorf("%s must use whole millicores (for example, 500m or 2)", setting.env)
		}
		resources[setting.name] = quantity
	}
	if len(resources) == 0 {
		return nil
	}
	for i := range pod.Spec.Containers {
		requirements := &pod.Spec.Containers[i].Resources
		if requirements.Requests == nil {
			requirements.Requests = corev1.ResourceList{}
		}
		if requirements.Limits == nil {
			requirements.Limits = corev1.ResourceList{}
		}
		for name, quantity := range resources {
			requirements.Requests[name] = quantity.DeepCopy()
			requirements.Limits[name] = quantity.DeepCopy()
		}
	}
	return nil
}