From dc4f46b85aaf4d651da2d0fb89ee4b46ca8bef87 Mon Sep 17 00:00:00 2001 From: Jordan Liggitt Date: Mon, 26 Jun 2017 12:45:22 -0400 Subject: [PATCH] Retry finding RBAC version if not found in discovery cache --- federation/pkg/kubefed/util/BUILD | 1 + federation/pkg/kubefed/util/util.go | 20 ++++++++++++++++++-- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/federation/pkg/kubefed/util/BUILD b/federation/pkg/kubefed/util/BUILD index 9e743926476..19122d412f0 100644 --- a/federation/pkg/kubefed/util/BUILD +++ b/federation/pkg/kubefed/util/BUILD @@ -24,6 +24,7 @@ go_library( "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/net:go_default_library", + "//vendor/k8s.io/client-go/discovery:go_default_library", "//vendor/k8s.io/client-go/rest:go_default_library", "//vendor/k8s.io/client-go/tools/clientcmd:go_default_library", "//vendor/k8s.io/client-go/tools/clientcmd/api:go_default_library", diff --git a/federation/pkg/kubefed/util/util.go b/federation/pkg/kubefed/util/util.go index 8ded3da17a2..049b65395bb 100644 --- a/federation/pkg/kubefed/util/util.go +++ b/federation/pkg/kubefed/util/util.go @@ -23,6 +23,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime/schema" utilnet "k8s.io/apimachinery/pkg/util/net" + "k8s.io/client-go/discovery" restclient "k8s.io/client-go/rest" "k8s.io/client-go/tools/clientcmd" clientcmdapi "k8s.io/client-go/tools/clientcmd/api" @@ -263,6 +264,21 @@ func GetVersionedClientForRBACOrFail(hostFactory cmdutil.Factory) (client.Interf if err != nil { return nil, err } + + rbacVersion, err := getRBACVersion(discoveryclient) + if err != nil && !discoveryclient.Fresh() { + discoveryclient.Invalidate() + rbacVersion, err = getRBACVersion(discoveryclient) + } + if err != nil { + return nil, err + } + + return hostFactory.ClientSetForVersion(rbacVersion) +} + +func getRBACVersion(discoveryclient discovery.CachedDiscoveryInterface) (*schema.GroupVersion, error) { + groupList, err := discoveryclient.ServerGroups() if err != nil { return nil, fmt.Errorf("Couldn't get clientset to create RBAC roles in the host cluster: %v", err) @@ -275,7 +291,7 @@ func GetVersionedClientForRBACOrFail(hostFactory cmdutil.Factory) (client.Interf if err != nil { return nil, err } - return hostFactory.ClientSetForVersion(&gv) + return &gv, nil } for _, version := range g.Versions { if version.GroupVersion != "" { @@ -283,7 +299,7 @@ func GetVersionedClientForRBACOrFail(hostFactory cmdutil.Factory) (client.Interf if err != nil { return nil, err } - return hostFactory.ClientSetForVersion(&gv) + return &gv, nil } } }