2022-04-29 13:31:02 +08:00
|
|
|
package policy
|
|
|
|
|
|
|
|
import (
|
2022-05-17 13:12:43 +02:00
|
|
|
kyvernov1 "github.com/kyverno/kyverno/api/kyverno/v1"
|
2024-06-20 11:44:43 +02:00
|
|
|
kyvernov2 "github.com/kyverno/kyverno/api/kyverno/v2"
|
2022-05-09 12:43:11 +05:30
|
|
|
common "github.com/kyverno/kyverno/pkg/background/common"
|
2022-04-29 13:31:02 +08:00
|
|
|
"github.com/kyverno/kyverno/pkg/config"
|
|
|
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
2023-03-01 11:48:18 +08:00
|
|
|
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
2022-05-17 07:56:48 +02:00
|
|
|
"k8s.io/apimachinery/pkg/labels"
|
2022-04-29 13:31:02 +08:00
|
|
|
)
|
|
|
|
|
2024-06-20 11:44:43 +02:00
|
|
|
func newUR(policy kyvernov1.PolicyInterface, trigger kyvernov1.ResourceSpec, ruleName string, ruleType kyvernov2.RequestType, deleteDownstream bool) *kyvernov2.UpdateRequest {
|
2022-04-29 13:31:02 +08:00
|
|
|
var policyNameNamespaceKey string
|
|
|
|
|
|
|
|
if policy.IsNamespaced() {
|
|
|
|
policyNameNamespaceKey = policy.GetNamespace() + "/" + policy.GetName()
|
|
|
|
} else {
|
|
|
|
policyNameNamespaceKey = policy.GetName()
|
|
|
|
}
|
|
|
|
|
|
|
|
var label labels.Set
|
2024-06-20 11:44:43 +02:00
|
|
|
if ruleType == kyvernov2.Mutate {
|
2022-05-24 09:41:12 +02:00
|
|
|
label = common.MutateLabelsSet(policyNameNamespaceKey, trigger)
|
2022-04-29 13:31:02 +08:00
|
|
|
} else {
|
2022-05-24 09:41:12 +02:00
|
|
|
label = common.GenerateLabelsSet(policyNameNamespaceKey, trigger)
|
2022-04-29 13:31:02 +08:00
|
|
|
}
|
|
|
|
|
2024-06-20 11:44:43 +02:00
|
|
|
return &kyvernov2.UpdateRequest{
|
2023-03-01 11:48:18 +08:00
|
|
|
TypeMeta: metav1.TypeMeta{
|
2024-06-20 11:44:43 +02:00
|
|
|
APIVersion: kyvernov2.SchemeGroupVersion.String(),
|
2023-03-01 11:48:18 +08:00
|
|
|
Kind: "UpdateRequest",
|
|
|
|
},
|
2022-04-29 13:31:02 +08:00
|
|
|
ObjectMeta: metav1.ObjectMeta{
|
|
|
|
GenerateName: "ur-",
|
2022-05-11 08:14:30 +02:00
|
|
|
Namespace: config.KyvernoNamespace(),
|
2022-04-29 13:31:02 +08:00
|
|
|
Labels: label,
|
|
|
|
},
|
2024-06-20 11:44:43 +02:00
|
|
|
Spec: kyvernov2.UpdateRequestSpec{
|
2022-04-29 13:31:02 +08:00
|
|
|
Type: ruleType,
|
|
|
|
Policy: policyNameNamespaceKey,
|
2023-03-01 11:48:18 +08:00
|
|
|
Rule: ruleName,
|
2022-05-17 13:12:43 +02:00
|
|
|
Resource: kyvernov1.ResourceSpec{
|
2022-05-09 12:43:11 +05:30
|
|
|
Kind: trigger.GetKind(),
|
|
|
|
Namespace: trigger.GetNamespace(),
|
|
|
|
Name: trigger.GetName(),
|
|
|
|
APIVersion: trigger.GetAPIVersion(),
|
2023-11-06 16:07:13 +05:30
|
|
|
UID: trigger.GetUID(),
|
2022-04-29 13:31:02 +08:00
|
|
|
},
|
2023-03-01 11:48:18 +08:00
|
|
|
DeleteDownstream: deleteDownstream,
|
|
|
|
},
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-06-20 11:44:43 +02:00
|
|
|
func newURStatus(downstream unstructured.Unstructured) kyvernov2.UpdateRequestStatus {
|
|
|
|
return kyvernov2.UpdateRequestStatus{
|
|
|
|
State: kyvernov2.Pending,
|
2023-03-01 11:48:18 +08:00
|
|
|
GeneratedResources: []kyvernov1.ResourceSpec{
|
|
|
|
{
|
|
|
|
APIVersion: downstream.GetAPIVersion(),
|
|
|
|
Kind: downstream.GetKind(),
|
|
|
|
Namespace: downstream.GetNamespace(),
|
|
|
|
Name: downstream.GetName(),
|
2023-11-06 16:07:13 +05:30
|
|
|
UID: downstream.GetUID(),
|
2023-03-01 11:48:18 +08:00
|
|
|
},
|
2022-04-29 13:31:02 +08:00
|
|
|
},
|
|
|
|
}
|
|
|
|
}
|