Improve error handling in kyaml libraries

This commit is contained in:
Phillip Wittrock
2019-11-12 08:16:29 -08:00
parent 1bbd8b2c43
commit b473faccca
23 changed files with 483 additions and 96 deletions

View File

@@ -126,5 +126,5 @@ func (r *CatRunner) runE(c *cobra.Command, args []string) error {
Style: yaml.GetStyle(r.Styles...),
})
return kio.Pipeline{Inputs: inputs, Filters: fltr, Outputs: outputs}.Execute()
return handleError(c, kio.Pipeline{Inputs: inputs, Filters: fltr, Outputs: outputs}.Execute())
}

View File

@@ -85,8 +85,8 @@ func (r *CountRunner) runE(c *cobra.Command, args []string) error {
return nil
}))
}
return kio.Pipeline{
return handleError(c, kio.Pipeline{
Inputs: inputs,
Outputs: out,
}.Execute()
}.Execute())
}

View File

@@ -107,8 +107,8 @@ func (r *FmtRunner) runE(c *cobra.Command, args []string) error {
Writer: c.OutOrStdout(),
KeepReaderAnnotations: r.KeepAnnotations,
}
return kio.Pipeline{
Inputs: []kio.Reader{rw}, Filters: f, Outputs: []kio.Writer{rw}}.Execute()
return handleError(c, kio.Pipeline{
Inputs: []kio.Reader{rw}, Filters: f, Outputs: []kio.Writer{rw}}.Execute())
}
for i := range args {
@@ -120,7 +120,7 @@ func (r *FmtRunner) runE(c *cobra.Command, args []string) error {
err := kio.Pipeline{
Inputs: []kio.Reader{rw}, Filters: f, Outputs: []kio.Writer{rw}}.Execute()
if err != nil {
return err
return handleError(c, err)
}
}
return nil

View File

@@ -8,9 +8,9 @@ import (
"strings"
"github.com/spf13/cobra"
"sigs.k8s.io/kustomize/pseudo/k8s/apimachinery/pkg/api/resource"
"sigs.k8s.io/kustomize/kyaml/kio"
"sigs.k8s.io/kustomize/kyaml/kio/filters"
"sigs.k8s.io/kustomize/pseudo/k8s/apimachinery/pkg/api/resource"
)
// Cmd returns a command GrepRunner.
@@ -133,12 +133,12 @@ func (r *GrepRunner) runE(c *cobra.Command, args []string) error {
inputs = append(inputs, &kio.ByteReader{Reader: c.InOrStdin()})
}
return kio.Pipeline{
return handleError(c, kio.Pipeline{
Inputs: inputs,
Filters: filters,
Outputs: []kio.Writer{kio.ByteWriter{
Writer: c.OutOrStdout(),
KeepReaderAnnotations: r.KeepAnnotations,
}},
}.Execute()
}.Execute())
}

View File

@@ -76,5 +76,5 @@ func (r *MergeRunner) runE(c *cobra.Command, args []string) error {
}
filters := []kio.Filter{filters.MergeFilter{}, filters.FormatFilter{}}
return kio.Pipeline{Inputs: inputs, Filters: filters, Outputs: outputs}.Execute()
return handleError(c, kio.Pipeline{Inputs: inputs, Filters: filters, Outputs: outputs}.Execute())
}

View File

@@ -194,7 +194,7 @@ func (r *TreeRunner) runE(c *cobra.Command, args []string) error {
IncludeNonReconcilers: !r.excludeNonReconcilers,
}}
return kio.Pipeline{
return handleError(c, kio.Pipeline{
Inputs: []kio.Reader{input},
Filters: fltrs,
Outputs: []kio.Writer{kio.TreeWriter{
@@ -202,7 +202,7 @@ func (r *TreeRunner) runE(c *cobra.Command, args []string) error {
Writer: c.OutOrStdout(),
Fields: fields,
Structure: kio.TreeStructure(r.structure)}},
}.Execute()
}.Execute())
}
func newField(val ...string) kio.TreeWriterField {

View File

@@ -5,7 +5,11 @@ package cmd
import (
"fmt"
"os"
"strings"
"github.com/go-errors/errors"
"github.com/spf13/cobra"
)
// parseFieldPath parse a flag value into a field path
@@ -34,3 +38,27 @@ func parseFieldPath(path string) ([]string, error) {
}
return newParts, nil
}
func handleError(c *cobra.Command, err error) error {
if err == nil {
return nil
}
if StackOnError {
if err, ok := err.(*errors.Error); ok {
fmt.Fprint(os.Stderr, fmt.Sprintf("%s", err.Stack()))
}
}
if ExitOnError {
fmt.Fprintf(c.ErrOrStderr(), "Error: %v\n", err)
os.Exit(1)
}
return err
}
// ExitOnError if true, will cause commands to call os.Exit instead of returning an error.
// Used for skipping printing usage on failure.
var ExitOnError bool
// StackOnError if true, will print a stack trace on failure.
var StackOnError bool

View File

@@ -1,13 +1,17 @@
module sigs.k8s.io/kustomize/cmd/kyaml
go 1.12
go 1.13
require (
github.com/go-errors/errors v1.0.1
github.com/spf13/cobra v0.0.5
github.com/spf13/pflag v1.0.5 // indirect
github.com/stretchr/testify v1.4.0
sigs.k8s.io/kustomize/kyaml v0.0.0
sigs.k8s.io/kustomize/pseudo/k8s v0.0.0-20191109010559-74255f6badd9
sigs.k8s.io/kustomize/pseudo/k8s v0.0.0
)
replace sigs.k8s.io/kustomize/kyaml v0.0.0 => ../../kyaml
replace (
sigs.k8s.io/kustomize/kyaml v0.0.0 => ../../kyaml
sigs.k8s.io/kustomize/pseudo/k8s v0.0.0 => ../../pseudo/k8s
)

View File

@@ -94,7 +94,6 @@ github.com/spf13/cobra v0.0.5 h1:f0B+LkLX6DtmRH1isoNA9VTtNUK9K8xYd28JNNfOv/s=
github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU=
github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg=
github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
@@ -143,7 +142,5 @@ k8s.io/klog v0.3.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk=
k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I=
k8s.io/kube-openapi v0.0.0-20191107075043-30be4d16710a/go.mod h1:1TqjTSzOxsLGIKfj0lK8EeCP7K1iUG65v09OM0/WG5E=
k8s.io/utils v0.0.0-20191030222137-2b95a09bc58d/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew=
sigs.k8s.io/kustomize/pseudo/k8s v0.0.0-20191109010559-74255f6badd9 h1:y5HZbxpf+KDyXpXSIUaxkcDB2ot78v80aLHCJ/UiyLo=
sigs.k8s.io/kustomize/pseudo/k8s v0.0.0-20191109010559-74255f6badd9/go.mod h1:bl/gVJgYYhJZCZdYU2BfnaKYAlqFkgbJEkpl302jEss=
sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI=
sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o=

View File

@@ -22,6 +22,10 @@ var root = &cobra.Command{
}
func main() {
root.PersistentFlags().BoolVar(&cmd.StackOnError, "stack-trace", false,
"print a stack-trace on failure")
cmd.ExitOnError = true
root.AddCommand(cmd.GrepCommand())
root.AddCommand(cmd.TreeCommand())
root.AddCommand(cmd.CatCommand())