From 3ad83d7547c1d498dd9f84aeb8c087e039013701 Mon Sep 17 00:00:00 2001 From: gaorong Date: Tue, 5 Nov 2019 19:31:41 +0800 Subject: [PATCH] support pass in kubeconfig and master to client-go by flag --- main.go | 13 +++++++++++-- pkg/k8sapi/discovery.go | 20 +++++++++++++++++--- 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/main.go b/main.go index 0c5cb2989ea..02e86cb79c0 100644 --- a/main.go +++ b/main.go @@ -14,6 +14,7 @@ package main import ( + "flag" "io" "os" @@ -31,20 +32,28 @@ const ( ) var ( - version string + version string + kubeconfig string + master string ) +func init() { + flag.StringVar(&master, "master", "", "The address of the Kubernetes API server (overrides any value in kubeconfig).") + flag.StringVar(&kubeconfig, "kubeconfig", "", "Path to kubeconfig file with authorization and master location information.") +} + func main() { os.Exit(_main()) } func _main() int { defer log.Flush() + flag.Parse() logger.SetupLogger(logger.GetLogFileLocation(defaultLogFilePath)) log.Infof("Starting L-IPAMD %s ...", version) - kubeClient, err := k8sapi.CreateKubeClient() + kubeClient, err := k8sapi.CreateKubeClient(kubeconfig, master) if err != nil { log.Errorf("Failed to create client: %v", err) return 1 diff --git a/pkg/k8sapi/discovery.go b/pkg/k8sapi/discovery.go index 8befe563934..03f11ef918b 100644 --- a/pkg/k8sapi/discovery.go +++ b/pkg/k8sapi/discovery.go @@ -8,19 +8,20 @@ import ( "sync" "time" + "github.com/operator-framework/operator-sdk/pkg/k8sclient" "github.com/pkg/errors" log "github.com/cihub/seelog" clientset "k8s.io/client-go/kubernetes" - "github.com/operator-framework/operator-sdk/pkg/k8sclient" v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/fields" "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apimachinery/pkg/util/wait" "k8s.io/client-go/kubernetes" "k8s.io/client-go/tools/cache" + "k8s.io/client-go/tools/clientcmd" "k8s.io/client-go/util/workqueue" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -80,8 +81,21 @@ func NewController(clientset kubernetes.Interface) *Controller { } // CreateKubeClient creates a k8s client -func CreateKubeClient() (clientset.Interface, error) { - kubeClient := k8sclient.GetKubeClient() +func CreateKubeClient(kubeconfig, master string) (clientset.Interface, error) { + var kubeClient clientset.Interface + if master == "" && kubeconfig == "" { + kubeClient = k8sclient.GetKubeClient() + } else { + config, err := clientcmd.BuildConfigFromFlags(master, kubeconfig) + if err != nil { + panic(err) + } + kubeClient, err = clientset.NewForConfig(config) + if err != nil { + panic(err) + } + } + // Informers don't seem to do a good job logging error messages when it // can't reach the server, making debugging hard. This makes it easier to // figure out if apiserver is configured incorrectly.