@@ -26,6 +26,7 @@ import (
26
26
"sync"
27
27
28
28
"github.com/go-logr/logr"
29
+ "github.com/google/go-cmp/cmp"
29
30
"gopkg.in/fsnotify.v1"
30
31
31
32
"sigs.k8s.io/controller-runtime/pkg/client"
@@ -217,25 +218,34 @@ func (p *Provider) removeCluster(name string) {
217
218
}
218
219
219
220
func (p * Provider ) run (ctx context.Context , mgr mcmanager.Manager ) error {
220
- currentClusters , err := p .loadClusters ()
221
+ loadedClusters , err := p .loadClusters ()
221
222
if err != nil {
222
223
return fmt .Errorf ("failed to load clusters: %w" , err )
223
224
}
224
225
knownClusters := p .ClusterNames ()
225
226
226
227
// add new clusters
227
- for name , cl := range currentClusters {
228
+ for name , cl := range loadedClusters {
228
229
if slices .Contains (knownClusters , name ) {
230
+ // update if the config has changed
231
+ existingCluster , _ := p .Get (ctx , name )
232
+ if ! cmp .Equal (existingCluster .GetConfig (), cl .GetConfig ()) {
233
+ p .log .Info ("updating cluster" , "name" , name )
234
+ p .removeCluster (name )
235
+ p .addCluster (ctx , mgr , name , cl )
236
+ }
229
237
continue
230
238
}
239
+ p .log .Info ("adding cluster" , "name" , name )
231
240
p .addCluster (ctx , mgr , name , cl )
232
241
}
233
242
234
243
// delete clusters that are no longer present
235
244
for _ , name := range knownClusters {
236
- if _ , ok := currentClusters [name ]; ok {
245
+ if _ , ok := loadedClusters [name ]; ok {
237
246
continue
238
247
}
248
+ p .log .Info ("removing cluster" , "name" , name )
239
249
p .removeCluster (name )
240
250
}
241
251
0 commit comments