provide default network for pod spec without network annotation

This commit is contained in:
kuralamudhan ramakrishnan 2017-08-11 17:24:43 +01:00
parent e556ec685a
commit 088647ee41

View File

@ -41,6 +41,7 @@ import (
const defaultCNIDir = "/var/lib/cni/multus"
var masterpluginEnabled bool
var defaultcninetwork bool
type NetConf struct {
types.NetConf
@ -86,12 +87,16 @@ func loadNetConf(bytes []byte) (*NetConf, error) {
return nil, fmt.Errorf("failed to load netconf: %v", err)
}
if netconf.Kubeconfig != "" {
if netconf.Kubeconfig != "" && netconf.Delegates != nil {
defaultcninetwork = true
}
if netconf.Kubeconfig != "" && !defaultcninetwork {
return netconf, nil
}
if netconf.Delegates == nil {
return nil, fmt.Errorf(`"delegates" is must, refer README.md`)
if len(netconf.Delegates) == 0 && !defaultcninetwork {
return nil, fmt.Errorf(`delegates or kubeconfig option is must, refer README.md`)
}
if netconf.CNIDir == "" {
@ -424,6 +429,10 @@ func getK8sNetwork(args *skel.CmdArgs, kubeconfig string) ([]map[string]interfac
return podNet, err
}
if len(netAnnot) == 0 {
return podNet, fmt.Errorf(`nonet`)
}
netObjs, err := parsePodNetworkObject(netAnnot)
if err != nil {
return podNet, err
@ -444,18 +453,28 @@ func getK8sNetwork(args *skel.CmdArgs, kubeconfig string) ([]map[string]interfac
func cmdAdd(args *skel.CmdArgs) error {
var result error
var nopodnet bool
n, err := loadNetConf(args.StdinData)
if err != nil {
return err
return fmt.Errorf("err in loading netconf: %v", err)
}
if n.Kubeconfig != "" {
podDelegate, r := getK8sNetwork(args, n.Kubeconfig)
if r != nil {
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)
}
}
if r != nil && !defaultcninetwork {
return fmt.Errorf("Multus: Err in getting k8s network from pod: %v", r)
}
n.Delegates = podDelegate
if len(podDelegate) != 0 {
n.Delegates = podDelegate
}
}
for _, delegate := range n.Delegates {
@ -464,7 +483,7 @@ func cmdAdd(args *skel.CmdArgs) error {
}
}
if n.Kubeconfig == "" {
if n.Kubeconfig == "" || nopodnet {
if err := saveDelegates(args.ContainerID, n.CNIDir, n.Delegates); err != nil {
return fmt.Errorf("Multus: Err in saving the delegates: %v", err)
}
@ -500,6 +519,8 @@ func cmdAdd(args *skel.CmdArgs) error {
func cmdDel(args *skel.CmdArgs) error {
var result error
var nopodnet bool
var Delegates []map[string]interface{}
in, err := loadNetConf(args.StdinData)
@ -509,13 +530,23 @@ func cmdDel(args *skel.CmdArgs) error {
if in.Kubeconfig != "" {
podDelegate, r := getK8sNetwork(args, in.Kubeconfig)
if r != nil {
return r
if r != nil && r.Error() == "nonet" {
nopodnet = true
if !defaultcninetwork {
return fmt.Errorf("Multus: Err in getting k8s network from the poc spec, check the pod spec or set delegate for the default network, Refer the README.md: %v", r)
}
}
Delegates = podDelegate
} else {
if r != nil && !defaultcninetwork {
return fmt.Errorf("Multus: Err in getting k8s network from pod: %v", r)
}
if len(podDelegate) != 0 {
in.Delegates = podDelegate
}
}
if in.Kubeconfig == "" || nopodnet {
netconfBytes, err := consumeScratchNetConf(args.ContainerID, in.CNIDir)
if err != nil {
return fmt.Errorf("Multus: Err in reading the delegates: %v", err)