@@ -274,7 +274,7 @@ func (r *Reconciler) copySecret(ctx context.Context, sourceName, targetName, sou
274
274
}
275
275
276
276
secret := & corev1.Secret {}
277
- if err := r .Client .Get (ctx , types.NamespacedName {Name : sourceName , Namespace : sourceNs }, secret ); err != nil {
277
+ if err := r .Reader .Get (ctx , types.NamespacedName {Name : sourceName , Namespace : sourceNs }, secret ); err != nil {
278
278
if apierrors .IsNotFound (err ) {
279
279
klog .V (3 ).Infof ("Secret %s is not found from the namespace %s" , sourceName , sourceNs )
280
280
r .Recorder .Eventf (bindInfoInstance , corev1 .EventTypeNormal , "NotFound" , "No Secret %s in the namespace %s" , sourceName , sourceNs )
@@ -376,7 +376,7 @@ func (r *Reconciler) copyConfigmap(ctx context.Context, sourceName, targetName,
376
376
}
377
377
378
378
cm := & corev1.ConfigMap {}
379
- if err := r .Client .Get (ctx , types.NamespacedName {Name : sourceName , Namespace : sourceNs }, cm ); err != nil {
379
+ if err := r .Reader .Get (ctx , types.NamespacedName {Name : sourceName , Namespace : sourceNs }, cm ); err != nil {
380
380
if apierrors .IsNotFound (err ) {
381
381
klog .V (3 ).Infof ("Configmap %s/%s is not found" , sourceNs , sourceName )
382
382
r .Recorder .Eventf (bindInfoInstance , corev1 .EventTypeNormal , "NotFound" , "No Configmap %s in the namespace %s" , sourceName , sourceNs )
@@ -478,7 +478,7 @@ func (r *Reconciler) copyRoute(ctx context.Context, route operatorv1alpha1.Route
478
478
}
479
479
480
480
sourceRoute := & ocproute.Route {}
481
- if err := r .Client .Get (ctx , types.NamespacedName {Name : route .Name , Namespace : sourceNs }, sourceRoute ); err != nil {
481
+ if err := r .Reader .Get (ctx , types.NamespacedName {Name : route .Name , Namespace : sourceNs }, sourceRoute ); err != nil {
482
482
if apierrors .IsNotFound (err ) {
483
483
klog .V (3 ).Infof ("Route %s/%s is not found" , sourceNs , route .Name )
484
484
r .Recorder .Eventf (bindInfoInstance , corev1 .EventTypeNormal , "NotFound" , "No Route %s in the namespace %s" , route .Name , sourceNs )
@@ -574,7 +574,7 @@ func (r *Reconciler) copyService(ctx context.Context, service operatorv1alpha1.S
574
574
}
575
575
576
576
sourceService := & corev1.Service {}
577
- if err := r .Client .Get (ctx , types.NamespacedName {Name : service .Name , Namespace : sourceNs }, sourceService ); err != nil {
577
+ if err := r .Reader .Get (ctx , types.NamespacedName {Name : service .Name , Namespace : sourceNs }, sourceService ); err != nil {
578
578
if apierrors .IsNotFound (err ) {
579
579
klog .V (3 ).Infof ("Route %s/%s is not found" , sourceNs , service .Name )
580
580
r .Recorder .Eventf (bindInfoInstance , corev1 .EventTypeNormal , "NotFound" , "No Service %s in the namespace %s" , service .Name , sourceNs )
@@ -877,20 +877,56 @@ func unique(stringSlice []string) []string {
877
877
return list
878
878
}
879
879
880
- func toOpbiRequest () handler.MapFunc {
880
+ func ( r * Reconciler ) toOpbiRequest () handler.MapFunc {
881
881
return func (object client.Object ) []reconcile.Request {
882
- opbiInstance := []reconcile.Request {}
883
882
labels := object .GetLabels ()
883
+
884
+ // Get a complete copy of the object using the Reader
885
+ var objectInCluster client.Object
886
+
887
+ switch v := object .(type ) {
888
+ case * corev1.Secret :
889
+ objectInCluster = & corev1.Secret {}
890
+ case * corev1.ConfigMap :
891
+ objectInCluster = & corev1.ConfigMap {}
892
+ case * ocproute.Route :
893
+ objectInCluster = & ocproute.Route {}
894
+ default :
895
+ klog .Errorf ("Unsupported object type: %T" , v )
896
+ return nil
897
+ }
898
+ if err := r .Reader .Get (context .Background (), types.NamespacedName {
899
+ Name : object .GetName (), Namespace : object .GetNamespace (),
900
+ }, objectInCluster ); apierrors .IsNotFound (err ) {
901
+ klog .V (2 ).Infof ("Object %s/%s not found, it is a deleted object, using the cache" , object .GetNamespace (), object .GetName ())
902
+ } else if err != nil {
903
+ klog .Errorf ("Failed to get object %s/%s: %v" , object .GetNamespace (), object .GetName (), err )
904
+ return nil
905
+ } else {
906
+ klog .V (2 ).Infof ("Object %s/%s found in the cluster" , object .GetNamespace (), object .GetName ())
907
+ labels = objectInCluster .GetLabels ()
908
+ }
909
+
910
+ // check if the label contains the OperandBindInfo label
911
+ if labels == nil {
912
+ klog .V (2 ).Infof ("No labels found in object %s/%s" , objectInCluster .GetNamespace (), objectInCluster .GetName ())
913
+ return nil
914
+ }
915
+ if _ , ok := labels [constant .OpbiTypeLabel ]; ! ok {
916
+ klog .V (2 ).Infof ("No OperandBindInfo label found in object %s/%s" , objectInCluster .GetNamespace (), objectInCluster .GetName ())
917
+ return nil
918
+ }
919
+ opbiInstances := []reconcile.Request {}
884
920
reg , _ := regexp .Compile (`^(.*)\.(.*)\/bindinfo` )
885
- for annotation := range labels {
886
- if reg .MatchString (annotation ) {
887
- annotationSlices := strings .Split (annotation , "." )
888
- bindinfoNamespace := annotationSlices [0 ]
889
- bindinfoName := strings .Split (annotationSlices [1 ], "/" )[0 ]
890
- opbiInstance = append (opbiInstance , reconcile.Request {NamespacedName : types.NamespacedName {Name : bindinfoName , Namespace : bindinfoNamespace }})
921
+ for key := range labels {
922
+ if reg .MatchString (key ) {
923
+ keySlices := strings .Split (key , "." )
924
+ bindinfoNamespace := keySlices [0 ]
925
+ bindinfoName := strings .Split (keySlices [1 ], "/" )[0 ]
926
+ opbiInstances = append (opbiInstances , reconcile.Request {NamespacedName : types.NamespacedName {Name : bindinfoName , Namespace : bindinfoNamespace }})
891
927
}
892
928
}
893
- return opbiInstance
929
+ return opbiInstances
894
930
}
895
931
}
896
932
@@ -1046,22 +1082,10 @@ func (r *Reconciler) refreshPodsFromDaemonSet(ns, name, resourceType string) err
1046
1082
func (r * Reconciler ) SetupWithManager (mgr ctrl.Manager ) error {
1047
1083
bindablePredicates := predicate.Funcs {
1048
1084
CreateFunc : func (e event.CreateEvent ) bool {
1049
- labels := e .Object .GetLabels ()
1050
- for labelKey , labelValue := range labels {
1051
- if labelKey == constant .OpbiTypeLabel {
1052
- return labelValue == "original"
1053
- }
1054
- }
1055
- return false
1085
+ return true
1056
1086
},
1057
1087
UpdateFunc : func (e event.UpdateEvent ) bool {
1058
- labels := e .ObjectNew .GetLabels ()
1059
- for labelKey , labelValue := range labels {
1060
- if labelKey == constant .OpbiTypeLabel {
1061
- return labelValue == "original"
1062
- }
1063
- }
1064
- return false
1088
+ return true
1065
1089
},
1066
1090
DeleteFunc : func (e event.DeleteEvent ) bool {
1067
1091
return true
@@ -1113,12 +1137,12 @@ func (r *Reconciler) SetupWithManager(mgr ctrl.Manager) error {
1113
1137
For (& operatorv1alpha1.OperandBindInfo {}).
1114
1138
Watches (
1115
1139
& source.Kind {Type : & corev1.ConfigMap {}},
1116
- handler .EnqueueRequestsFromMapFunc (toOpbiRequest ()),
1140
+ handler .EnqueueRequestsFromMapFunc (r . toOpbiRequest ()),
1117
1141
builder .WithPredicates (bindablePredicates ),
1118
1142
).
1119
1143
Watches (
1120
1144
& source.Kind {Type : & corev1.Secret {}},
1121
- handler .EnqueueRequestsFromMapFunc (toOpbiRequest ()),
1145
+ handler .EnqueueRequestsFromMapFunc (r . toOpbiRequest ()),
1122
1146
builder .WithPredicates (bindablePredicates ),
1123
1147
).
1124
1148
Watches (
@@ -1134,7 +1158,7 @@ func (r *Reconciler) SetupWithManager(mgr ctrl.Manager) error {
1134
1158
if isRouteAPI {
1135
1159
controller .Watches (
1136
1160
& source.Kind {Type : & ocproute.Route {}},
1137
- handler .EnqueueRequestsFromMapFunc (toOpbiRequest ()),
1161
+ handler .EnqueueRequestsFromMapFunc (r . toOpbiRequest ()),
1138
1162
builder .WithPredicates (bindablePredicates ),
1139
1163
)
1140
1164
}
0 commit comments