mirror of
https://github.com/projectcapsule/capsule.git
synced 2026-08-22 14:07:10 +00:00
* fix(controller): decode old object for delete requests Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * chore: modernize golang Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * chore: modernize golang Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * chore: modernize golang Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * fix: preserve ca-bundles injected from external providers Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * feat(rules): add service enforcement rules Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * feat(rules): add service enforcement rules Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * feat(rules): add service enforcement rules Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * feat(rules): add service enforcement rules Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * feat(rules): add service enforcement rules Signed-off-by: Oliver Baehler <oliver@sudo-i.net> --------- Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net>
52 lines
1.4 KiB
Go
52 lines
1.4 KiB
Go
// Copyright 2020-2026 Project Capsule Authors
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package validation
|
|
|
|
import (
|
|
corev1 "k8s.io/api/core/v1"
|
|
|
|
apirules "github.com/projectcapsule/capsule/pkg/api/rules"
|
|
ruleengine "github.com/projectcapsule/capsule/pkg/ruleengine"
|
|
"github.com/projectcapsule/capsule/pkg/runtime/events"
|
|
"github.com/projectcapsule/capsule/pkg/runtime/workloads"
|
|
)
|
|
|
|
func (h *podRules) validateQoSClasses(
|
|
pod *corev1.Pod,
|
|
enforceBodies []*apirules.NamespaceRuleEnforceBody,
|
|
) (*ruleengine.Evaluation, error) {
|
|
return evaluatePodRules[corev1.PodQOSClass](
|
|
pod,
|
|
enforceBodies,
|
|
podRuleSet[corev1.PodQOSClass]{
|
|
Name: "QoS class",
|
|
EventReason: events.ReasonForbiddenPodQoSClass,
|
|
Values: func(pod *corev1.Pod) []ruleengine.Value {
|
|
return []ruleengine.Value{
|
|
{
|
|
Value: string(workloads.GetPodQoSClass(pod)),
|
|
Path: "status.qosClass",
|
|
},
|
|
}
|
|
},
|
|
Rules: func(enforce *apirules.NamespaceRuleEnforceBody) []corev1.PodQOSClass {
|
|
if enforce == nil {
|
|
return nil
|
|
}
|
|
|
|
return enforce.Workloads.QoSClasses
|
|
},
|
|
Matches: func(match corev1.PodQOSClass, value ruleengine.Value) (ruleengine.Match, error) {
|
|
return ruleengine.Match{
|
|
Matched: string(match) == value.Value,
|
|
}, nil
|
|
},
|
|
RuleDescription: func(rule corev1.PodQOSClass) string {
|
|
return string(rule)
|
|
},
|
|
AllowedDescription: "Allowed QoS classes",
|
|
},
|
|
)
|
|
}
|