@@ -29,6 +29,7 @@ import (
29
29
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
30
30
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
31
31
pkgruntime "k8s.io/apimachinery/pkg/runtime"
32
+ "k8s.io/apimachinery/pkg/runtime/schema"
32
33
"k8s.io/apimachinery/pkg/util/runtime"
33
34
"k8s.io/apimachinery/pkg/util/sets"
34
35
"k8s.io/apimachinery/pkg/util/wait"
@@ -246,11 +247,12 @@ func (s *KubeFedSyncController) reconcile(qualifiedName util.QualifiedName) util
246
247
return util .StatusError
247
248
}
248
249
if possibleOrphan {
249
- targetKind := s .typeConfig .GetTargetType ().Kind
250
- klog .V (2 ).Infof ("Ensuring the removal of the label %q from %s %q in member clusters." , util .ManagedByKubeFedLabelKey , targetKind , qualifiedName )
251
- err = s .removeManagedLabel (targetKind , qualifiedName )
250
+ apiResource := s .typeConfig .GetTargetType ()
251
+ gvk := apiResourceToGVK (& apiResource )
252
+ klog .V (2 ).Infof ("Ensuring the removal of the label %q from %s %q in member clusters." , util .ManagedByKubeFedLabelKey , gvk .Kind , qualifiedName )
253
+ err = s .removeManagedLabel (gvk , qualifiedName )
252
254
if err != nil {
253
- wrappedErr := errors .Wrapf (err , "failed to remove the label %q from %s %q in member clusters" , util .ManagedByKubeFedLabelKey , targetKind , qualifiedName )
255
+ wrappedErr := errors .Wrapf (err , "failed to remove the label %q from %s %q in member clusters" , util .ManagedByKubeFedLabelKey , gvk . Kind , qualifiedName )
254
256
runtime .HandleError (wrappedErr )
255
257
return util .StatusError
256
258
}
@@ -453,7 +455,7 @@ func (s *KubeFedSyncController) ensureDeletion(fedResource FederatedResource) ut
453
455
return util .StatusError
454
456
}
455
457
klog .V (2 ).Infof ("Initiating the removal of the label %q from resources previously managed by %s %q." , util .ManagedByKubeFedLabelKey , kind , key )
456
- err = s .removeManagedLabel (fedResource .TargetKind (), fedResource .TargetName ())
458
+ err = s .removeManagedLabel (fedResource .TargetGVK (), fedResource .TargetName ())
457
459
if err != nil {
458
460
wrappedErr := errors .Wrapf (err , "failed to remove the label %q from all resources previously managed by %s %q" , util .ManagedByKubeFedLabelKey , kind , key )
459
461
runtime .HandleError (wrappedErr )
@@ -477,8 +479,8 @@ func (s *KubeFedSyncController) ensureDeletion(fedResource FederatedResource) ut
477
479
478
480
// removeManagedLabel attempts to remove the managed label from
479
481
// resources with the given name in member clusters.
480
- func (s * KubeFedSyncController ) removeManagedLabel (kind string , qualifiedName util.QualifiedName ) error {
481
- ok , err := s .handleDeletionInClusters (kind , qualifiedName , func (dispatcher dispatch.UnmanagedDispatcher , clusterName string , clusterObj * unstructured.Unstructured ) {
482
+ func (s * KubeFedSyncController ) removeManagedLabel (gvk schema. GroupVersionKind , qualifiedName util.QualifiedName ) error {
483
+ ok , err := s .handleDeletionInClusters (gvk , qualifiedName , func (dispatcher dispatch.UnmanagedDispatcher , clusterName string , clusterObj * unstructured.Unstructured ) {
482
484
if clusterObj .GetDeletionTimestamp () != nil {
483
485
return
484
486
}
@@ -495,11 +497,11 @@ func (s *KubeFedSyncController) removeManagedLabel(kind string, qualifiedName ut
495
497
}
496
498
497
499
func (s * KubeFedSyncController ) deleteFromClusters (fedResource FederatedResource ) (bool , error ) {
498
- kind := fedResource .TargetKind ()
500
+ gvk := fedResource .TargetGVK ()
499
501
qualifiedName := fedResource .TargetName ()
500
502
501
503
remainingClusters := []string {}
502
- ok , err := s .handleDeletionInClusters (kind , qualifiedName , func (dispatcher dispatch.UnmanagedDispatcher , clusterName string , clusterObj * unstructured.Unstructured ) {
504
+ ok , err := s .handleDeletionInClusters (gvk , qualifiedName , func (dispatcher dispatch.UnmanagedDispatcher , clusterName string , clusterObj * unstructured.Unstructured ) {
503
505
// If the containing namespace of a FederatedNamespace is
504
506
// marked for deletion, it is impossible to require the
505
507
// removal of the namespace in advance of removal of the sync
@@ -557,7 +559,7 @@ func (s *KubeFedSyncController) ensureRemovedOrUnmanaged(fedResource FederatedRe
557
559
return errors .Wrap (err , "failed to get a list of clusters" )
558
560
}
559
561
560
- dispatcher := dispatch .NewCheckUnmanagedDispatcher (s .informer .GetClientForCluster , fedResource .TargetKind (), fedResource .TargetName ())
562
+ dispatcher := dispatch .NewCheckUnmanagedDispatcher (s .informer .GetClientForCluster , fedResource .TargetGVK (), fedResource .TargetName ())
561
563
unreadyClusters := []string {}
562
564
for _ , cluster := range clusters {
563
565
if ! util .IsClusterReady (& cluster .Status ) {
@@ -581,15 +583,15 @@ func (s *KubeFedSyncController) ensureRemovedOrUnmanaged(fedResource FederatedRe
581
583
582
584
// handleDeletionInClusters invokes the provided deletion handler for
583
585
// each managed resource in member clusters.
584
- func (s * KubeFedSyncController ) handleDeletionInClusters (kind string , qualifiedName util.QualifiedName ,
586
+ func (s * KubeFedSyncController ) handleDeletionInClusters (gvk schema. GroupVersionKind , qualifiedName util.QualifiedName ,
585
587
deletionFunc func (dispatcher dispatch.UnmanagedDispatcher , clusterName string , clusterObj * unstructured.Unstructured )) (bool , error ) {
586
588
587
589
clusters , err := s .informer .GetClusters ()
588
590
if err != nil {
589
591
return false , errors .Wrap (err , "failed to get a list of clusters" )
590
592
}
591
593
592
- dispatcher := dispatch .NewUnmanagedDispatcher (s .informer .GetClientForCluster , kind , qualifiedName )
594
+ dispatcher := dispatch .NewUnmanagedDispatcher (s .informer .GetClientForCluster , gvk , qualifiedName )
593
595
key := qualifiedName .String ()
594
596
retrievalFailureClusters := []string {}
595
597
unreadyClusters := []string {}
@@ -603,7 +605,7 @@ func (s *KubeFedSyncController) handleDeletionInClusters(kind string, qualifiedN
603
605
604
606
rawClusterObj , _ , err := s .informer .GetTargetStore ().GetByKey (clusterName , key )
605
607
if err != nil {
606
- wrappedErr := errors .Wrapf (err , "failed to retrieve %s %q for cluster %q" , kind , key , clusterName )
608
+ wrappedErr := errors .Wrapf (err , "failed to retrieve %s %q for cluster %q" , gvk . Kind , key , clusterName )
607
609
runtime .HandleError (wrappedErr )
608
610
retrievalFailureClusters = append (retrievalFailureClusters , clusterName )
609
611
continue
0 commit comments