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 ( import (
"bufio" "bufio"
"errors"
"fmt" "fmt"
"io" "io"
"os" "os"
@ -26,6 +25,7 @@ import (
"path/filepath" "path/filepath"
"strings" "strings"
"github.com/pkg/errors"
"github.com/spf13/cobra" "github.com/spf13/cobra"
"k8s.io/klog" "k8s.io/klog"
@ -51,6 +51,7 @@ func NewCmdReset(in io.Reader, out io.Writer) *cobra.Command {
var criSocketPath string var criSocketPath string
var ignorePreflightErrors []string var ignorePreflightErrors []string
var forceReset bool var forceReset bool
var client clientset.Interface
kubeConfigFile := kubeadmconstants.GetAdminKubeConfigPath() kubeConfigFile := kubeadmconstants.GetAdminKubeConfigPath()
cmd := &cobra.Command{ cmd := &cobra.Command{
@ -61,8 +62,10 @@ func NewCmdReset(in io.Reader, out io.Writer) *cobra.Command {
kubeadmutil.CheckErr(err) kubeadmutil.CheckErr(err)
kubeConfigFile = cmdutil.FindExistingKubeConfig(kubeConfigFile) kubeConfigFile = cmdutil.FindExistingKubeConfig(kubeConfigFile)
client, err := getClientset(kubeConfigFile, false) if _, err := os.Stat(kubeConfigFile); !os.IsNotExist(err) {
kubeadmutil.CheckErr(err) client, err = getClientset(kubeConfigFile, false)
kubeadmutil.CheckErr(err)
}
r, err := NewReset(in, ignorePreflightErrorsSet, forceReset, certsDir, criSocketPath) r, err := NewReset(in, ignorePreflightErrorsSet, forceReset, certsDir, criSocketPath)
kubeadmutil.CheckErr(err) kubeadmutil.CheckErr(err)
@ -189,11 +192,13 @@ func getEtcdDataDir(manifestPath string, client clientset.Interface) (string, er
const etcdVolumeName = "etcd-data" const etcdVolumeName = "etcd-data"
var dataDir string var dataDir string
cfg, err := configutil.FetchConfigFromFileOrCluster(client, os.Stdout, "reset", "", false) if client != nil {
if err == nil { cfg, err := configutil.FetchConfigFromFileOrCluster(client, os.Stdout, "reset", "", false)
return cfg.Etcd.Local.DataDir, nil 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) etcdPod, err := utilstaticpod.ReadStaticPodFromDisk(manifestPath)
if err != nil { if err != nil {

View File

@ -273,30 +273,38 @@ func TestGetEtcdDataDir(t *testing.T) {
podYaml string podYaml string
expectErr bool expectErr bool
writeManifest bool writeManifest bool
validClient bool
}{ }{
"non-existent file returns error": { "non-existent file returns error": {
dataDir: "",
podYaml: "",
expectErr: true, expectErr: true,
writeManifest: false, writeManifest: false,
validClient: true,
}, },
"return etcd data dir": { "return etcd data dir": {
dataDir: "/path/to/etcd", dataDir: "/path/to/etcd",
podYaml: etcdPod, podYaml: etcdPod,
expectErr: false, expectErr: false,
writeManifest: true, writeManifest: true,
validClient: true,
}, },
"invalid etcd pod": { "invalid etcd pod": {
dataDir: "",
podYaml: etcdPodInvalid, podYaml: etcdPodInvalid,
expectErr: true, expectErr: true,
writeManifest: true, writeManifest: true,
validClient: true,
}, },
"etcd pod spec without data volume": { "etcd pod spec without data volume": {
dataDir: "",
podYaml: etcdPodWithoutDataVolume, podYaml: etcdPodWithoutDataVolume,
expectErr: true, expectErr: true,
writeManifest: 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() var dataDir string
dataDir, err := getEtcdDataDir(manifestPath, client) 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 { if (err != nil) != test.expectErr {
t.Fatalf(dedent.Dedent( t.Fatalf(dedent.Dedent(
"getEtcdDataDir failed\n%s\nexpected error: %t\n\tgot: %t\nerror: %v"), "getEtcdDataDir failed\n%s\nexpected error: %t\n\tgot: %t\nerror: %v"),