From 2e2a81578bb69880c668da409217ec4c52d7ee10 Mon Sep 17 00:00:00 2001 From: Ghe Rivero Date: Thu, 6 Jul 2017 13:48:24 +0200 Subject: [PATCH] Add node-name flag to `join` phase Allow to specify a node-name instead of relaying in `os.Hostname()` This is useful where kubelet use the name given by the cloud-provider to register the node. Partially fix: kubernetes/kubeadm#64 --- cmd/kubeadm/app/apis/kubeadm/types.go | 1 + .../app/apis/kubeadm/v1alpha1/types.go | 1 + cmd/kubeadm/app/cmd/join.go | 12 ++++++-- cmd/kubeadm/test/cmd/join_test.go | 28 +++++++++++++++++++ 4 files changed, 39 insertions(+), 3 deletions(-) diff --git a/cmd/kubeadm/app/apis/kubeadm/types.go b/cmd/kubeadm/app/apis/kubeadm/types.go index d5885fbd6bb..e7c39a33d3f 100644 --- a/cmd/kubeadm/app/apis/kubeadm/types.go +++ b/cmd/kubeadm/app/apis/kubeadm/types.go @@ -93,6 +93,7 @@ type NodeConfiguration struct { DiscoveryToken string // Currently we only pay attention to one api server but hope to support >1 in the future DiscoveryTokenAPIServers []string + NodeName string TLSBootstrapToken string Token string } diff --git a/cmd/kubeadm/app/apis/kubeadm/v1alpha1/types.go b/cmd/kubeadm/app/apis/kubeadm/v1alpha1/types.go index b555cd3fa36..ddb8af9418c 100644 --- a/cmd/kubeadm/app/apis/kubeadm/v1alpha1/types.go +++ b/cmd/kubeadm/app/apis/kubeadm/v1alpha1/types.go @@ -85,6 +85,7 @@ type NodeConfiguration struct { DiscoveryFile string `json:"discoveryFile"` DiscoveryToken string `json:"discoveryToken"` DiscoveryTokenAPIServers []string `json:"discoveryTokenAPIServers"` + NodeName string `json:"nodeName"` TLSBootstrapToken string `json:"tlsBootstrapToken"` Token string `json:"token"` } diff --git a/cmd/kubeadm/app/cmd/join.go b/cmd/kubeadm/app/cmd/join.go index 390303459fd..ff617f2f1e2 100644 --- a/cmd/kubeadm/app/cmd/join.go +++ b/cmd/kubeadm/app/cmd/join.go @@ -112,6 +112,9 @@ func NewCmdJoin(out io.Writer) *cobra.Command { cmd.PersistentFlags().StringVar( &cfg.DiscoveryToken, "discovery-token", "", "A token used to validate cluster information fetched from the master") + cmd.PersistentFlags().StringVar( + &cfg.NodeName, "node-name", "", + "Specify the node name") cmd.PersistentFlags().StringVar( &cfg.TLSBootstrapToken, "tls-bootstrap-token", "", "A token used for TLS bootstrapping") @@ -175,9 +178,12 @@ func (j *Join) Run(out io.Writer) error { return err } - hostname, err := os.Hostname() - if err != nil { - return err + hostname := j.cfg.NodeName + if hostname == "" { + hostname, err = os.Hostname() + if err != nil { + return err + } } client, err := kubeconfigutil.KubeConfigToClientSet(cfg) if err != nil { diff --git a/cmd/kubeadm/test/cmd/join_test.go b/cmd/kubeadm/test/cmd/join_test.go index 5d4214f8bbe..5d73178fe57 100644 --- a/cmd/kubeadm/test/cmd/join_test.go +++ b/cmd/kubeadm/test/cmd/join_test.go @@ -105,6 +105,34 @@ func TestCmdJoinDiscoveryToken(t *testing.T) { } } +func TestCmdJoinNodeName(t *testing.T) { + if *kubeadmCmdSkip { + t.Log("kubeadm cmd tests being skipped") + t.Skip() + } + + var initTest = []struct { + args string + expected bool + }{ + {"--node-name=foobar", false}, + } + + for _, rt := range initTest { + _, _, actual := RunCmd(*kubeadmPath, "join", rt.args, "--skip-preflight-checks") + if (actual == nil) != rt.expected { + t.Errorf( + "failed CmdJoinNodeName running 'kubeadm join %s' with an error: %v\n\texpected: %t\n\t actual: %t", + rt.args, + actual, + rt.expected, + (actual == nil), + ) + } + kubeadmReset() + } +} + func TestCmdJoinTLSBootstrapToken(t *testing.T) { if *kubeadmCmdSkip { t.Log("kubeadm cmd tests being skipped")