func buildContainers()

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
}