From 5e31a6bb744d829561c7ecde9166a3c0ac21203d Mon Sep 17 00:00:00 2001 From: Yago Nobre Date: Fri, 9 Nov 2018 15:39:17 -0200 Subject: [PATCH] Handler error when kubeconfig file not exist on kubeadm reset --- cmd/kubeadm/app/cmd/reset.go | 19 ++++++++++++------- cmd/kubeadm/app/cmd/reset_test.go | 27 +++++++++++++++++++++------ 2 files changed, 33 insertions(+), 13 deletions(-) diff --git a/cmd/kubeadm/app/cmd/reset.go b/cmd/kubeadm/app/cmd/reset.go index 94def13805..70f112ebc6 100644 --- a/cmd/kubeadm/app/cmd/reset.go +++ b/cmd/kubeadm/app/cmd/reset.go @@ -18,7 +18,6 @@ package cmd import ( "bufio" - "errors" "fmt" "io" "os" @@ -26,6 +25,7 @@ import ( "path/filepath" "strings" + "github.com/pkg/errors" "github.com/spf13/cobra" "k8s.io/klog" @@ -51,6 +51,7 @@ func NewCmdReset(in io.Reader, out io.Writer) *cobra.Command { var criSocketPath string var ignorePreflightErrors []string var forceReset bool + var client clientset.Interface kubeConfigFile := kubeadmconstants.GetAdminKubeConfigPath() cmd := &cobra.Command{ @@ -61,8 +62,10 @@ func NewCmdReset(in io.Reader, out io.Writer) *cobra.Command { kubeadmutil.CheckErr(err) kubeConfigFile = cmdutil.FindExistingKubeConfig(kubeConfigFile) - client, err := getClientset(kubeConfigFile, false) - kubeadmutil.CheckErr(err) + if _, err := os.Stat(kubeConfigFile); !os.IsNotExist(err) { + client, err = getClientset(kubeConfigFile, false) + kubeadmutil.CheckErr(err) + } r, err := NewReset(in, ignorePreflightErrorsSet, forceReset, certsDir, criSocketPath) kubeadmutil.CheckErr(err) @@ -189,11 +192,13 @@ func getEtcdDataDir(manifestPath string, client clientset.Interface) (string, er const etcdVolumeName = "etcd-data" var dataDir string - cfg, err := configutil.FetchConfigFromFileOrCluster(client, os.Stdout, "reset", "", false) - if err == nil { - return cfg.Etcd.Local.DataDir, nil + if client != nil { + cfg, err := configutil.FetchConfigFromFileOrCluster(client, os.Stdout, "reset", "", false) + if err == nil { + return cfg.Etcd.Local.DataDir, nil + } + klog.Warningf("[reset] Unable to fetch the kubeadm-config ConfigMap, using etcd pod spec as fallback: %v", err) } - klog.Warningf("[reset] Unable to fetch the kubeadm-config ConfigMap, using etcd pod spec as fallback: %v", err) etcdPod, err := utilstaticpod.ReadStaticPodFromDisk(manifestPath) if err != nil { diff --git a/cmd/kubeadm/app/cmd/reset_test.go b/cmd/kubeadm/app/cmd/reset_test.go index f15dec5039..063d59b6cb 100644 --- a/cmd/kubeadm/app/cmd/reset_test.go +++ b/cmd/kubeadm/app/cmd/reset_test.go @@ -273,30 +273,38 @@ func TestGetEtcdDataDir(t *testing.T) { podYaml string expectErr bool writeManifest bool + validClient bool }{ "non-existent file returns error": { - dataDir: "", - podYaml: "", expectErr: true, writeManifest: false, + validClient: true, }, "return etcd data dir": { dataDir: "/path/to/etcd", podYaml: etcdPod, expectErr: false, writeManifest: true, + validClient: true, }, "invalid etcd pod": { - dataDir: "", podYaml: etcdPodInvalid, expectErr: true, writeManifest: true, + validClient: true, }, "etcd pod spec without data volume": { - dataDir: "", podYaml: etcdPodWithoutDataVolume, expectErr: true, writeManifest: true, + validClient: true, + }, + "kubeconfig file doesn't exist": { + dataDir: "/path/to/etcd", + podYaml: etcdPod, + expectErr: false, + writeManifest: true, + validClient: false, }, } @@ -312,8 +320,15 @@ func TestGetEtcdDataDir(t *testing.T) { } } - client := clientsetfake.NewSimpleClientset() - dataDir, err := getEtcdDataDir(manifestPath, client) + var dataDir string + var err error + if test.validClient { + client := clientsetfake.NewSimpleClientset() + dataDir, err = getEtcdDataDir(manifestPath, client) + } else { + dataDir, err = getEtcdDataDir(manifestPath, nil) + } + if (err != nil) != test.expectErr { t.Fatalf(dedent.Dedent( "getEtcdDataDir failed\n%s\nexpected error: %t\n\tgot: %t\nerror: %v"),