libcni: Improved error messages.

Improved the error reporting to be more descriptive when configuration
files are not filed while using the cni-tool.
This commit is contained in:
Avinash Sridharan
2017-03-30 22:06:02 +00:00
parent 470e86eb8b
commit 5b0d6a0c8f

View File

@ -16,7 +16,6 @@ package libcni
import ( import (
"encoding/json" "encoding/json"
"errors"
"fmt" "fmt"
"io/ioutil" "io/ioutil"
"os" "os"
@ -33,7 +32,13 @@ func (e NotFoundError) Error() string {
return fmt.Sprintf(`no net configuration with name "%s" in %s`, e.Name, e.Dir) return fmt.Sprintf(`no net configuration with name "%s" in %s`, e.Name, e.Dir)
} }
var NoConfigsFoundError = errors.New("no net configurations found") type NoConfigsFoundError struct {
Dir string
}
func (e NoConfigsFoundError) Error() string {
return fmt.Sprintf(`no net configurations found in %s`, e.Dir)
}
func ConfFromBytes(bytes []byte) (*NetworkConfig, error) { func ConfFromBytes(bytes []byte) (*NetworkConfig, error) {
conf := &NetworkConfig{Bytes: bytes} conf := &NetworkConfig{Bytes: bytes}
@ -149,7 +154,7 @@ func LoadConf(dir, name string) (*NetworkConfig, error) {
case err != nil: case err != nil:
return nil, err return nil, err
case len(files) == 0: case len(files) == 0:
return nil, NoConfigsFoundError return nil, NoConfigsFoundError{Dir: dir}
} }
sort.Strings(files) sort.Strings(files)
@ -187,16 +192,12 @@ func LoadConfList(dir, name string) (*NetworkConfigList, error) {
singleConf, err := LoadConf(dir, name) singleConf, err := LoadConf(dir, name)
if err != nil { if err != nil {
// A little extra logic so the error makes sense // A little extra logic so the error makes sense
switch { if _, ok := err.(NoConfigsFoundError); len(files) != 0 && ok {
// neither configlists nor config files found // Config lists found but no config files found
case len(files) == 0 && err == NoConfigsFoundError:
return nil, err
// config lists found but no config files found
case len(files) != 0 && err == NoConfigsFoundError:
return nil, NotFoundError{dir, name} return nil, NotFoundError{dir, name}
default: // either not found or parse error
return nil, err
} }
return nil, err
} }
return ConfListFromConf(singleConf) return ConfListFromConf(singleConf)
} }