From 878bc5c4424c79239a689c2c7f3ec481f3f9ba2e Mon Sep 17 00:00:00 2001 From: waseem Date: Fri, 5 Jul 2019 12:23:14 +0200 Subject: [PATCH] Refactor Openshift detection --- internal/pkg/cmd/reloader.go | 2 +- internal/pkg/controller/controller_test.go | 2 +- internal/pkg/handler/upgrade.go | 2 +- pkg/kube/client.go | 36 ++++++++++++---------- 4 files changed, 23 insertions(+), 19 deletions(-) diff --git a/internal/pkg/cmd/reloader.go b/internal/pkg/cmd/reloader.go index 271d4f0..3810143 100644 --- a/internal/pkg/cmd/reloader.go +++ b/internal/pkg/cmd/reloader.go @@ -36,7 +36,7 @@ func startReloader(cmd *cobra.Command, args []string) { } // create the clientset - clientset, err := kube.GetClient() + clientset, err := kube.GetKubernetesClient() if err != nil { logrus.Fatal(err) } diff --git a/internal/pkg/controller/controller_test.go b/internal/pkg/controller/controller_test.go index dca3e6d..18c8ac7 100644 --- a/internal/pkg/controller/controller_test.go +++ b/internal/pkg/controller/controller_test.go @@ -53,7 +53,7 @@ func TestMain(m *testing.M) { // Perform rolling upgrade on deploymentConfig and create env var upon updating the configmap func TestControllerUpdatingConfigmapShouldCreateEnvInDeploymentConfig(t *testing.T) { // Don't run test on non-openshift environment - if !clients.IsOpenshift { + if !kube.IsOpenshift { return } diff --git a/internal/pkg/handler/upgrade.go b/internal/pkg/handler/upgrade.go index 7ce29bb..5b6a109 100644 --- a/internal/pkg/handler/upgrade.go +++ b/internal/pkg/handler/upgrade.go @@ -68,7 +68,7 @@ func doRollingUpgrade(config util.Config) { rollingUpgrade(clients, config, GetDaemonSetRollingUpgradeFuncs()) rollingUpgrade(clients, config, GetStatefulSetRollingUpgradeFuncs()) - if clients.IsOpenshift { + if kube.IsOpenshift { rollingUpgrade(clients, config, GetDeploymentConfigRollingUpgradeFuncs()) } } diff --git a/pkg/kube/client.go b/pkg/kube/client.go index d5df510..2d10ff9 100644 --- a/pkg/kube/client.go +++ b/pkg/kube/client.go @@ -1,7 +1,6 @@ package kube import ( - "errors" "os" "k8s.io/client-go/tools/clientcmd" @@ -12,50 +11,55 @@ import ( "k8s.io/client-go/rest" ) -// Client struct exposes interfaces for kubernetes as well as openshift if available +// Clients struct exposes interfaces for kubernetes as well as openshift if available type Clients struct { KubernetesClient kubernetes.Interface OpenshiftAppsClient appsclient.Interface - IsOpenshift bool } +var ( + // IsOpenshift is true if environment is Openshift, it is false if environment is Kubernetes + IsOpenshift = isOpenshift() +) + // GetClients returns a `Clients` object containing both openshift and kubernetes clients with an openshift identifier func GetClients() Clients { - client, err := GetClient() - isOpenshift := true + client, err := GetKubernetesClient() if err != nil { logrus.Fatalf("Unable to create Kubernetes client error = %v", err) } - appsClient, err := GetOpenshiftAppsClient() - if err != nil { - logrus.Warnf("Unable to create Openshift Apps client error = %v", err) - isOpenshift = false + var appsClient *appsclient.Clientset + + if IsOpenshift { + appsClient, err = GetOpenshiftAppsClient() + if err != nil { + logrus.Warnf("Unable to create Openshift Apps client error = %v", err) + } } + return Clients{ KubernetesClient: client, OpenshiftAppsClient: appsClient, - IsOpenshift: isOpenshift, } } func isOpenshift() bool { - client, err := GetClient() + client, err := GetKubernetesClient() if err != nil { logrus.Fatalf("Unable to create Kubernetes client error = %v", err) } _, err = client.RESTClient().Get().AbsPath("/apis/project.openshift.io").Do().Raw() if err == nil { + logrus.Info("Environment: Openshift") return true } + logrus.Info("Environment: Kubernetes") return false } // GetOpenshiftAppsClient returns an Openshift Client that can query on Apps func GetOpenshiftAppsClient() (*appsclient.Clientset, error) { - if !isOpenshift() { - return nil, errors.New("Not running on Openshift") - } config, err := getConfig() if err != nil { return nil, err @@ -63,8 +67,8 @@ func GetOpenshiftAppsClient() (*appsclient.Clientset, error) { return appsclient.NewForConfig(config) } -// GetClient gets the client for k8s, if ~/.kube/config exists so get that config else incluster config -func GetClient() (*kubernetes.Clientset, error) { +// GetKubernetesClient gets the client for k8s, if ~/.kube/config exists so get that config else incluster config +func GetKubernetesClient() (*kubernetes.Clientset, error) { config, err := getConfig() if err != nil { return nil, err