Skip to content

docker-env & podman-env: silent output when talking to a shell #10763

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Mar 10, 2021
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions cmd/minikube/cmd/docker-env.go
Original file line number Diff line number Diff line change
Expand Up @@ -260,6 +260,11 @@ var dockerEnvCmd = &cobra.Command{
return
}

if !out.IsTerminal(os.Stdout) {
out.SetSilent(true)
exit.SetShell(true)
}

cname := ClusterFlagValue()
co := mustload.Running(cname)
driverName := co.CP.Host.DriverName
Expand Down
5 changes: 5 additions & 0 deletions cmd/minikube/cmd/podman-env.go
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,11 @@ var podmanEnvCmd = &cobra.Command{
return
}

if !out.IsTerminal(os.Stdout) {
out.SetSilent(true)
exit.SetShell(true)
}

cname := ClusterFlagValue()
co := mustload.Running(cname)
driverName := co.CP.Host.DriverName
Expand Down
20 changes: 19 additions & 1 deletion pkg/minikube/exit/exit.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ limitations under the License.
package exit

import (
"fmt"
"os"
"runtime"

Expand All @@ -27,6 +28,15 @@ import (
"k8s.io/minikube/pkg/minikube/style"
)

var (
shell bool
)

// SetShell configures if we are doing a shell configuration or not
func SetShell(s bool) {
shell = s
}

// Message outputs a templated message and exits without interpretation
func Message(r reason.Kind, format string, args ...out.V) {
if r.ID == "" {
Expand Down Expand Up @@ -54,7 +64,15 @@ func Message(r reason.Kind, format string, args ...out.V) {
out.Error(r, "Exiting due to {{.fatal_code}}: {{.fatal_msg}}", args...)
}

os.Exit(r.ExitCode)
Code(r.ExitCode)
}

// Code will exit with a code
func Code(code int) {
if shell {
out.Output(os.Stdout, fmt.Sprintf("false exit code %d\n", code))
}
os.Exit(code)
}

// Advice is syntactic sugar to output a message with dynamically generated advice
Expand Down
3 changes: 1 addition & 2 deletions pkg/minikube/mustload/mustload.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ package mustload
import (
"fmt"
"net"
"os"

"github.com/docker/machine/libmachine"
"github.com/docker/machine/libmachine/host"
Expand Down Expand Up @@ -175,5 +174,5 @@ func ExampleCmd(cname string, action string) string {
func exitTip(action string, profile string, code int) {
command := ExampleCmd(profile, action)
out.Styled(style.Workaround, `To start a cluster, run: "{{.command}}"`, out.V{"command": command})
os.Exit(code)
exit.Code(code)
}
39 changes: 30 additions & 9 deletions pkg/minikube/out/out.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,8 @@ import (
// NOTE: If you do not want colorized output, set MINIKUBE_IN_STYLE=false in your environment.

var (
// silent will disable all output, if called from a script. Set using SetSilent()
silent bool
// outFile is where Out* functions send output to. Set using SetOutFile()
outFile fdWriter
// errFile is where Err* functions send output to. Set using SetErrFile()
Expand Down Expand Up @@ -122,6 +124,11 @@ func String(format string, a ...interface{}) {
// Flush log buffer so that output order makes sense
klog.Flush()

if silent {
klog.Infof(format, a...)
return
}

if outFile == nil {
klog.Warningf("[unset outFile]: %s", fmt.Sprintf(format, a...))
return
Expand All @@ -131,7 +138,13 @@ func String(format string, a ...interface{}) {
if spin.Active() {
spin.Stop()
}
_, err := fmt.Fprintf(outFile, format, a...)

Output(outFile, format, a...)
}

// Output writes a basic formatted string
func Output(file fdWriter, format string, a ...interface{}) {
_, err := fmt.Fprintf(file, format, a...)
if err != nil {
klog.Errorf("Fprintf failed: %v", err)
}
Expand All @@ -152,10 +165,7 @@ func spinnerString(format string, a ...interface{}) {
if spin.Active() {
spin.Stop()
}
_, err := fmt.Fprintf(outFile, format, a...)
if err != nil {
klog.Errorf("Fprintf failed: %v", err)
}
Output(outFile, format, a...)
// Start spinning at the end of the printed line
spin.Start()
}
Expand Down Expand Up @@ -194,10 +204,7 @@ func Err(format string, a ...interface{}) {
if spin.Active() {
spin.Stop()
}
_, err := fmt.Fprintf(errFile, format, a...)
if err != nil {
klog.Errorf("Fprint failed: %v", err)
}
Output(errFile, format, a...)
}

// ErrLn writes a basic formatted string with a newline to stderr
Expand Down Expand Up @@ -234,6 +241,20 @@ func FailureT(format string, a ...V) {
ErrT(style.Failure, format, a...)
}

// IsTerminal returns whether we have a terminal or not
func IsTerminal(w fdWriter) bool {
fd := w.Fd()
isT := isatty.IsTerminal(fd)
klog.Infof("isatty.IsTerminal(%d) = %v\n", fd, isT)
return isT
}

// SetSilent configures whether output is disabled or not
func SetSilent(q bool) {
klog.Infof("Setting silent to %v", q)
silent = q
}

// SetOutFile configures which writer standard output goes to.
func SetOutFile(w fdWriter) {
klog.Infof("Setting OutFile to fd %d ...", w.Fd())
Expand Down