1
0
Fork 0
mirror of https://github.com/kyverno/kyverno.git synced 2025-03-06 16:06:56 +00:00
kyverno/pkg/policy/report.go

61 lines
2.4 KiB
Go
Raw Normal View History

2019-08-13 13:15:04 -07:00
package policy
import (
"fmt"
2019-08-14 10:01:47 -07:00
"github.com/golang/glog"
2019-08-26 13:34:42 -07:00
"github.com/nirmata/kyverno/pkg/engine"
2019-08-13 13:15:04 -07:00
"github.com/nirmata/kyverno/pkg/event"
"github.com/nirmata/kyverno/pkg/policyviolation"
)
2019-08-26 13:34:42 -07:00
func (pc *PolicyController) report(engineResponses []engine.EngineResponseNew) {
2019-08-13 13:15:04 -07:00
// generate events
// generate policy violations
2019-08-26 13:34:42 -07:00
for _, policyInfo := range engineResponses {
2019-08-13 13:15:04 -07:00
// events
// success - policy applied on resource
// failure - policy/rule failed to apply on the resource
2019-08-14 10:01:47 -07:00
reportEvents(policyInfo, pc.eventGen)
2019-08-13 13:15:04 -07:00
// policy violations
// failure - policy/rule failed to apply on the resource
}
// generate policy violation
2019-08-26 13:34:42 -07:00
policyviolation.CreatePV(pc.pvLister, pc.kyvernoClient, engineResponses)
2019-08-13 13:15:04 -07:00
}
2019-08-14 10:01:47 -07:00
//reportEvents generates events for the failed resources
2019-08-26 13:34:42 -07:00
func reportEvents(engineResponse engine.EngineResponseNew, eventGen event.Interface) {
if engineResponse.IsSuccesful() {
2019-08-13 13:15:04 -07:00
return
}
2019-08-26 13:34:42 -07:00
glog.V(4).Infof("reporting results for policy %s application on resource %s/%s/%s", engineResponse.PolicyResponse.Policy, engineResponse.PolicyResponse.Resource.Kind, engineResponse.PolicyResponse.Resource.Namespace, engineResponse.PolicyResponse.Resource.Name)
for _, rule := range engineResponse.PolicyResponse.Rules {
if rule.Success {
return
2019-08-13 13:15:04 -07:00
}
// generate event on resource for each failed rule
2019-08-26 13:34:42 -07:00
glog.V(4).Infof("generation event on resource %s/%s/%s for policy %s", engineResponse.PolicyResponse.Resource.Kind, engineResponse.PolicyResponse.Resource.Namespace, engineResponse.PolicyResponse.Resource.Name, engineResponse.PolicyResponse.Policy)
e := event.Info{}
e.Kind = engineResponse.PolicyResponse.Resource.Kind
e.Namespace = engineResponse.PolicyResponse.Resource.Namespace
e.Name = engineResponse.PolicyResponse.Policy
2019-08-13 13:15:04 -07:00
e.Reason = "Failure"
2019-08-26 13:34:42 -07:00
e.Message = fmt.Sprintf("policy %s (%s) rule %s failed to apply. %v", engineResponse.PolicyResponse.Policy, rule.Type, rule.Name, rule.Message)
2019-08-13 13:15:04 -07:00
eventGen.Add(e)
}
// generate a event on policy for all failed rules
2019-08-26 13:34:42 -07:00
glog.V(4).Infof("generation event on policy %s", engineResponse.PolicyResponse.Policy)
e := event.Info{}
2019-08-13 13:15:04 -07:00
e.Kind = "Policy"
e.Namespace = ""
2019-08-26 13:34:42 -07:00
e.Name = engineResponse.PolicyResponse.Policy
2019-08-13 13:15:04 -07:00
e.Reason = "Failure"
2019-08-26 13:34:42 -07:00
e.Message = fmt.Sprintf("failed to apply rules %v on resource %s/%s/%s", engineResponse.GetFailedRules(), engineResponse.PolicyResponse.Resource.Kind, engineResponse.PolicyResponse.Resource.Namespace, engineResponse.PolicyResponse.Resource.Name)
2019-08-13 13:15:04 -07:00
eventGen.Add(e)
2019-08-26 13:34:42 -07:00
2019-08-13 13:15:04 -07:00
}