in cost-optimization/gke-shift-left-cost/api/types.go [339:388]
func buildContainers(cont []coreV1.Container, conf CostimatorConfig) []Container {
containers := []Container{}
for i := 0; i < len(cont); i++ {
requests := cont[i].Resources.Requests
requestsCPU := requests[coreV1.ResourceCPU]
requestsMemory := requests[coreV1.ResourceMemory]
limits := cont[i].Resources.Limits
limitsCPU := limits[coreV1.ResourceCPU]
limitsMemory := limits[coreV1.ResourceMemory]
requestsCPUinMilli := requestsCPU.MilliValue()
requestsMemoryinMilli := requestsMemory.Value()
limitsCPUinMilli := limitsCPU.MilliValue()
limitsMemoryinMilli := limitsMemory.Value()
// If Requests is omitted for a container, it defaults to Limits if that is explicitly specified
if requestsCPUinMilli == 0 {
requestsCPUinMilli = limitsCPUinMilli
}
if requestsMemoryinMilli == 0 {
requestsMemoryinMilli = limitsMemoryinMilli
}
// otherwise to an config-defined value.
if requestsCPUinMilli == 0 {
requestsCPUinMilli = conf.ResourceConf.DefaultCPUinMillis
}
if requestsMemoryinMilli == 0 {
requestsMemoryinMilli = conf.ResourceConf.DefaultMemoryinBytes
}
// Give a percentage increase for umbounded resources
if limitsCPUinMilli == 0 {
limitsCPUinMilli = requestsCPUinMilli + (conf.ResourceConf.PercentageIncreaseForUnboundedRerouces * requestsCPUinMilli / 100)
}
if limitsMemoryinMilli == 0 {
limitsMemoryinMilli = requestsMemoryinMilli + (conf.ResourceConf.PercentageIncreaseForUnboundedRerouces * requestsMemoryinMilli / 100)
}
container := Container{
Requests: Resource{
CPU: requestsCPUinMilli,
Memory: requestsMemoryinMilli,
},
Limits: Resource{
CPU: limitsCPUinMilli,
Memory: limitsMemoryinMilli,
},
}
containers = append(containers, container)
}
return containers
}