1
0
Fork 0
mirror of https://github.com/kyverno/kyverno.git synced 2025-03-10 18:06:55 +00:00
kyverno/pkg/webhooks/resource/generation/utils.go
shuting 0c3351887a
fix: the same source cannot be used for multiple targets with a generate clone rule (#7436)
* add source labels to targets

Signed-off-by: ShutingZhao <shuting@nirmata.com>

* handle multiple triggers/targets for the same clone source

Signed-off-by: ShutingZhao <shuting@nirmata.com>

* add source labels to targets

Signed-off-by: ShutingZhao <shuting@nirmata.com>

* fix test

Signed-off-by: ShutingZhao <shuting@nirmata.com>

* remove unused code

Signed-off-by: ShutingZhao <shuting@nirmata.com>

* add kuttl tests

Signed-off-by: ShutingZhao <shuting@nirmata.com>

* rename the test

Signed-off-by: ShutingZhao <shuting@nirmata.com>

* add kuttl tests

Signed-off-by: ShutingZhao <shuting@nirmata.com>

* add kuttl tests

Signed-off-by: ShutingZhao <shuting@nirmata.com>

* split apiversion label into version and group

Signed-off-by: ShutingZhao <shuting@nirmata.com>

---------

Signed-off-by: ShutingZhao <shuting@nirmata.com>
2023-06-07 13:50:47 +00:00

38 lines
1.4 KiB
Go

package generation
import (
kyvernov1 "github.com/kyverno/kyverno/api/kyverno/v1"
kyvernov1beta1 "github.com/kyverno/kyverno/api/kyverno/v1beta1"
"github.com/kyverno/kyverno/pkg/engine"
datautils "github.com/kyverno/kyverno/pkg/utils/data"
admissionv1 "k8s.io/api/admission/v1"
)
func buildURSpec(requestType kyvernov1beta1.RequestType, policyKey, ruleName string, resource kyvernov1.ResourceSpec, deleteDownstream bool) kyvernov1beta1.UpdateRequestSpec {
return kyvernov1beta1.UpdateRequestSpec{
Type: requestType,
Policy: policyKey,
Rule: ruleName,
Resource: resource,
DeleteDownstream: deleteDownstream,
}
}
func buildURContext(request admissionv1.AdmissionRequest, policyContext *engine.PolicyContext) kyvernov1beta1.UpdateRequestSpecContext {
return kyvernov1beta1.UpdateRequestSpecContext{
UserRequestInfo: policyContext.AdmissionInfo(),
AdmissionRequestInfo: kyvernov1beta1.AdmissionRequestInfoObject{
AdmissionRequest: &request,
Operation: request.Operation,
},
}
}
func matchDeleteOperation(rule kyvernov1.Rule) bool {
ops := rule.MatchResources.GetOperations()
for _, rscFilters := range append(rule.MatchResources.All, rule.MatchResources.Any...) {
ops = append(ops, rscFilters.ResourceDescription.GetOperations()...)
}
return datautils.SliceContains(ops, string(admissionv1.Delete))
}