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) +} }