1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
|
package resources
import (
"gitlab.com/gitlab-org/cluster-integration/gitlab-agent/v16/pkg/agentcfg"
"k8s.io/apimachinery/pkg/api/resource"
)
type objectQuantity struct {
RequestsCPU resource.Quantity
RequestsMemory resource.Quantity
LimitsCPU resource.Quantity
LimitsMemory resource.Quantity
}
type quantity struct {
CPU resource.Quantity
Memory resource.Quantity
}
// Manager is a struct that implements the Resources interface
type Manager struct {
Requirements *agentcfg.ResourceRequirements
}
// Resources interface implements a way to provide a objectQuantity
// based on a resource requirement
type Resources interface {
GetResources() (objectQuantity, error)
}
// GetResources returns a objectQuantity based on the ResourceRequirements of the manager
func (m *Manager) GetResources() (objectQuantity, error) {
requestsResources, err := m.resources(m.Requirements.Requests)
if err != nil {
return objectQuantity{}, err
}
limitsResources, err := m.resources(m.Requirements.Limits)
if err != nil {
return objectQuantity{}, err
}
return objectQuantity{
RequestsCPU: requestsResources.CPU,
RequestsMemory: requestsResources.Memory,
LimitsCPU: limitsResources.CPU,
LimitsMemory: limitsResources.Memory,
}, nil
}
func (m *Manager) resources(resources *agentcfg.Resource) (quantity, error) {
cpu, err := resource.ParseQuantity(resources.Cpu)
if err != nil {
return quantity{}, err
}
memory, err := resource.ParseQuantity(resources.Memory)
if err != nil {
return quantity{}, err
}
return quantity{
CPU: cpu,
Memory: memory,
}, nil
}
|