multus: pass exec interface to invoke package

Will help with unit tests.
This commit is contained in:
Dan Williams 2018-06-13 22:47:31 -05:00 committed by Kuralamudhan Ramakrishnan
parent 4a8b422c84
commit afa87024eb

View File

@ -104,7 +104,7 @@ func validateIfName(nsname string, ifname string) error {
return err return err
} }
func delegateAdd(ifName string, delegate *types.DelegateNetConf) (cnitypes.Result, error) { func delegateAdd(exec invoke.Exec, ifName string, delegate *types.DelegateNetConf) (cnitypes.Result, error) {
if os.Setenv("CNI_IFNAME", ifName) != nil { if os.Setenv("CNI_IFNAME", ifName) != nil {
return nil, fmt.Errorf("Multus: error in setting CNI_IFNAME") return nil, fmt.Errorf("Multus: error in setting CNI_IFNAME")
} }
@ -113,7 +113,7 @@ func delegateAdd(ifName string, delegate *types.DelegateNetConf) (cnitypes.Resul
return nil, fmt.Errorf("cannot set %q ifname to %q: %v", delegate.Type, ifName, err) return nil, fmt.Errorf("cannot set %q ifname to %q: %v", delegate.Type, ifName, err)
} }
result, err := invoke.DelegateAdd(delegate.Type, delegate.Bytes, nil) result, err := invoke.DelegateAdd(delegate.Type, delegate.Bytes, exec)
if err != nil { if err != nil {
return nil, fmt.Errorf("Multus: error in invoke Delegate add - %q: %v", delegate.Type, err) return nil, fmt.Errorf("Multus: error in invoke Delegate add - %q: %v", delegate.Type, err)
} }
@ -121,26 +121,26 @@ func delegateAdd(ifName string, delegate *types.DelegateNetConf) (cnitypes.Resul
return result, nil return result, nil
} }
func delegateDel(ifName string, delegateConf *types.DelegateNetConf) error { func delegateDel(exec invoke.Exec, ifName string, delegateConf *types.DelegateNetConf) error {
if os.Setenv("CNI_IFNAME", ifName) != nil { if os.Setenv("CNI_IFNAME", ifName) != nil {
return fmt.Errorf("Multus: error in setting CNI_IFNAME") return fmt.Errorf("Multus: error in setting CNI_IFNAME")
} }
if err := invoke.DelegateDel(delegateConf.Type, delegateConf.Bytes, nil); err != nil { if err := invoke.DelegateDel(delegateConf.Type, delegateConf.Bytes, exec); err != nil {
return fmt.Errorf("Multus: error in invoke Delegate del - %q: %v", delegateConf.Type, err) return fmt.Errorf("Multus: error in invoke Delegate del - %q: %v", delegateConf.Type, err)
} }
return nil return nil
} }
func delPlugins(argIfname string, delegates []*types.DelegateNetConf, lastIdx int) error { func delPlugins(exec invoke.Exec, argIfname string, delegates []*types.DelegateNetConf, lastIdx int) error {
if os.Setenv("CNI_COMMAND", "DEL") != nil { if os.Setenv("CNI_COMMAND", "DEL") != nil {
return fmt.Errorf("Multus: error in setting CNI_COMMAND to DEL") return fmt.Errorf("Multus: error in setting CNI_COMMAND to DEL")
} }
for idx := lastIdx; idx >= 0; idx-- { for idx := lastIdx; idx >= 0; idx-- {
ifName := getIfname(delegates[idx], argIfname, idx) ifName := getIfname(delegates[idx], argIfname, idx)
if err := delegateDel(ifName, delegates[idx]); err != nil { if err := delegateDel(exec, ifName, delegates[idx]); err != nil {
return err return err
} }
} }
@ -148,7 +148,7 @@ func delPlugins(argIfname string, delegates []*types.DelegateNetConf, lastIdx in
return nil return nil
} }
func cmdAdd(args *skel.CmdArgs) error { func cmdAdd(args *skel.CmdArgs, exec invoke.Exec) error {
var nopodnet bool var nopodnet bool
n, err := types.LoadNetConf(args.StdinData) n, err := types.LoadNetConf(args.StdinData)
if err != nil { if err != nil {
@ -181,7 +181,7 @@ func cmdAdd(args *skel.CmdArgs) error {
for idx, delegate := range n.Delegates { for idx, delegate := range n.Delegates {
lastIdx = idx lastIdx = idx
ifName := getIfname(delegate, args.IfName, idx) ifName := getIfname(delegate, args.IfName, idx)
tmpResult, err = delegateAdd(ifName, delegate) tmpResult, err = delegateAdd(exec, ifName, delegate)
if err != nil { if err != nil {
break break
} }
@ -193,14 +193,14 @@ func cmdAdd(args *skel.CmdArgs) error {
} }
if err != nil { if err != nil {
// Ignore errors; DEL must be idempotent anyway // Ignore errors; DEL must be idempotent anyway
_ = delPlugins(args.IfName, n.Delegates, lastIdx) _ = delPlugins(exec, args.IfName, n.Delegates, lastIdx)
return err return err
} }
return result.Print() return result.Print()
} }
func cmdGet(args *skel.CmdArgs) error { func cmdGet(args *skel.CmdArgs, exec invoke.Exec) error {
in, err := types.LoadNetConf(args.StdinData) in, err := types.LoadNetConf(args.StdinData)
if err != nil { if err != nil {
return err return err
@ -211,7 +211,7 @@ func cmdGet(args *skel.CmdArgs) error {
return in.PrevResult.Print() return in.PrevResult.Print()
} }
func cmdDel(args *skel.CmdArgs) error { func cmdDel(args *skel.CmdArgs, exec invoke.Exec) error {
var nopodnet bool var nopodnet bool
in, err := types.LoadNetConf(args.StdinData) in, err := types.LoadNetConf(args.StdinData)
@ -249,9 +249,13 @@ func cmdDel(args *skel.CmdArgs) error {
} }
} }
return delPlugins(args.IfName, in.Delegates, len(in.Delegates)-1) return delPlugins(exec, args.IfName, in.Delegates, len(in.Delegates)-1)
} }
func main() { func main() {
skel.PluginMain(cmdAdd, cmdGet, cmdDel, version.All, "meta-plugin that delegates to other CNI plugins") skel.PluginMain(
func(args *skel.CmdArgs) error { return cmdAdd(args, nil) },
func(args *skel.CmdArgs) error { return cmdGet(args, nil) },
func(args *skel.CmdArgs) error { return cmdDel(args, nil) },
version.All, "meta-plugin that delegates to other CNI plugins")
} }