1
0
Fork 0
mirror of https://github.com/kyverno/kyverno.git synced 2025-03-09 01:16:55 +00:00
kyverno/pkg/info/info.go

116 lines
2.3 KiB
Go
Raw Normal View History

package info
import (
"fmt"
"strings"
)
//PolicyInfo defines policy information
type PolicyInfo struct {
Name string
Resource string
2019-06-26 12:19:11 -07:00
Kind string
Namespace string
success bool
2019-06-25 23:58:28 -07:00
Rules []*RuleInfo
}
//NewPolicyInfo returns a new policy info
2019-06-26 12:19:11 -07:00
func NewPolicyInfo(policyName string, kind string, resource string, ns string) *PolicyInfo {
return &PolicyInfo{
Name: policyName,
Resource: resource,
2019-06-26 12:19:11 -07:00
Kind: kind,
Namespace: ns,
success: true, // fail to be set explicity
}
}
//IsSuccessful checks if policy is succesful
// the policy is set to fail, if any of the rules have failed
func (pi *PolicyInfo) IsSuccessful() bool {
return pi.success
}
//ErrorRules returns error msgs from all rule
func (pi *PolicyInfo) ErrorRules() string {
errorMsgs := []string{}
2019-06-25 23:58:28 -07:00
for _, r := range pi.Rules {
if !r.IsSuccessful() {
2019-06-25 18:38:00 -07:00
errorMsgs = append(errorMsgs, r.ToString())
}
}
return strings.Join(errorMsgs, ";")
}
2019-06-25 23:58:28 -07:00
type RuleType int
const (
Mutation RuleType = iota
Validation
Generation
)
//RuleInfo defines rule struct
type RuleInfo struct {
2019-06-25 23:58:28 -07:00
Name string
Msgs []string
2019-06-26 12:19:11 -07:00
RuleType RuleType
2019-06-25 23:58:28 -07:00
success bool
}
2019-06-25 18:38:00 -07:00
//ToString reule information
func (ri *RuleInfo) ToString() string {
str := "rulename: " + ri.Name
msgs := strings.Join(ri.Msgs, ";")
return strings.Join([]string{str, msgs}, ";")
}
//NewRuleInfo creates a new RuleInfo
2019-06-25 23:58:28 -07:00
func NewRuleInfo(ruleName string, ruleType RuleType) *RuleInfo {
return &RuleInfo{
2019-06-25 23:58:28 -07:00
Name: ruleName,
Msgs: []string{},
2019-06-26 12:19:11 -07:00
RuleType: ruleType,
2019-06-25 23:58:28 -07:00
success: true, // fail to be set explicity
}
}
//Fail set the rule as failed
func (ri *RuleInfo) Fail() {
ri.success = false
}
//IsSuccessful checks if rule is succesful
func (ri *RuleInfo) IsSuccessful() bool {
return ri.success
}
//Add add msg
func (ri *RuleInfo) Add(msg string) {
ri.Msgs = append(ri.Msgs, msg)
}
//Addf add msg with args
func (ri *RuleInfo) Addf(msg string, args ...interface{}) {
ri.Msgs = append(ri.Msgs, fmt.Sprintf(msg, args...))
}
//RulesSuccesfuly check if the any rule has failed or not
func RulesSuccesfuly(rules []*RuleInfo) bool {
for _, r := range rules {
if !r.success {
return false
}
}
return true
}
//AddRuleInfos sets the rule information
func (pi *PolicyInfo) AddRuleInfos(rules []*RuleInfo) {
if !RulesSuccesfuly(rules) {
pi.success = false
}
2019-06-25 23:58:28 -07:00
pi.Rules = rules
}