diff --git a/Gopkg.lock b/Gopkg.lock index 90238efb4b..52ae1ac218 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -62,7 +62,7 @@ [[projects]] branch = "master" - digest = "1:fb48d4018740c1be15980ba42d2db10af1b5aa42251e7c0f97d4c32ecb24e4f9" + digest = "1:4f6afcf4ebe041b3d4aa7926d09344b48d2f588e1f957526bbbe54f9cbb366a1" name = "github.com/argoproj/pkg" packages = [ "errors", @@ -71,7 +71,7 @@ "time", ] pruneopts = "" - revision = "fb13aebbef1cc580a9f5bafa65bdad07fc89d803" + revision = "38dba6e98495680ff1f8225642b63db10a96bb06" [[projects]] digest = "1:d8a2bb36a048d1571bcc1aee208b61f39dc16c6c53823feffd37449dde162507" diff --git a/util/kube/ctl.go b/util/kube/ctl.go index 3c290a0090..dd8b890d7f 100644 --- a/util/kube/ctl.go +++ b/util/kube/ctl.go @@ -239,6 +239,18 @@ func (k KubectlCmd) ApplyResource(config *rest.Config, obj *unstructured.Unstruc return strings.Join(out, ". "), nil } +func convertKubectlError(err error) error { + errorStr := err.Error() + if cmdErr, ok := err.(*argoexec.CmdError); ok { + parts := []string{fmt.Sprintf("kubectl failed %s", cmdErr.Cause.Error())} + if cmdErr.Stderr != "" { + parts = append(parts, cleanKubectlOutput(cmdErr.Stderr)) + } + errorStr = strings.Join(parts, ": ") + } + return fmt.Errorf(errorStr) +} + func runKubectl(kubeconfigPath string, namespace string, args []string, manifestBytes []byte, dryRun bool) (string, error) { cmdArgs := append([]string{"--kubeconfig", kubeconfigPath, "-f", "-"}, args...) if namespace != "" { @@ -267,7 +279,7 @@ func runKubectl(kubeconfigPath string, namespace string, args []string, manifest cmd.Stdin = bytes.NewReader(manifestBytes) out, err := argoexec.RunCommandExt(cmd, config.CmdOpts()) if err != nil { - return "", fmt.Errorf(cleanKubectlOutput(err.Error())) + return "", convertKubectlError(err) } return out, nil } @@ -297,7 +309,7 @@ func (k KubectlCmd) ConvertToVersion(obj *unstructured.Unstructured, group strin cmd.Stdin = bytes.NewReader(manifestBytes) out, err := argoexec.RunCommandExt(cmd, config.CmdOpts()) if err != nil { - return nil, fmt.Errorf(cleanKubectlOutput(err.Error())) + return nil, convertKubectlError(err) } // NOTE: when kubectl convert runs against stdin (i.e. kubectl convert -f -), the output is // a unstructured list instead of an unstructured object