builder/job/resources.go
Rama main · réplica de lectura del repositorio original.
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
}