Merge pull request #9 from eyakubovich/errors

report errors via JSON
This commit is contained in:
Eugene Yakubovich 2015-05-08 15:08:03 -07:00
commit 601f991ee5
3 changed files with 32 additions and 9 deletions

View File

@ -125,9 +125,18 @@ func ConfigureIface(ifName string, res *Result) error {
return nil return nil
} }
// PrintResult writes out prettified Result to stdout // PrintResult writes out prettified Result JSON to stdout
func PrintResult(res *Result) error { func PrintResult(res *Result) error {
data, err := json.MarshalIndent(res, "", " ") return prettyPrint(res)
}
// PrintError writes out prettified Error JSON to stdout
func PrintError(err *Error) error {
return prettyPrint(err)
}
func prettyPrint(obj interface{}) error {
data, err := json.MarshalIndent(obj, "", " ")
if err != nil { if err != nil {
return err return err
} }

View File

@ -48,6 +48,12 @@ type Route struct {
GW net.IP GW net.IP
} }
type Error struct {
Code uint `json:"code"`
Msg string `json:"msg"`
Details string `json:"details,omitempty"`
}
// net.IPNet is not JSON (un)marshallable so this duality is needed // net.IPNet is not JSON (un)marshallable so this duality is needed
// for our custom ip.IPNet type // for our custom ip.IPNet type

View File

@ -17,9 +17,12 @@
package skel package skel
import ( import (
"fmt"
"io/ioutil" "io/ioutil"
"log" "log"
"os" "os"
"github.com/appc/cni/pkg/plugin"
) )
// CmdArgs captures all the arguments passed in to the plugin // CmdArgs captures all the arguments passed in to the plugin
@ -61,13 +64,12 @@ func PluginMain(cmdAdd, cmdDel func(_ *CmdArgs) error) {
} }
if argsMissing { if argsMissing {
os.Exit(1) die("required env variables missing")
} }
stdinData, err := ioutil.ReadAll(os.Stdin) stdinData, err := ioutil.ReadAll(os.Stdin)
if err != nil { if err != nil {
log.Printf("Error reading from stdin: %v", err) die("error reading from stdin: %v", err)
os.Exit(1)
} }
cmdArgs := &CmdArgs{ cmdArgs := &CmdArgs{
@ -87,12 +89,18 @@ func PluginMain(cmdAdd, cmdDel func(_ *CmdArgs) error) {
err = cmdDel(cmdArgs) err = cmdDel(cmdArgs)
default: default:
log.Printf("Unknown CNI_COMMAND: %v", cmd) die("unknown CNI_COMMAND: %v", cmd)
os.Exit(1)
} }
if err != nil { if err != nil {
log.Printf("%v: %v", cmd, err) die(err.Error())
os.Exit(1)
} }
} }
func die(f string, args ...interface{}) {
plugin.PrintError(&plugin.Error{
Code: 100,
Msg: fmt.Sprintf(f, args...),
})
os.Exit(1)
}