diff --git a/cmd/minikube/cmd/ssh.go b/cmd/minikube/cmd/ssh.go index b4158252e00f6a48134e5a2c83044a04c2a01c23..d7e65b65215aa502c245863e32fd3a809d2f5c7d 100644 --- a/cmd/minikube/cmd/ssh.go +++ b/cmd/minikube/cmd/ssh.go @@ -45,7 +45,7 @@ var sshCmd = &cobra.Command{ } if host.Driver.DriverName() == "none" { console.Fatal(`'none' driver does not support 'minikube ssh' command`) - os.Exit(0) + os.Exit(1) } err = cluster.CreateSSHShell(api, args) if err != nil { diff --git a/cmd/minikube/cmd/start.go b/cmd/minikube/cmd/start.go index bf16563129840c3f6cdc03dc6f4416dd37f294dc..5abbf81c631d439a7bcc4c77ca45c97c3ac3aa55 100644 --- a/cmd/minikube/cmd/start.go +++ b/cmd/minikube/cmd/start.go @@ -360,14 +360,20 @@ func validateNetwork(h *host.Host) string { if err != nil { reportErrAndExit("Unable to get VM IP address", err) } - console.OutStyle("connectivity", "%q IP address is %s.", cfg.GetMachineName(), ip) + console.OutStyle("connectivity", "%q IP address is %s", cfg.GetMachineName(), ip) - // Here is where we should be checking connectivity to/from the VM + optSeen := false for _, k := range []string{"HTTP_PROXY", "HTTPS_PROXY", "NO_PROXY"} { if v := os.Getenv(k); v != "" { + if !optSeen { + console.OutStyle("internet", "Found network options:") + optSeen = true + } console.OutStyle("option", "%s=%s", k, v) } } + + // Here is where we should be checking connectivity to/from the VM return ip } diff --git a/cmd/minikube/cmd/update-context.go b/cmd/minikube/cmd/update-context.go index 4ad4977cedd327f6d4424c48076db62816fb46ec..cd65c85ad18831c29c1a7bda3ca541a5fc4d2149 100644 --- a/cmd/minikube/cmd/update-context.go +++ b/cmd/minikube/cmd/update-context.go @@ -49,15 +49,15 @@ var updateContextCmd = &cobra.Command{ glog.Errorln("Error host driver ip status:", err) cmdUtil.MaybeReportErrorAndExit(err) } - ok, err := kcfg.UpdateKubeconfigIP(ip, constants.KubeconfigPath, machineName) + updated, err := kcfg.UpdateKubeconfigIP(ip, constants.KubeconfigPath, machineName) if err != nil { glog.Errorln("Error kubeconfig status:", err) cmdUtil.MaybeReportErrorAndExit(err) } - if ok { - console.Fatal("Reconfigured kubeconfig IP, now pointing at %s", ip) + if updated { + console.OutStyle("celebrate", "IP has been updated to point at %s", ip) } else { - console.OutStyle("celebrate", "Kubeconfig IP has been updated to point at %s", ip) + console.OutStyle("meh", "IP was already correctly configured for %s", ip) } }, diff --git a/cmd/minikube/main.go b/cmd/minikube/main.go index 4eae8bd40d58a4454bc5b8f73e349e6364ff52bc..7c6d5865c7cb6a6fa54c0651510086e9d57f49df 100644 --- a/cmd/minikube/main.go +++ b/cmd/minikube/main.go @@ -40,9 +40,5 @@ func main() { } console.SetOutFile(os.Stdout) console.SetErrFile(os.Stderr) - err := console.SetPreferredLanguage(os.Getenv("LANG")) - if err != nil { - glog.Warningf("unable to detect language: %v", err) - } cmd.Execute() } diff --git a/pkg/minikube/bootstrapper/command_runner.go b/pkg/minikube/bootstrapper/command_runner.go index b86a47261293c392aa8eda4e4d53a9a089df34d8..6f27ff15f725e1b6af67cadbc106dc7b3f1853f2 100644 --- a/pkg/minikube/bootstrapper/command_runner.go +++ b/pkg/minikube/bootstrapper/command_runner.go @@ -34,7 +34,7 @@ type CommandRunner interface { // // var b bytes.Buffer // CombinedOutput(cmd, &b) - // console.Fatal(b.Bytes()) + // fmt.Println(b.Bytes()) // // Or, you can set out to os.Stdout, the command output and // error would show on your terminal immediately before you diff --git a/pkg/minikube/console/console.go b/pkg/minikube/console/console.go index ab063fedc9f1f6ff4498f9bca7fb43e446436453..a5a7ea7d6692e07100d8f5c04773ca20b057a5d1 100644 --- a/pkg/minikube/console/console.go +++ b/pkg/minikube/console/console.go @@ -153,11 +153,13 @@ func SetPreferredLanguageTag(l language.Tag) { // SetPreferredLanguage configures which language future messages should use, based on a LANG string. func SetPreferredLanguage(s string) error { + // "C" is commonly used to denote a neutral POSIX locale. See http://pubs.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap07.html#tag_07_02 if s == "" || s == "C" { SetPreferredLanguageTag(defaultLanguage) return nil } - // Ignore encoding preferences: we always output utf8. Handles "de_DE.utf8" + // Handles "de_DE" or "de_DE.utf8" + // We don't process encodings, since Rob Pike invented utf8 and we're mostly stuck with it. parts := strings.Split(s, ".") l, err := language.Parse(parts[0]) if err != nil { @@ -187,25 +189,22 @@ func wantsColor(fd uintptr) bool { // // MINIKUBE_IN_COLOR=[1, T, true, TRUE] // MINIKUBE_IN_COLOR=[0, f, false, FALSE] + // + // If unset, we try to automatically determine suitability from the environment. val := os.Getenv(OverrideEnv) if val != "" { + glog.Infof("%s=%q\n", OverrideEnv, os.Getenv(OverrideEnv)) override, err := strconv.ParseBool(val) if err != nil { + // That's OK, we will just fall-back to automatic detection. glog.Errorf("ParseBool(%s): %v", OverrideEnv, err) + } else { + return override } - return override - } - - glog.Infof("%s=%q\n", OverrideEnv, os.Getenv(OverrideEnv)) - switch os.Getenv(OverrideEnv) { - case "0": - return false - case "1": - return true } term := os.Getenv("TERM") - // As in: term-256color + // Example: term-256color if !strings.Contains(term, "color") { glog.Infof("TERM=%s, which probably does not support color", term) return false diff --git a/pkg/minikube/console/style.go b/pkg/minikube/console/style.go index 1d778ab910767e5ed580138c121fbf4acefb5faf..4ad047180084735b0a747d0c8ec2dd0caabe00ea 100644 --- a/pkg/minikube/console/style.go +++ b/pkg/minikube/console/style.go @@ -33,48 +33,49 @@ type style struct { // styles is a map of style name to style struct // For consistency, ensure that emojis added render with the same width across platforms. var styles = map[string]style{ - "happy": {Prefix: "๐Ÿ˜„"}, - "success": {Prefix: "โœ…"}, - "failure": {Prefix: "โŒ"}, - "conflict": {Prefix: "๐Ÿ’ฅ"}, - "fatal": {Prefix: "๐Ÿ’ฃ"}, - "notice": {Prefix: "๐Ÿ“Œ"}, - "ready": {Prefix: "๐Ÿ„"}, - "restarting": {Prefix: "๐Ÿ”„"}, - "stopping": {Prefix: "โœ‹"}, - "stopped": {Prefix: "๐Ÿ›‘"}, - "warning": {Prefix: "โš ๏ธ"}, - "waiting": {Prefix: "โŒ›"}, - "usage": {Prefix: "๐Ÿ’ก"}, - "launch": {Prefix: "๐Ÿš€"}, - "thumbs-up": {Prefix: "๐Ÿ‘"}, - "option": {Prefix: " โ–ช "}, - "crushed": {Prefix: "๐Ÿ’”"}, + "happy": {Prefix: "๐Ÿ˜„ "}, + "success": {Prefix: "โœ… "}, + "failure": {Prefix: "โŒ "}, + "conflict": {Prefix: "๐Ÿ’ฅ "}, + "fatal": {Prefix: "๐Ÿ’ฃ "}, + "notice": {Prefix: "๐Ÿ“Œ "}, + "ready": {Prefix: "๐Ÿ„ "}, + "restarting": {Prefix: "๐Ÿ”„ "}, + "stopping": {Prefix: "โœ‹ "}, + "stopped": {Prefix: "๐Ÿ›‘ "}, + "warning": {Prefix: "โš ๏ธ "}, + "waiting": {Prefix: "โŒ› "}, + "usage": {Prefix: "๐Ÿ’ก "}, + "launch": {Prefix: "๐Ÿš€ "}, + "thumbs-up": {Prefix: "๐Ÿ‘ "}, + "option": {Prefix: " โ–ช "}, // Indented bullet + "crushed": {Prefix: "๐Ÿ’” "}, // Specialized purpose styles - "iso-download": {Prefix: "๐Ÿ’ฟ"}, - "file-download": {Prefix: "๐Ÿ’พ"}, - "caching": {Prefix: "๐Ÿคน"}, - "starting-vm": {Prefix: "๐Ÿ”ฅ"}, - "starting-none": {Prefix: "๐Ÿคน"}, - "deleting-vm": {Prefix: "๐Ÿ”ฅ"}, - "copying": {Prefix: "โœจ"}, - "connectivity": {Prefix: "๐Ÿ“ถ"}, - "mounting": {Prefix: "๐Ÿ“"}, - "celebrate": {Prefix: "๐ŸŽ‰"}, - "container-runtime": {Prefix: "๐ŸŽ"}, - "Docker": {Prefix: "๐Ÿณ"}, - "CRIO": {Prefix: "๐ŸŽ"}, // This should be a snow-flake, but the emoji has a strange width on macOS - "containerd": {Prefix: "๐Ÿ“ฆ"}, - "permissions": {Prefix: "๐Ÿ”‘"}, - "enabling": {Prefix: "๐Ÿ”Œ"}, - "pulling": {Prefix: "๐Ÿšœ"}, - "verifying": {Prefix: "๐Ÿค”"}, - "verifying-noline": {Prefix: "๐Ÿค”", OmitNewline: true}, - "kubectl": {Prefix: "๐Ÿ’—"}, - "meh": {Prefix: "๐Ÿ™„"}, - "embarassed": {Prefix: "๐Ÿคฆ"}, - "tip": {Prefix: "๐Ÿ’ก"}, + "iso-download": {Prefix: "๐Ÿ’ฟ "}, + "file-download": {Prefix: "๐Ÿ’พ "}, + "caching": {Prefix: "๐Ÿคน "}, + "starting-vm": {Prefix: "๐Ÿ”ฅ "}, + "starting-none": {Prefix: "๐Ÿคน "}, + "deleting-vm": {Prefix: "๐Ÿ”ฅ "}, + "copying": {Prefix: "โœจ "}, + "connectivity": {Prefix: "๐Ÿ“ถ "}, + "internet": {Prefix: "๐ŸŒ "}, + "mounting": {Prefix: "๐Ÿ“ "}, + "celebrate": {Prefix: "๐ŸŽ‰ "}, + "container-runtime": {Prefix: "๐ŸŽ "}, + "Docker": {Prefix: "๐Ÿณ "}, + "CRIO": {Prefix: "๐ŸŽ "}, // This should be a snow-flake, but the emoji has a strange width on macOS + "containerd": {Prefix: "๐Ÿ“ฆ "}, + "permissions": {Prefix: "๐Ÿ”‘ "}, + "enabling": {Prefix: "๐Ÿ”Œ "}, + "pulling": {Prefix: "๐Ÿšœ "}, + "verifying": {Prefix: "๐Ÿค” "}, + "verifying-noline": {Prefix: "๐Ÿค” ", OmitNewline: true}, + "kubectl": {Prefix: "๐Ÿ’— "}, + "meh": {Prefix: "๐Ÿ™„ "}, + "embarassed": {Prefix: "๐Ÿคฆ "}, + "tip": {Prefix: "๐Ÿ’ก "}, } // Add a prefix to a string @@ -83,7 +84,7 @@ func applyPrefix(prefix, format string) string { return format } // TODO(tstromberg): Ensure compatibility with RTL languages. - return prefix + " " + format + return prefix + format } // Apply styling to a format string