From 7066439e38ce3e442699b40c4bbe3485a2409fd7 Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Sat, 2 Dec 2017 11:20:09 -0600 Subject: [PATCH] Use typed error when kubernetes network is missing Matching error text is error-prone, so use a typed error instead. --- multus/multus.go | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/multus/multus.go b/multus/multus.go index 0fc4d02f1..b2c37f551 100644 --- a/multus/multus.go +++ b/multus/multus.go @@ -405,6 +405,9 @@ func getMultusDelegates(delegate string) ([]map[string]interface{}, error) { return tmpNetconf.Delegates, nil } +type NoK8sNetworkError string +func (e NoK8sNetworkError) Error() string { return string(e) } + func getK8sNetwork(args *skel.CmdArgs, kubeconfig string) ([]map[string]interface{}, error) { k8sArgs := K8sArgs{} var podNet []map[string]interface{} @@ -425,7 +428,7 @@ func getK8sNetwork(args *skel.CmdArgs, kubeconfig string) ([]map[string]interfac } if len(netAnnot) == 0 { - return podNet, fmt.Errorf(`nonet`) + return podNet, NoK8sNetworkError("no kubernetes network found") } netObjs, err := parsePodNetworkObject(netAnnot) @@ -455,18 +458,18 @@ func cmdAdd(args *skel.CmdArgs) error { } if n.Kubeconfig != "" { - podDelegate, r := getK8sNetwork(args, n.Kubeconfig) - if r != nil && r.Error() == "nonet" { - nopodnet = true - if !defaultcninetwork { - return fmt.Errorf("Multus: Err in getting k8s network from the pod spec annotation, check the pod spec or set delegate for the default network, Refer the README.md: %v", r) + podDelegate, err := getK8sNetwork(args, n.Kubeconfig) + if err != nil { + if _, ok := err.(*NoK8sNetworkError); ok { + nopodnet = true + if !defaultcninetwork { + return fmt.Errorf("Multus: Err in getting k8s network from the pod spec annotation, check the pod spec or set delegate for the default network, Refer the README.md: %v", err) + } + } else if !defaultcninetwork { + return fmt.Errorf("Multus: Err in getting k8s network from pod: %v", err) } } - if r != nil && !defaultcninetwork { - return fmt.Errorf("Multus: Err in getting k8s network from pod: %v", r) - } - if len(podDelegate) != 0 { n.Delegates = podDelegate }