Skip to content

Commit 18250dd

Browse files
committed
make error message more clear
1 parent bd4e43f commit 18250dd

File tree

4 files changed

+71
-21
lines changed

4 files changed

+71
-21
lines changed

cmd/minikube/cmd/config/disable.go

+5-2
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,15 @@ var addonsDisableCmd = &cobra.Command{
3333
if len(args) != 1 {
3434
exit.Message(reason.Usage, "usage: minikube addons disable ADDON_NAME")
3535
}
36-
36+
err := addons.CheckPaused(ClusterFlagValue(), "false")
37+
if err != nil {
38+
exit.Error(reason.InternalAddonDisablePaused, "disable failed", err)
39+
}
3740
addon := args[0]
3841
if addon == "heapster" {
3942
exit.Message(reason.AddonUnsupported, "The heapster addon is depreciated. please try to disable metrics-server instead")
4043
}
41-
err := addons.SetAndSave(ClusterFlagValue(), addon, "false")
44+
err = addons.SetAndSave(ClusterFlagValue(), addon, "false")
4245
if err != nil {
4346
exit.Error(reason.InternalAddonDisable, "disable failed", err)
4447
}

cmd/minikube/cmd/config/enable.go

+5-1
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,10 @@ var addonsEnableCmd = &cobra.Command{
3939
if len(args) != 1 {
4040
exit.Message(reason.Usage, "usage: minikube addons enable ADDON_NAME")
4141
}
42+
err := addons.CheckPaused(ClusterFlagValue(), "true")
43+
if err != nil {
44+
exit.Error(reason.InternalAddonEnablePaused, "enabled failed", err)
45+
}
4246
addon := args[0]
4347
isDeprecated, replacement, msg := addons.Deprecations(addon)
4448
if isDeprecated && replacement == "" {
@@ -68,7 +72,7 @@ You can view the list of minikube maintainers at: https://github.com/kubernetes/
6872
}
6973
viper.Set(config.AddonImages, images)
7074
viper.Set(config.AddonRegistries, registries)
71-
err := addons.SetAndSave(ClusterFlagValue(), addon, "true")
75+
err = addons.SetAndSave(ClusterFlagValue(), addon, "true")
7276
if err != nil && !errors.Is(err, addons.ErrSkipThisAddon) {
7377
exit.Error(reason.InternalAddonEnable, "enable failed", err)
7478
}

pkg/addons/addons.go

+56-18
Original file line numberDiff line numberDiff line change
@@ -281,24 +281,6 @@ func EnableOrDisableAddon(cc *config.ClusterConfig, name string, val string) err
281281
return errors.Wrap(err, "command runner")
282282
}
283283

284-
crName := cc.KubernetesConfig.ContainerRuntime
285-
cr, err := cruntime.New(cruntime.Config{Type: crName, Runner: runner})
286-
if err != nil {
287-
return errors.Wrap(err, "container runtime")
288-
}
289-
runtimePaused, err := cluster.CheckIfPaused(cr, []string{"kube-system"})
290-
if err != nil {
291-
return errors.Wrap(err, "check paused")
292-
}
293-
if runtimePaused {
294-
action := "disable"
295-
if enable {
296-
action = "enable"
297-
}
298-
msg := fmt.Sprintf("can't %s addon on a paused cluster, please unpause the cluster firstly.", action)
299-
out.Styled(style.Shrug, msg)
300-
return errors.New(msg)
301-
}
302284
bail, err := addonSpecificChecks(cc, name, enable, runner)
303285
if err != nil {
304286
return err
@@ -590,3 +572,59 @@ func UpdateConfig(cc *config.ClusterConfig, enabled []string) {
590572
}
591573
}
592574
}
575+
576+
// CheckPaused checks whether the cluster is paused before enable/disable an addon.
577+
func CheckPaused(profile string, val string) error {
578+
klog.Info("checking whether the cluster is paused")
579+
580+
enable, err := strconv.ParseBool(val)
581+
if err != nil {
582+
return errors.Wrapf(err, "parsing bool: %s", val)
583+
}
584+
585+
cc, err := config.Load(profile)
586+
if err != nil {
587+
return errors.Wrap(err, "loading profile")
588+
}
589+
590+
api, err := machine.NewAPIClient()
591+
if err != nil {
592+
return errors.Wrap(err, "machine client")
593+
}
594+
defer api.Close()
595+
596+
cp, err := config.PrimaryControlPlane(cc)
597+
if err != nil {
598+
exit.Error(reason.GuestCpConfig, "Error getting primary control plane", err)
599+
}
600+
601+
host, err := machine.LoadHost(api, config.MachineName(*cc, cp))
602+
if err != nil {
603+
exit.Error(reason.GuestLoadHost, "Error getting host", err)
604+
}
605+
606+
runner, err := machine.CommandRunner(host)
607+
if err != nil {
608+
return errors.Wrap(err, "command runner")
609+
}
610+
611+
crName := cc.KubernetesConfig.ContainerRuntime
612+
cr, err := cruntime.New(cruntime.Config{Type: crName, Runner: runner})
613+
if err != nil {
614+
return errors.Wrap(err, "container runtime")
615+
}
616+
runtimePaused, err := cluster.CheckIfPaused(cr, []string{"kube-system"})
617+
if err != nil {
618+
return errors.Wrap(err, "check paused")
619+
}
620+
if runtimePaused {
621+
action := "disable"
622+
if enable {
623+
action = "enable"
624+
}
625+
msg := fmt.Sprintf("can't %s addon on a paused cluster, please unpause the cluster firstly.", action)
626+
out.Styled(style.Shrug, msg)
627+
return errors.New(msg)
628+
}
629+
return nil
630+
}

pkg/minikube/reason/reason.go

+5
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,11 @@ var (
8080
InternalAddonDisable = Kind{ID: "MK_ADDON_DISABLE", ExitCode: ExProgramError}
8181
// minikube could not enable an addon, e.g. dashboard addon
8282
InternalAddonEnable = Kind{ID: "MK_ADDON_ENABLE", ExitCode: ExProgramError}
83+
// minikube could not enable an addon on a paused cluster
84+
InternalAddonEnablePaused = Kind{ID: "MK_ADDON_ENABLE_PAUSED", ExitCode: ExProgramConflict}
85+
// minikube could not disable an addon on a paused cluster
86+
InternalAddonDisablePaused = Kind{ID: "MK_ADDON_DISABLE_PAUSED", ExitCode: ExProgramConflict}
87+
8388
// minikube failed to update internal configuration, such as the cached images config map
8489
InternalAddConfig = Kind{ID: "MK_ADD_CONFIG", ExitCode: ExProgramError}
8590
// minikube failed to create a cluster bootstrapper

0 commit comments

Comments
 (0)