From bac2291141ade625cafa31a68c077b6cb33db6b3 Mon Sep 17 00:00:00 2001 From: Mike Fedosin Date: Fri, 3 May 2019 20:42:03 +0200 Subject: [PATCH] Allow to define kubeconfig file for OpenStack cloud provider Now, to build a kubernetes client, provider uses only in-cluster config, but if kubelet is not running as a pod, then it doesn't work. This commit adds an ability to specify a path to the kubeconfig file if necessary. If no value was provided, then the provider falls back to in-cluster config. --- pkg/cloudprovider/providers/openstack/openstack.go | 10 ++++++---- pkg/volume/cinder/cinder_test.go | 1 + 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/pkg/cloudprovider/providers/openstack/openstack.go b/pkg/cloudprovider/providers/openstack/openstack.go index 775fc7899ba..a4a31cc5177 100644 --- a/pkg/cloudprovider/providers/openstack/openstack.go +++ b/pkg/cloudprovider/providers/openstack/openstack.go @@ -161,6 +161,7 @@ type Config struct { CAFile string `gcfg:"ca-file"` SecretName string `gcfg:"secret-name"` SecretNamespace string `gcfg:"secret-namespace"` + KubeconfigPath string `gcfg:"kubeconfig-path"` } LoadBalancer LoadBalancerOpts BlockStorage BlockStorageOpts @@ -238,6 +239,7 @@ func configFromEnv() (cfg Config, ok bool) { cfg.Global.SecretName = os.Getenv("SECRET_NAME") cfg.Global.SecretNamespace = os.Getenv("SECRET_NAMESPACE") + cfg.Global.KubeconfigPath = os.Getenv("KUBECONFIG_PATH") ok = cfg.Global.AuthURL != "" && cfg.Global.Username != "" && @@ -253,11 +255,10 @@ func configFromEnv() (cfg Config, ok bool) { return } -func createKubernetesClient() (*kubernetes.Clientset, error) { +func createKubernetesClient(kubeconfigPath string) (*kubernetes.Clientset, error) { klog.Info("Creating kubernetes API client.") - // create in-cluster config - cfg, err := clientcmd.BuildConfigFromFlags("", "") + cfg, err := clientcmd.BuildConfigFromFlags("", kubeconfigPath) if err != nil { return nil, err } @@ -280,8 +281,9 @@ func createKubernetesClient() (*kubernetes.Clientset, error) { func setConfigFromSecret(cfg *Config) error { secretName := cfg.Global.SecretName secretNamespace := cfg.Global.SecretNamespace + kubeconfigPath := cfg.Global.KubeconfigPath - k8sClient, err := createKubernetesClient() + k8sClient, err := createKubernetesClient(kubeconfigPath) if err != nil { return fmt.Errorf("failed to get kubernetes client: %v", err) } diff --git a/pkg/volume/cinder/cinder_test.go b/pkg/volume/cinder/cinder_test.go index 8767b8f0264..cf0efd7e58e 100644 --- a/pkg/volume/cinder/cinder_test.go +++ b/pkg/volume/cinder/cinder_test.go @@ -317,6 +317,7 @@ func getOpenstackConfig() openstack.Config { CAFile string `gcfg:"ca-file"` SecretName string `gcfg:"secret-name"` SecretNamespace string `gcfg:"secret-namespace"` + KubeconfigPath string `gcfg:"kubeconfig-path"` }{ Username: "user", Password: "pass",