From a519335303fcb01c1e925dfa0ea0801d3ae5dac5 Mon Sep 17 00:00:00 2001 From: Paulo Pires Date: Fri, 6 Jan 2017 12:08:34 +0000 Subject: [PATCH] kubeadm: added HTTPS discovery. Fixes kubernetes/kubeadm#94 --- cmd/kubeadm/app/discovery/BUILD | 1 + cmd/kubeadm/app/discovery/discovery.go | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/cmd/kubeadm/app/discovery/BUILD b/cmd/kubeadm/app/discovery/BUILD index 07d46ca8df8..66097f56fc0 100644 --- a/cmd/kubeadm/app/discovery/BUILD +++ b/cmd/kubeadm/app/discovery/BUILD @@ -20,6 +20,7 @@ go_library( "//cmd/kubeadm/app/discovery/file:go_default_library", "//cmd/kubeadm/app/discovery/https:go_default_library", "//cmd/kubeadm/app/discovery/token:go_default_library", + "//pkg/client/unversioned/clientcmd:go_default_library", "//pkg/client/unversioned/clientcmd/api:go_default_library", "//vendor:github.com/spf13/pflag", ], diff --git a/cmd/kubeadm/app/discovery/discovery.go b/cmd/kubeadm/app/discovery/discovery.go index 332f54291b9..76842e8aadc 100644 --- a/cmd/kubeadm/app/discovery/discovery.go +++ b/cmd/kubeadm/app/discovery/discovery.go @@ -18,8 +18,11 @@ package discovery import ( "fmt" + "io/ioutil" + "net/http" kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm" + "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" clientcmdapi "k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api" ) @@ -28,6 +31,8 @@ func For(d kubeadmapi.Discovery) (*clientcmdapi.Config, error) { switch { case d.File != nil: return runFileDiscovery(d.File) + case d.HTTPS != nil: + return runHTTPSDiscovery(d.HTTPS) default: return nil, fmt.Errorf("Couldn't find a valid discovery configuration. Please provide one.") } @@ -37,5 +42,20 @@ func For(d kubeadmapi.Discovery) (*clientcmdapi.Config, error) { func runFileDiscovery(fd *kubeadmapi.FileDiscovery) (*clientcmdapi.Config, error) { return clientcmd.LoadFromFile(fd.Path) } + +// runHTTPSDiscovery executes HTTPS-based discovery. +func runHTTPSDiscovery(hd *kubeadmapi.HTTPSDiscovery) (*clientcmdapi.Config, error) { + response, err := http.Get(hd.URL) + if err != nil { + return nil, err } + defer response.Body.Close() + + kubeconfig, err := ioutil.ReadAll(response.Body) + if err != nil { + return nil, err + } + + return clientcmd.Load(kubeconfig) +} }