Handler error when kubeconfig file not exist on kubeadm reset

pull/58/head
Yago Nobre 2018-11-09 15:39:17 -02:00
parent 0ca67bde54
commit 5e31a6bb74
No known key found for this signature in database
GPG Key ID: 09AE6CEC2B8E9DD3
2 changed files with 33 additions and 13 deletions

View File

@ -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 {

View File

@ -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"),