feat: requests and limit policies (#2095)

* chore: save progress

Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* feat: requests and limit policies

Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* feat: requests and limit policies

Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* feat: requests and limit policies

Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* feat: requests and limit policies

Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* feat: requests and limit policies

Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* feat: requests and limit policies

Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* feat: requests and limit policies

Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* feat: requests and limit policies

Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* feat: requests and limit policies

Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

---------

Signed-off-by: Oliver Baehler <oliver@sudo-i.net>
This commit is contained in:
Oliver Bähler
2026-08-21 14:31:06 +02:00
committed by GitHub
parent 88217e9562
commit 65a4e19e02
57 changed files with 5627 additions and 265 deletions
+1 -1
View File
@@ -6,7 +6,7 @@ package template
import (
"fmt"
"go.yaml.in/yaml/v2"
"sigs.k8s.io/yaml"
"github.com/projectcapsule/capsule/pkg/api/rules"
)
+52
View File
@@ -8,6 +8,7 @@ import (
"testing"
corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/resource"
"github.com/projectcapsule/capsule/pkg/api/rules"
"github.com/projectcapsule/capsule/pkg/api/runtime"
@@ -274,6 +275,57 @@ func TestRenderNamespaceRuleBodies(t *testing.T) {
}
}
func TestRenderNamespaceRuleBodiesPreservesResourceQuantities(t *testing.T) {
t.Parallel()
ratio := resource.MustParse("1.5")
request := resource.MustParse("250m")
bodies := []*rules.NamespaceRuleBodyNamespace{{
Enforce: &rules.NamespaceRuleEnforceBody{
Workloads: rules.NamespaceRuleEnforceWorkloadsBody{
Resources: &rules.WorkloadResourceRules{
Requests: map[corev1.ResourceName]rules.WorkloadResourceRequestPolicy{
corev1.ResourceCPU: {
Policy: rules.WorkloadResourceRequestPolicyDefault,
Value: &request,
},
},
Limits: map[corev1.ResourceName]rules.WorkloadResourceLimitPolicy{
corev1.ResourceCPU: {
Policy: rules.WorkloadResourceLimitPolicyRatio,
Value: &ratio,
},
},
},
},
},
}}
got, err := RenderNamespaceRuleBodies(nil, MissingKeyError, bodies)
if err != nil {
t.Fatalf("RenderNamespaceRuleBodies() unexpected error: %v", err)
}
if len(got) != 1 || got[0] == nil || got[0].Enforce == nil {
t.Fatalf("RenderNamespaceRuleBodies() = %#v, want one enforce body", got)
}
resources := got[0].Enforce.Workloads.Resources
if resources == nil {
t.Fatal("rendered resources are nil")
}
gotRequest := resources.Requests[corev1.ResourceCPU].Value
if gotRequest == nil || gotRequest.Cmp(request) != 0 {
t.Fatalf("rendered request = %v, want %s", gotRequest, request.String())
}
gotRatio := resources.Limits[corev1.ResourceCPU].Value
if gotRatio == nil || gotRatio.Cmp(ratio) != 0 {
t.Fatalf("rendered ratio = %v, want %s", gotRatio, ratio.String())
}
}
func TestRenderNamespaceRuleBodies_DoesNotMutateInput(t *testing.T) {
t.Parallel()