mirror of https://github.com/k3s-io/k3s
Handler error when kubeconfig file not exist on kubeadm reset
parent
0ca67bde54
commit
5e31a6bb74
|
@ -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 {
|
||||||
|
|
|
@ -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"),
|
||||||
|
|
Loading…
Reference in New Issue