@@ -87,7 +87,7 @@ func NewManagedClusterAddOnInformer(config *rest.Config, eventHandler func(obj *
8787 informer := cache .NewSharedIndexInformer (
8888 listWatcher ,
8989 & addonv1alpha1.ManagedClusterAddOn {},
90- time .Minute * 10 , // resync period
90+ time .Hour * 10 , // resync period - ManagedClusterAddOn namespaces change infrequently
9191 cache.Indexers {},
9292 )
9393
@@ -117,10 +117,31 @@ func (i *ManagedClusterAddOnInformer) Start() error {
117117 // no-op
118118 },
119119 UpdateFunc : func (oldObj , newObj any ) {
120- if addon , ok := newObj .(* addonv1alpha1.ManagedClusterAddOn ); ok {
121- i .enqueueAddon (addon )
122- } else {
120+ oldAddon , oldOk := oldObj .(* addonv1alpha1.ManagedClusterAddOn )
121+ newAddon , newOk := newObj .(* addonv1alpha1.ManagedClusterAddOn )
122+
123+ if ! newOk {
123124 i .logger .Error (nil , "newObj is not a ManagedClusterAddOn" , "object" , newObj )
125+ return
126+ }
127+
128+ if ! oldOk {
129+ i .logger .Error (nil , "oldObj is not a ManagedClusterAddOn" , "object" , oldObj )
130+ return
131+ }
132+
133+ // Only enqueue if the addon's Status.Namespace or Spec.InstallNamespace has changed
134+ // These are the fields the controller cares about for generating subjects
135+ if oldAddon .Status .Namespace != newAddon .Status .Namespace ||
136+ oldAddon .Spec .InstallNamespace != newAddon .Spec .InstallNamespace {
137+ i .logger .Info ("ManagedClusterAddOn namespace changed, enqueuing for reconciliation" ,
138+ "namespace" , newAddon .Namespace ,
139+ "name" , newAddon .Name ,
140+ "oldStatusNamespace" , oldAddon .Status .Namespace ,
141+ "newStatusNamespace" , newAddon .Status .Namespace ,
142+ "oldInstallNamespace" , oldAddon .Spec .InstallNamespace ,
143+ "newInstallNamespace" , newAddon .Spec .InstallNamespace )
144+ i .enqueueAddon (newAddon )
124145 }
125146 },
126147 DeleteFunc : func (obj any ) {
0 commit comments