From 7f1a617496e92354df3275a5c882374a58ecf992 Mon Sep 17 00:00:00 2001 From: Jordan Liggitt Date: Fri, 11 Aug 2017 19:34:22 -0400 Subject: [PATCH] select an RBAC version for kubefed it knows how to speak --- federation/pkg/kubefed/util/BUILD | 3 +++ federation/pkg/kubefed/util/util.go | 27 +++++++++++++++++++++++++-- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/federation/pkg/kubefed/util/BUILD b/federation/pkg/kubefed/util/BUILD index bfbd5aacb07..ca22c2823f1 100644 --- a/federation/pkg/kubefed/util/BUILD +++ b/federation/pkg/kubefed/util/BUILD @@ -14,6 +14,9 @@ go_library( "//federation/client/clientset_generated/federation_clientset:go_default_library", "//pkg/api:go_default_library", "//pkg/apis/rbac:go_default_library", + "//pkg/apis/rbac/v1:go_default_library", + "//pkg/apis/rbac/v1alpha1:go_default_library", + "//pkg/apis/rbac/v1beta1:go_default_library", "//pkg/client/clientset_generated/internalclientset:go_default_library", "//pkg/kubectl/cmd:go_default_library", "//pkg/kubectl/cmd/util:go_default_library", diff --git a/federation/pkg/kubefed/util/util.go b/federation/pkg/kubefed/util/util.go index 075041236ca..eba6349dfb0 100644 --- a/federation/pkg/kubefed/util/util.go +++ b/federation/pkg/kubefed/util/util.go @@ -32,6 +32,9 @@ import ( fedclient "k8s.io/kubernetes/federation/client/clientset_generated/federation_clientset" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/apis/rbac" + rbacv1 "k8s.io/kubernetes/pkg/apis/rbac/v1" + rbacv1alpha1 "k8s.io/kubernetes/pkg/apis/rbac/v1alpha1" + rbacv1beta1 "k8s.io/kubernetes/pkg/apis/rbac/v1beta1" client "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" kubectlcmd "k8s.io/kubernetes/pkg/kubectl/cmd" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" @@ -285,6 +288,16 @@ func getRBACVersion(discoveryclient discovery.CachedDiscoveryInterface) (*schema return nil, fmt.Errorf("Couldn't get clientset to create RBAC roles in the host cluster: %v", err) } + // These are the RBAC versions we can speak + knownVersions := map[schema.GroupVersion]bool{ + rbacv1.SchemeGroupVersion: true, + rbacv1alpha1.SchemeGroupVersion: true, + rbacv1beta1.SchemeGroupVersion: true, + } + + // This holds any RBAC versions listed in discovery we do not know how to speak + unknownVersions := []schema.GroupVersion{} + for _, g := range groupList.Groups { if g.Name == rbac.GroupName { if g.PreferredVersion.GroupVersion != "" { @@ -292,7 +305,9 @@ func getRBACVersion(discoveryclient discovery.CachedDiscoveryInterface) (*schema if err != nil { return nil, err } - return &gv, nil + if knownVersions[gv] { + return &gv, nil + } } for _, version := range g.Versions { if version.GroupVersion != "" { @@ -300,12 +315,20 @@ func getRBACVersion(discoveryclient discovery.CachedDiscoveryInterface) (*schema if err != nil { return nil, err } - return &gv, nil + if knownVersions[gv] { + return &gv, nil + } else { + unknownVersions = append(unknownVersions, gv) + } } } } } + if len(unknownVersions) > 0 { + return nil, &NoRBACAPIError{fmt.Sprintf("%s\nUnknown RBAC API versions: %v", rbacAPINotAvailable, unknownVersions)} + } + return nil, &NoRBACAPIError{rbacAPINotAvailable} }