2019-07-15 16:07:56 -07:00
package webhooks
import (
"strings"
2019-11-13 13:41:08 -08:00
kyverno "github.com/nirmata/kyverno/pkg/api/kyverno/v1"
2019-12-30 17:08:50 -08:00
"github.com/nirmata/kyverno/pkg/engine/response"
2019-08-26 13:34:42 -07:00
2019-07-15 16:07:56 -07:00
"github.com/golang/glog"
"github.com/nirmata/kyverno/pkg/event"
)
2019-08-26 13:34:42 -07:00
//generateEvents generates event info for the engine responses
2019-12-30 17:08:50 -08:00
func generateEvents ( engineResponses [ ] response . EngineResponse , onUpdate bool ) [ ] event . Info {
2019-08-26 13:34:42 -07:00
var events [ ] event . Info
if ! isResponseSuccesful ( engineResponses ) {
for _ , er := range engineResponses {
if er . IsSuccesful ( ) {
// dont create events on success
2019-07-16 15:53:14 -07:00
continue
}
2019-11-18 17:13:48 -08:00
// default behavior is audit
reason := event . PolicyViolation
if er . PolicyResponse . ValidationFailureAction == Enforce {
reason = event . RequestBlocked
}
2019-08-26 13:34:42 -07:00
failedRules := er . GetFailedRules ( )
filedRulesStr := strings . Join ( failedRules , ";" )
if onUpdate {
var e event . Info
// UPDATE
// event on resource
2019-12-26 11:50:41 -08:00
e = event . NewEvent (
2019-08-26 13:34:42 -07:00
er . PolicyResponse . Resource . Kind ,
er . PolicyResponse . Resource . APIVersion ,
er . PolicyResponse . Resource . Namespace ,
er . PolicyResponse . Resource . Name ,
2019-11-18 17:13:48 -08:00
reason . String ( ) ,
2019-12-26 11:50:41 -08:00
event . AdmissionController ,
2019-08-26 13:34:42 -07:00
event . FPolicyApplyBlockUpdate ,
filedRulesStr ,
er . PolicyResponse . Policy ,
)
glog . V ( 4 ) . Infof ( "UPDATE event on resource %s/%s/%s with policy %s" , er . PolicyResponse . Resource . Kind , er . PolicyResponse . Resource . Namespace , er . PolicyResponse . Resource . Name , er . PolicyResponse . Policy )
events = append ( events , e )
// event on policy
2019-12-26 11:50:41 -08:00
e = event . NewEvent (
2019-09-12 15:04:35 -07:00
"ClusterPolicy" ,
2019-08-26 13:34:42 -07:00
kyverno . SchemeGroupVersion . String ( ) ,
"" ,
er . PolicyResponse . Policy ,
2019-11-18 17:13:48 -08:00
reason . String ( ) ,
2019-12-26 11:50:41 -08:00
event . AdmissionController ,
2019-08-26 13:34:42 -07:00
event . FPolicyBlockResourceUpdate ,
2019-12-26 11:50:41 -08:00
er . PolicyResponse . Resource . GetKey ( ) ,
2019-08-26 13:34:42 -07:00
filedRulesStr ,
)
glog . V ( 4 ) . Infof ( "UPDATE event on policy %s" , er . PolicyResponse . Policy )
events = append ( events , e )
2019-07-15 16:07:56 -07:00
} else {
2019-08-26 13:34:42 -07:00
// CREATE
// event on policy
2019-12-26 11:50:41 -08:00
e := event . NewEvent (
2019-09-12 15:04:35 -07:00
"ClusterPolicy" ,
2019-08-26 13:34:42 -07:00
kyverno . SchemeGroupVersion . String ( ) ,
"" ,
er . PolicyResponse . Policy ,
2019-12-26 11:50:41 -08:00
reason . String ( ) ,
event . AdmissionController ,
2019-08-26 13:34:42 -07:00
event . FPolicyApplyBlockCreate ,
2019-12-26 11:50:41 -08:00
er . PolicyResponse . Resource . GetKey ( ) ,
2019-08-26 13:34:42 -07:00
filedRulesStr ,
)
glog . V ( 4 ) . Infof ( "CREATE event on policy %s" , er . PolicyResponse . Policy )
events = append ( events , e )
2019-07-15 16:07:56 -07:00
}
}
2019-08-26 13:34:42 -07:00
return events
}
if ! onUpdate {
2020-01-24 12:05:53 -08:00
// All policies were applied successfully
2019-08-26 13:34:42 -07:00
// CREATE
for _ , er := range engineResponses {
successRules := er . GetSuccessRules ( )
successRulesStr := strings . Join ( successRules , ";" )
// event on resource
2019-12-26 11:50:41 -08:00
e := event . NewEvent (
2019-08-26 13:34:42 -07:00
er . PolicyResponse . Resource . Kind ,
er . PolicyResponse . Resource . APIVersion ,
er . PolicyResponse . Resource . Namespace ,
er . PolicyResponse . Resource . Name ,
event . PolicyApplied . String ( ) ,
2019-12-26 11:50:41 -08:00
event . AdmissionController ,
2019-08-26 13:34:42 -07:00
event . SRulesApply ,
successRulesStr ,
er . PolicyResponse . Policy ,
)
events = append ( events , e )
2019-07-15 16:07:56 -07:00
}
2019-08-26 13:34:42 -07:00
2019-07-15 16:07:56 -07:00
}
2019-08-26 13:34:42 -07:00
return events
2019-07-17 17:53:13 -07:00
}