From 3e5b4066d2a067ef49f6ca39b3f84d2ebcad25ba Mon Sep 17 00:00:00 2001 From: KUOKA Yusuke Date: Tue, 24 Jul 2018 04:49:42 +0900 Subject: [PATCH] feat(helm): Detailed exit code for helm plugins (#4367) Resolves #4170 --- cmd/helm/helm.go | 7 ++++++- cmd/helm/load_plugins.go | 12 +++++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/cmd/helm/helm.go b/cmd/helm/helm.go index be3ced376..3f859392d 100644 --- a/cmd/helm/helm.go +++ b/cmd/helm/helm.go @@ -158,7 +158,12 @@ func init() { func main() { cmd := newRootCmd(os.Args[1:]) if err := cmd.Execute(); err != nil { - os.Exit(1) + switch e := err.(type) { + case pluginError: + os.Exit(e.code) + default: + os.Exit(1) + } } } diff --git a/cmd/helm/load_plugins.go b/cmd/helm/load_plugins.go index f4c97bde7..67de8bae5 100644 --- a/cmd/helm/load_plugins.go +++ b/cmd/helm/load_plugins.go @@ -22,12 +22,18 @@ import ( "os/exec" "path/filepath" "strings" + "syscall" "github.com/spf13/cobra" "k8s.io/helm/pkg/plugin" ) +type pluginError struct { + error + code int +} + // loadPlugins loads plugins into the command list. // // This follows a different pattern than the other commands because it has @@ -87,7 +93,11 @@ func loadPlugins(baseCmd *cobra.Command, out io.Writer) { if err := prog.Run(); err != nil { if eerr, ok := err.(*exec.ExitError); ok { os.Stderr.Write(eerr.Stderr) - return fmt.Errorf("plugin %q exited with error", md.Name) + status := eerr.Sys().(syscall.WaitStatus) + return pluginError{ + error: fmt.Errorf("plugin %q exited with error", md.Name), + code: status.ExitStatus(), + } } return err }