diff --git a/cmd/minikube/cmd/config/addons_list.go b/cmd/minikube/cmd/config/addons_list.go index 8a66f4c753..c73c914c96 100644 --- a/cmd/minikube/cmd/config/addons_list.go +++ b/cmd/minikube/cmd/config/addons_list.go @@ -136,7 +136,7 @@ var printAddonsJSON = func() { addonStatus, err := addonBundle.IsEnabled() if err != nil { - glog.Errorf("Unable to get addon status for {{.name}}: {{.error}}", err) + glog.Errorf("Unable to get addon status for %s: %v", addonName, err) continue } diff --git a/cmd/minikube/cmd/start.go b/cmd/minikube/cmd/start.go index 3469742d45..5643b7be20 100644 --- a/cmd/minikube/cmd/start.go +++ b/cmd/minikube/cmd/start.go @@ -46,8 +46,6 @@ import ( "github.com/spf13/viper" "golang.org/x/sync/errgroup" cmdcfg "k8s.io/minikube/cmd/minikube/cmd/config" - pkgaddons "k8s.io/minikube/pkg/addons" - "k8s.io/minikube/pkg/minikube/assets" "k8s.io/minikube/pkg/minikube/bootstrapper" "k8s.io/minikube/pkg/minikube/bootstrapper/bsutil" "k8s.io/minikube/pkg/minikube/bootstrapper/images" @@ -58,6 +56,7 @@ import ( "k8s.io/minikube/pkg/minikube/cruntime" "k8s.io/minikube/pkg/minikube/driver" "k8s.io/minikube/pkg/minikube/exit" + "k8s.io/minikube/pkg/addons" "k8s.io/minikube/pkg/minikube/kubeconfig" "k8s.io/minikube/pkg/minikube/localpath" "k8s.io/minikube/pkg/minikube/logs" @@ -105,7 +104,6 @@ const ( imageMirrorCountry = "image-mirror-country" mountString = "mount-string" disableDriverMounts = "disable-driver-mounts" - addons = "addons" cacheImages = "cache-images" uuid = "uuid" vpnkitSock = "hyperkit-vpnkit-sock" @@ -173,7 +171,7 @@ func initMinikubeFlags() { startCmd.Flags().String(containerRuntime, "docker", "The container runtime to be used (docker, crio, containerd).") startCmd.Flags().Bool(createMount, false, "This will start the mount daemon and automatically mount files into minikube.") startCmd.Flags().String(mountString, constants.DefaultMountDir+":/minikube-host", "The argument to pass the minikube mount command on start.") - startCmd.Flags().StringArrayVar(&addonList, addons, nil, "Enable addons. see `minikube addons list` for a list of valid addon names.") + startCmd.Flags().StringArrayVar(&addonList,"addons", nil, "Enable addons. see `minikube addons list` for a list of valid addon names.") startCmd.Flags().String(criSocket, "", "The cri socket path to be used.") startCmd.Flags().String(networkPlugin, "", "The name of the network plugin.") startCmd.Flags().Bool(enableDefaultCNI, false, "Enable the default CNI plugin (/etc/cni/net.d/k8s.conf). Used in conjunction with \"--network-plugin=cni\".") @@ -369,8 +367,8 @@ func runStart(cmd *cobra.Command, args []string) { bootstrapCluster(bs, cr, mRunner, mc, preExists, isUpgrade) configureMounts() - // enable addons with start command - enableAddons() + // enable addons + addons.Start(viper.GetString(config.MachineProfile), addonList) if err = cacheAndLoadImagesInConfig(); err != nil { out.T(out.FailureType, "Unable to load cached images from config file.") @@ -409,41 +407,6 @@ func cacheISO(cfg *config.MachineConfig, driverName string) { } } -func enableAddons() { - start := time.Now() - glog.Infof("enableAddons") - defer func() { - glog.Infof("enableAddons completed in %s", time.Since(start)) - }() - toEnable := []string{} - - // Apply addons that are enabled by default - for name, a := range assets.Addons { - enabled, err := a.IsEnabled() - if err != nil { - glog.Errorf("is-enabled failed for %q: %v", a.Name(), err) - continue - } - if enabled { - toEnable = append(toEnable, name) - } - } - - toEnable = append(toEnable, addonList...) - if len(toEnable) == 0 { - return - } - - out.T(out.AddonEnable, "Enabling addons: {{.addons}}", out.V{"addons": strings.Join(toEnable, ", ")}) - for _, a := range toEnable { - err := pkgaddons.Set(a, "true", viper.GetString(config.MachineProfile)) - if err != nil { - // Intentionally non-fatal - out.WarningT("Enabling '{{.name}}' returned an error: {{.error}}", out.V{"name": a, "error": err}) - } - } -} - func displayVersion(version string) { prefix := "" if viper.GetString(config.MachineProfile) != constants.DefaultMachineName { diff --git a/pkg/addons/addons.go b/pkg/addons/addons.go index dae1ef0c6c..2070da2ca2 100644 --- a/pkg/addons/addons.go +++ b/pkg/addons/addons.go @@ -21,6 +21,8 @@ import ( "os" "path" "strconv" + "strings" + "time" "github.com/golang/glog" "github.com/pkg/errors" @@ -167,7 +169,7 @@ func isAddonAlreadySet(addon *assets.Addon, enable bool) (bool, error) { addonStatus, err := addon.IsEnabled() if err != nil { - return false, errors.Wrap(err, "get the addon status") + return false, errors.Wrap(err, "addon is enabled") } if addonStatus && enable { @@ -255,3 +257,39 @@ func enableOrDisableStorageClasses(name, val, profile string) error { return enableOrDisableAddon(name, val, profile) } + +// Start enables the default addons for a profile, plus any additional +func Start(profile string, additional []string) { + start := time.Now() + glog.Infof("enableAddons") + defer func() { + glog.Infof("enableAddons completed in %s", time.Since(start)) + }() + toEnable := []string{} + + // Apply addons that are enabled by default + for name, a := range assets.Addons { + enabled, err := a.IsEnabled() + if err != nil { + glog.Errorf("is-enabled failed for %q: %v", a.Name(), err) + continue + } + if enabled { + toEnable = append(toEnable, name) + } + } + + toEnable = append(toEnable, additional...) + if len(toEnable) == 0 { + return + } + + out.T(out.AddonEnable, "Enabling addons: {{.addons}}", out.V{"addons": strings.Join(toEnable, ", ")}) + for _, a := range toEnable { + err := Set(a, "true", profile) + if err != nil { + // Intentionally non-fatal + out.WarningT("Enabling '{{.name}}' returned an error: {{.error}}", out.V{"name": a, "error": err}) + } + } +} diff --git a/pkg/minikube/assets/addons.go b/pkg/minikube/assets/addons.go index 6b18b810f6..14959a28ca 100644 --- a/pkg/minikube/assets/addons.go +++ b/pkg/minikube/assets/addons.go @@ -59,7 +59,7 @@ func (a *Addon) Name() string { func (a *Addon) IsEnabled() (bool, error) { c, err := config.Load(viper.GetString(config.MachineProfile)) if err != nil { - return false, err + return false, errors.Wrap(err, "load") } // Is this addon explicitly listed in their configuration?