Delete kubeconfig when a machine has been deleted
parent
68c546ff1d
commit
6505dfad62
|
|
@ -31,6 +31,7 @@ import (
|
|||
"k8s.io/minikube/pkg/minikube/constants"
|
||||
"k8s.io/minikube/pkg/minikube/exit"
|
||||
"k8s.io/minikube/pkg/minikube/machine"
|
||||
pkgutil "k8s.io/minikube/pkg/util"
|
||||
)
|
||||
|
||||
// deleteCmd represents the delete command
|
||||
|
|
@ -94,6 +95,11 @@ func runDelete(cmd *cobra.Command, args []string) {
|
|||
exit.WithError("Failed to remove profile", err)
|
||||
}
|
||||
console.OutStyle(console.Crushed, "The %q cluster has been deleted.", profile)
|
||||
|
||||
machineName := pkg_config.GetMachineName()
|
||||
if err := pkgutil.DeleteKubeConfigContext(constants.KubeconfigPath, machineName); err != nil {
|
||||
exit.WithError("update config", err)
|
||||
}
|
||||
}
|
||||
|
||||
func init() {
|
||||
|
|
|
|||
|
|
@ -344,3 +344,29 @@ func SetCurrentContext(kubeCfgPath, name string) error {
|
|||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// DeleteKubeConfigContext deletes the specified machine's kubeconfig context
|
||||
func DeleteKubeConfigContext(kubeCfgPath, machineName string) error {
|
||||
kcfg, err := ReadConfigOrNew(kubeCfgPath)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "Error getting kubeconfig status")
|
||||
}
|
||||
|
||||
if kcfg == nil || api.IsConfigEmpty(kcfg) {
|
||||
glog.V(2).Info("kubeconfig is empty")
|
||||
return nil
|
||||
}
|
||||
|
||||
delete(kcfg.Clusters, machineName)
|
||||
delete(kcfg.AuthInfos, machineName)
|
||||
delete(kcfg.Contexts, machineName)
|
||||
|
||||
if kcfg.CurrentContext == machineName {
|
||||
kcfg.CurrentContext = ""
|
||||
}
|
||||
|
||||
if err := WriteConfig(kcfg, kubeCfgPath); err != nil {
|
||||
return errors.Wrap(err, "writing kubeconfig")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -370,6 +370,30 @@ func TestGetIPFromKubeConfig(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
func TestDeleteKubeConfigContext(t *testing.T) {
|
||||
configFilename := tempFile(t, fakeKubeCfg)
|
||||
if err := DeleteKubeConfigContext(configFilename, "la-croix"); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
cfg, err := ReadConfigOrNew(configFilename)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
if len(cfg.AuthInfos) != 0 {
|
||||
t.Fail()
|
||||
}
|
||||
|
||||
if len(cfg.Clusters) != 0 {
|
||||
t.Fail()
|
||||
}
|
||||
|
||||
if len(cfg.Contexts) != 0 {
|
||||
t.Fail()
|
||||
}
|
||||
}
|
||||
|
||||
// tempFile creates a temporary with the provided bytes as its contents.
|
||||
// The caller is responsible for deleting file after use.
|
||||
func tempFile(t *testing.T, data []byte) string {
|
||||
|
|
|
|||
Loading…
Reference in New Issue