mirror of
https://github.com/projectcapsule/capsule.git
synced 2026-08-25 16:07:24 +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: add metadata enforcement Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * feat: add metadata enforcement Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * fix: add resourcepoolclaim validation Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * fix: add resourcepoolclaim validation Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * fix: add resourcepoolclaim validation Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> * fix: add resourcepoolclaim validation 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> Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
62 lines
1.6 KiB
Go
62 lines
1.6 KiB
Go
// Copyright 2020-2026 Project Capsule Authors
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package validation
|
|
|
|
import (
|
|
"strings"
|
|
|
|
corev1 "k8s.io/api/core/v1"
|
|
|
|
apirules "github.com/projectcapsule/capsule/pkg/api/rules"
|
|
"github.com/projectcapsule/capsule/pkg/api/runtime"
|
|
ruleengine "github.com/projectcapsule/capsule/pkg/ruleengine"
|
|
"github.com/projectcapsule/capsule/pkg/runtime/events"
|
|
)
|
|
|
|
func (h *podRules) validateSchedulers(
|
|
pod *corev1.Pod,
|
|
enforceBodies []*apirules.NamespaceRuleEnforceBody,
|
|
) (*ruleengine.Evaluation, error) {
|
|
return evaluatePodRules[runtime.ExpressionMatch](
|
|
pod,
|
|
enforceBodies,
|
|
podRuleSet[runtime.ExpressionMatch]{
|
|
Name: "scheduler",
|
|
EventReason: events.ReasonForbiddenPodScheduler,
|
|
Values: func(pod *corev1.Pod) []ruleengine.Value {
|
|
schedulerName := strings.TrimSpace(pod.Spec.SchedulerName)
|
|
if schedulerName == "" {
|
|
return nil
|
|
}
|
|
|
|
return []ruleengine.Value{
|
|
{
|
|
Value: schedulerName,
|
|
Path: "spec.schedulerName",
|
|
},
|
|
}
|
|
},
|
|
Rules: func(enforce *apirules.NamespaceRuleEnforceBody) []runtime.ExpressionMatch {
|
|
if enforce == nil {
|
|
return nil
|
|
}
|
|
|
|
return enforce.Workloads.Schedulers
|
|
},
|
|
Matches: func(match runtime.ExpressionMatch, value ruleengine.Value) (ruleengine.Match, error) {
|
|
matched, err := match.MatchesWithExpressionMatcher(h.regexCache, value.Value)
|
|
if err != nil {
|
|
return ruleengine.Match{}, err
|
|
}
|
|
|
|
return ruleengine.Match{
|
|
Matched: matched,
|
|
}, nil
|
|
},
|
|
RuleDescription: runtime.DescribeExpressionMatch,
|
|
AllowedDescription: "Allowed schedulers",
|
|
},
|
|
)
|
|
}
|