mirror of
https://github.com/kyverno/kyverno.git
synced 2025-03-05 15:37:19 +00:00
* refactor: pass only spec instead of whole policy when possible Signed-off-by: Charles-Edouard Brétéché <charled.breteche@gmail.com> * refactor: introduce autogen package Signed-off-by: Charles-Edouard Brétéché <charled.breteche@gmail.com> Co-authored-by: Jim Bugwadia <jim@nirmata.com>
74 lines
1.7 KiB
Go
74 lines
1.7 KiB
Go
package autogen
|
|
|
|
import (
|
|
"strings"
|
|
|
|
kyverno "github.com/kyverno/kyverno/api/kyverno/v1"
|
|
"github.com/kyverno/kyverno/pkg/engine"
|
|
"github.com/kyverno/kyverno/pkg/utils"
|
|
)
|
|
|
|
func isKindOtherthanPod(kinds []string) bool {
|
|
if len(kinds) > 1 && utils.ContainsPod(kinds, "Pod") {
|
|
return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
func hasAutogenKinds(kind []string) bool {
|
|
for _, v := range kind {
|
|
if v == "Pod" || strings.Contains(engine.PodControllers, v) {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
func validateAnyPattern(anyPatterns []interface{}) []interface{} {
|
|
var patterns []interface{}
|
|
for _, pattern := range anyPatterns {
|
|
newPattern := map[string]interface{}{
|
|
"spec": map[string]interface{}{
|
|
"template": pattern,
|
|
},
|
|
}
|
|
patterns = append(patterns, newPattern)
|
|
}
|
|
return patterns
|
|
}
|
|
|
|
func getAnyAllAutogenRule(v kyverno.ResourceFilters, controllers string) kyverno.ResourceFilters {
|
|
anyKind := v.DeepCopy()
|
|
for i, value := range v {
|
|
if utils.ContainsPod(value.Kinds, "Pod") {
|
|
anyKind[i].Kinds = strings.Split(controllers, ",")
|
|
}
|
|
}
|
|
return anyKind
|
|
}
|
|
|
|
// stripCronJob removes CronJob from controllers
|
|
func stripCronJob(controllers string) string {
|
|
var newControllers []string
|
|
controllerArr := strings.Split(controllers, ",")
|
|
for _, c := range controllerArr {
|
|
if c == engine.PodControllerCronJob {
|
|
continue
|
|
}
|
|
newControllers = append(newControllers, c)
|
|
}
|
|
if len(newControllers) == 0 {
|
|
return ""
|
|
}
|
|
return strings.Join(newControllers, ",")
|
|
}
|
|
|
|
func cronJobAnyAllAutogenRule(v kyverno.ResourceFilters) kyverno.ResourceFilters {
|
|
anyKind := v.DeepCopy()
|
|
for i, value := range v {
|
|
if utils.ContainsPod(value.Kinds, "Job") {
|
|
anyKind[i].Kinds = []string{engine.PodControllerCronJob}
|
|
}
|
|
}
|
|
return anyKind
|
|
}
|