From 6773818948df5970439a54843aedbd57ed1077e2 Mon Sep 17 00:00:00 2001 From: wangyelei Date: Fri, 27 Sep 2024 10:47:41 +0800 Subject: [PATCH] fix: create redis bpt failed (#8218) --- .../apps/backuppolicytemplate_controller.go | 36 +++++++++++++++++++ .../apps/componentversion_controller.go | 2 +- 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/controllers/apps/backuppolicytemplate_controller.go b/controllers/apps/backuppolicytemplate_controller.go index f617bcce593..16e857a3215 100644 --- a/controllers/apps/backuppolicytemplate_controller.go +++ b/controllers/apps/backuppolicytemplate_controller.go @@ -20,9 +20,11 @@ import ( "context" k8sruntime "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/types" "k8s.io/client-go/tools/record" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client" + "sigs.k8s.io/controller-runtime/pkg/handler" "sigs.k8s.io/controller-runtime/pkg/log" "sigs.k8s.io/controller-runtime/pkg/reconcile" @@ -89,9 +91,43 @@ func (r *BackupPolicyTemplateReconciler) getMatchedComponentDefs(compDefList *ap return compDefNames } +func (r *BackupPolicyTemplateReconciler) isCompatibleWith(compDef appsv1alpha1.ComponentDefinition, bpt *appsv1alpha1.BackupPolicyTemplate) bool { + for _, bp := range bpt.Spec.BackupPolicies { + for _, compDefRegex := range bp.ComponentDefs { + if component.CompDefMatched(compDef.Name, compDefRegex) { + return true + } + } + } + return false +} + +func (r *BackupPolicyTemplateReconciler) compatibleBackupPolicyTemplate(ctx context.Context, obj client.Object) []reconcile.Request { + compDef, ok := obj.(*appsv1alpha1.ComponentDefinition) + if !ok { + return nil + } + bpts := &appsv1alpha1.BackupPolicyTemplateList{} + if err := r.Client.List(ctx, bpts); err != nil { + return nil + } + requests := make([]reconcile.Request, 0) + for i := range bpts.Items { + if r.isCompatibleWith(*compDef, &bpts.Items[i]) { + requests = append(requests, reconcile.Request{ + NamespacedName: types.NamespacedName{ + Name: bpts.Items[i].Name, + }, + }) + } + } + return requests +} + // SetupWithManager sets up the controller with the Manager. func (r *BackupPolicyTemplateReconciler) SetupWithManager(mgr ctrl.Manager) error { return intctrlutil.NewNamespacedControllerManagedBy(mgr). For(&appsv1alpha1.BackupPolicyTemplate{}). + Watches(&appsv1alpha1.ComponentDefinition{}, handler.EnqueueRequestsFromMapFunc(r.compatibleBackupPolicyTemplate)). Complete(r) } diff --git a/controllers/apps/componentversion_controller.go b/controllers/apps/componentversion_controller.go index 2ff2f3f3bc7..17ac91257dd 100644 --- a/controllers/apps/componentversion_controller.go +++ b/controllers/apps/componentversion_controller.go @@ -122,7 +122,7 @@ func (r *ComponentVersionReconciler) compatibleCompVersion(ctx context.Context, func (r *ComponentVersionReconciler) isCompatibleWith(compDef appsv1alpha1.ComponentDefinition, compVer appsv1alpha1.ComponentVersion) bool { for _, rule := range compVer.Spec.CompatibilityRules { for _, name := range rule.CompDefs { - if strings.HasPrefix(compDef.Name, name) { + if component.CompDefMatched(compDef.Name, name) { return true } }