multus: update for CNI 0.7.0-alpha1 release

This commit is contained in:
Dan Williams
2018-06-13 15:14:02 -05:00
committed by Kuralamudhan Ramakrishnan
parent 92a8b1c1c9
commit 7597640a21
3 changed files with 41 additions and 3 deletions

View File

@@ -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) result, err := invoke.DelegateAdd(delegate.Type, delegate.Bytes, nil)
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)
} }
@@ -126,7 +126,7 @@ func delegateDel(ifName string, delegateConf *types.DelegateNetConf) error {
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); err != nil { if err := invoke.DelegateDel(delegateConf.Type, delegateConf.Bytes, nil); 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)
} }
@@ -200,6 +200,17 @@ func cmdAdd(args *skel.CmdArgs) error {
return result.Print() return result.Print()
} }
func cmdGet(args *skel.CmdArgs) error {
in, err := types.LoadNetConf(args.StdinData)
if err != nil {
return err
}
// FIXME: call all delegates
return in.PrevResult.Print()
}
func cmdDel(args *skel.CmdArgs) error { func cmdDel(args *skel.CmdArgs) error {
var nopodnet bool var nopodnet bool
@@ -242,5 +253,5 @@ func cmdDel(args *skel.CmdArgs) error {
} }
func main() { func main() {
skel.PluginMain(cmdAdd, cmdDel, version.All) skel.PluginMain(cmdAdd, cmdGet, cmdDel, version.All, "meta-plugin that delegates to other CNI plugins")
} }

View File

@@ -18,6 +18,9 @@ package types
import ( import (
"encoding/json" "encoding/json"
"fmt" "fmt"
"github.com/containernetworking/cni/pkg/types/current"
"github.com/containernetworking/cni/pkg/version"
) )
const ( const (
@@ -52,6 +55,23 @@ func LoadNetConf(bytes []byte) (*NetConf, error) {
return nil, fmt.Errorf("failed to load netconf: %v", err) return nil, fmt.Errorf("failed to load netconf: %v", err)
} }
// Parse previous result
if netconf.RawPrevResult != nil {
resultBytes, err := json.Marshal(netconf.RawPrevResult)
if err != nil {
return nil, fmt.Errorf("could not serialize prevResult: %v", err)
}
res, err := version.NewResult(netconf.CNIVersion, resultBytes)
if err != nil {
return nil, fmt.Errorf("could not parse prevResult: %v", err)
}
netconf.RawPrevResult = nil
netconf.PrevResult, err = current.NewResultFromResult(res)
if err != nil {
return nil, fmt.Errorf("could not convert result to current version: %v", err)
}
}
// Delegates must always be set. If no kubeconfig is present, the // Delegates must always be set. If no kubeconfig is present, the
// delegates are executed in-order. If a kubeconfig is present, // delegates are executed in-order. If a kubeconfig is present,
// at least one delegate must be present and the first delegate is // at least one delegate must be present and the first delegate is

View File

@@ -19,12 +19,19 @@ import (
"net" "net"
"github.com/containernetworking/cni/pkg/types" "github.com/containernetworking/cni/pkg/types"
"github.com/containernetworking/cni/pkg/types/current"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
) )
// NetConf for cni config file written in json // NetConf for cni config file written in json
type NetConf struct { type NetConf struct {
types.NetConf types.NetConf
// support chaining for master interface and IP decisions
// occurring prior to running ipvlan plugin
RawPrevResult *map[string]interface{} `json:"prevResult"`
PrevResult *current.Result `json:"-"`
ConfDir string `json:"confDir"` ConfDir string `json:"confDir"`
CNIDir string `json:"cniDir"` CNIDir string `json:"cniDir"`
// RawDelegates is private to the NetConf class; use Delegates instead // RawDelegates is private to the NetConf class; use Delegates instead