refactor: Remove old error handling library

Removes the old error handling library and switches to plain
fmt.Errorf calls.

There are several reasons for this:

* There are no useful types or handling here anyways, so output format
  is the only priority.
* Users don't care about getting stacktraces.
* My emotional wellbeing.

Fin de siècle.
This commit is contained in:
Vincent Ambo 2018-03-09 15:17:54 +01:00 committed by Vincent Ambo
parent b8722ce83b
commit 3aa2cb8d3e
7 changed files with 13 additions and 78 deletions

View file

@ -10,9 +10,9 @@
package context package context
import ( import (
"fmt"
"path" "path"
"github.com/polydawn/meep"
"github.com/tazjin/kontemplate/util" "github.com/tazjin/kontemplate/util"
) )
@ -51,9 +51,8 @@ type Context struct {
BaseDir string BaseDir string
} }
type ContextLoadingError struct { func contextLoadingError(filename string, cause error) error {
meep.AllTraits return fmt.Errorf("Context loading failed on file %s due to: \n%v", filename, cause)
Filename string
} }
// Attempt to load and deserialise a Context from the specified file. // Attempt to load and deserialise a Context from the specified file.
@ -62,10 +61,7 @@ func LoadContextFromFile(filename string) (*Context, error) {
err := util.LoadJsonOrYaml(filename, &c) err := util.LoadJsonOrYaml(filename, &c)
if err != nil { if err != nil {
return nil, meep.New( return nil, contextLoadingError(filename, err)
&ContextLoadingError{Filename: filename},
meep.Cause(err),
)
} }
c.ResourceSets = flattenPrepareResourceSetPaths(&c.ResourceSets) c.ResourceSets = flattenPrepareResourceSetPaths(&c.ResourceSets)
@ -74,10 +70,7 @@ func LoadContextFromFile(filename string) (*Context, error) {
err = c.loadImportedVariables() err = c.loadImportedVariables()
if err != nil { if err != nil {
return nil, meep.New( return nil, contextLoadingError(filename, err)
&ContextLoadingError{Filename: filename},
meep.Cause(err),
)
} }
return &c, nil return &c, nil

View file

@ -72,15 +72,6 @@
sha256 = "12n3lfbfxvnag916c6dpxl48j29s482zwsqjc6wk4vb68qbz2nl3"; sha256 = "12n3lfbfxvnag916c6dpxl48j29s482zwsqjc6wk4vb68qbz2nl3";
}; };
} }
{
goPackagePath = "github.com/polydawn/meep";
fetch = {
type = "git";
url = "https://github.com/polydawn/meep";
rev = "eaf1db2168fe380b4da17a35f0adddb5ae15a651";
sha256 = "12n134fb2imnj67xkbznzm0gqkg36hdxwr960y91qb5s2q2krxir";
};
}
{ {
goPackagePath = "github.com/satori/go.uuid"; goPackagePath = "github.com/satori/go.uuid";
fetch = { fetch = {

View file

@ -4,7 +4,7 @@ kind: Secret
metadata: metadata:
name: secret-certificate name: secret-certificate
data: data:
cert.pem: { passLookup "my/secret/certificate" | b64enc }} cert.pem: {{ passLookup "my/secret/certificate" | b64enc }}
--- ---
apiVersion: extensions/v1beta1 apiVersion: extensions/v1beta1
kind: ConfigMap kind: ConfigMap

View file

@ -20,7 +20,6 @@ import (
"os" "os"
"os/exec" "os/exec"
"github.com/polydawn/meep"
"github.com/tazjin/kontemplate/context" "github.com/tazjin/kontemplate/context"
"github.com/tazjin/kontemplate/templater" "github.com/tazjin/kontemplate/templater"
"gopkg.in/alecthomas/kingpin.v2" "gopkg.in/alecthomas/kingpin.v2"
@ -31,10 +30,6 @@ const version string = "1.3.0"
// This variable will be initialised by the Go linker during the builder // This variable will be initialised by the Go linker during the builder
var gitHash string var gitHash string
type KubeCtlError struct {
meep.AllTraits
}
var ( var (
app = kingpin.New("kontemplate", "simple Kubernetes resource templating") app = kingpin.New("kontemplate", "simple Kubernetes resource templating")
@ -180,14 +175,14 @@ func runKubectlWithResources(c *context.Context, kubectlArgs *[]string, resource
stdin, err := kubectl.StdinPipe() stdin, err := kubectl.StdinPipe()
if err != nil { if err != nil {
return meep.New(&KubeCtlError{}, meep.Cause(err)) return fmt.Errorf("kubectl error: %v", err)
} }
kubectl.Stdout = os.Stdout kubectl.Stdout = os.Stdout
kubectl.Stderr = os.Stderr kubectl.Stderr = os.Stderr
if err = kubectl.Start(); err != nil { if err = kubectl.Start(); err != nil {
return meep.New(&KubeCtlError{}, meep.Cause(err)) return fmt.Errorf("kubectl error: %v", err)
} }
for _, r := range rs.Resources { for _, r := range rs.Resources {

View file

@ -14,26 +14,16 @@ package templater
import ( import (
"fmt" "fmt"
"github.com/polydawn/meep"
"net" "net"
"os" "os"
) )
type DNSError struct {
meep.TraitAutodescribing
meep.TraitCausable
Output string
}
func GetIPsFromDNS(host string) ([]interface{}, error) { func GetIPsFromDNS(host string) ([]interface{}, error) {
fmt.Fprintf(os.Stderr, "Attempting to look up IP for %s in DNS\n", host) fmt.Fprintf(os.Stderr, "Attempting to look up IP for %s in DNS\n", host)
ips, err := net.LookupIP(host) ips, err := net.LookupIP(host)
if err != nil { if err != nil {
return nil, meep.New( return nil, fmt.Errorf("IP address lookup failed: %v", err)
&DNSError{Output: "IP address lookup failed"},
meep.Cause(err),
)
} }
var result []interface{} = make([]interface{}, len(ips)) var result []interface{} = make([]interface{}, len(ips))

View file

@ -16,27 +16,16 @@ import (
"fmt" "fmt"
"os" "os"
"os/exec" "os/exec"
"github.com/polydawn/meep"
"strings" "strings"
) )
type PassError struct {
meep.TraitAutodescribing
meep.TraitCausable
Output string
}
func GetFromPass(key string) (string, error) { func GetFromPass(key string) (string, error) {
fmt.Fprintf(os.Stderr, "Attempting to look up %s in pass\n", key) fmt.Fprintf(os.Stderr, "Attempting to look up %s in pass\n", key)
pass := exec.Command("pass", "show", key) pass := exec.Command("pass", "show", key)
output, err := pass.CombinedOutput() output, err := pass.CombinedOutput()
if err != nil { if err != nil {
return "", meep.New( return "", fmt.Errorf("Pass lookup failed: %s (%v)", output, err)
&PassError{Output: string(output)},
meep.Cause(err),
)
} }
trimmed := strings.TrimSpace(string(output)) trimmed := strings.TrimSpace(string(output))

View file

@ -20,26 +20,12 @@ import (
"text/template" "text/template"
"github.com/Masterminds/sprig" "github.com/Masterminds/sprig"
"github.com/polydawn/meep"
"github.com/tazjin/kontemplate/context" "github.com/tazjin/kontemplate/context"
"github.com/tazjin/kontemplate/util" "github.com/tazjin/kontemplate/util"
) )
const failOnMissingKeys string = "missingkey=error" const failOnMissingKeys string = "missingkey=error"
// Error that is caused by non-existent template files being specified
type TemplateNotFoundError struct {
meep.AllTraits
Name string
Path string
}
// Error that is caused during templating, e.g. required value being absent or invalid template format
type TemplatingError struct {
meep.TraitAutodescribing
meep.TraitCausable
}
type RenderedResource struct { type RenderedResource struct {
Filename string Filename string
Rendered string Rendered string
@ -83,10 +69,7 @@ func processResourceSet(c *context.Context, rs *context.ResourceSet) (*RenderedR
resources, err := processFiles(c, rs, rp, files) resources, err := processFiles(c, rs, rp, files)
if err != nil { if err != nil {
return nil, meep.New( return nil, err
&TemplateNotFoundError{Name: rs.Name, Path: rs.Path},
meep.Cause(err),
)
} }
return &RenderedResourceSet{ return &RenderedResourceSet{
@ -122,10 +105,7 @@ func templateFile(c *context.Context, rs *context.ResourceSet, filename string)
tpl, err := template.New(path.Base(filename)).Funcs(templateFuncs(rs)).Option(failOnMissingKeys).ParseFiles(filename) tpl, err := template.New(path.Base(filename)).Funcs(templateFuncs(rs)).Option(failOnMissingKeys).ParseFiles(filename)
if err != nil { if err != nil {
return "", meep.New( return "", fmt.Errorf("Template %s not found: %v", filename, err)
&TemplateNotFoundError{Name: filename},
meep.Cause(err),
)
} }
var b bytes.Buffer var b bytes.Buffer
@ -135,10 +115,7 @@ func templateFile(c *context.Context, rs *context.ResourceSet, filename string)
err = tpl.Execute(&b, rs.Values) err = tpl.Execute(&b, rs.Values)
if err != nil { if err != nil {
return "", meep.New( return "", fmt.Errorf("Error while templating %s: %v", filename, err)
&TemplatingError{},
meep.Cause(err),
)
} }
return b.String(), nil return b.String(), nil