mirror of
https://github.com/k8snetworkplumbingwg/multus-cni.git
synced 2025-08-09 12:08:52 +00:00
provide default network for pod spec without network annotation
This commit is contained in:
parent
e556ec685a
commit
088647ee41
@ -41,6 +41,7 @@ import (
|
|||||||
const defaultCNIDir = "/var/lib/cni/multus"
|
const defaultCNIDir = "/var/lib/cni/multus"
|
||||||
|
|
||||||
var masterpluginEnabled bool
|
var masterpluginEnabled bool
|
||||||
|
var defaultcninetwork bool
|
||||||
|
|
||||||
type NetConf struct {
|
type NetConf struct {
|
||||||
types.NetConf
|
types.NetConf
|
||||||
@ -86,12 +87,16 @@ 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)
|
||||||
}
|
}
|
||||||
|
|
||||||
if netconf.Kubeconfig != "" {
|
if netconf.Kubeconfig != "" && netconf.Delegates != nil {
|
||||||
|
defaultcninetwork = true
|
||||||
|
}
|
||||||
|
|
||||||
|
if netconf.Kubeconfig != "" && !defaultcninetwork {
|
||||||
return netconf, nil
|
return netconf, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
if netconf.Delegates == nil {
|
if len(netconf.Delegates) == 0 && !defaultcninetwork {
|
||||||
return nil, fmt.Errorf(`"delegates" is must, refer README.md`)
|
return nil, fmt.Errorf(`delegates or kubeconfig option is must, refer README.md`)
|
||||||
}
|
}
|
||||||
|
|
||||||
if netconf.CNIDir == "" {
|
if netconf.CNIDir == "" {
|
||||||
@ -424,6 +429,10 @@ func getK8sNetwork(args *skel.CmdArgs, kubeconfig string) ([]map[string]interfac
|
|||||||
return podNet, err
|
return podNet, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if len(netAnnot) == 0 {
|
||||||
|
return podNet, fmt.Errorf(`nonet`)
|
||||||
|
}
|
||||||
|
|
||||||
netObjs, err := parsePodNetworkObject(netAnnot)
|
netObjs, err := parsePodNetworkObject(netAnnot)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return podNet, err
|
return podNet, err
|
||||||
@ -444,19 +453,29 @@ func getK8sNetwork(args *skel.CmdArgs, kubeconfig string) ([]map[string]interfac
|
|||||||
|
|
||||||
func cmdAdd(args *skel.CmdArgs) error {
|
func cmdAdd(args *skel.CmdArgs) error {
|
||||||
var result error
|
var result error
|
||||||
|
var nopodnet bool
|
||||||
n, err := loadNetConf(args.StdinData)
|
n, err := loadNetConf(args.StdinData)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return fmt.Errorf("err in loading netconf: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if n.Kubeconfig != "" {
|
if n.Kubeconfig != "" {
|
||||||
podDelegate, r := getK8sNetwork(args, 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)
|
return fmt.Errorf("Multus: Err in getting k8s network from pod: %v", r)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if len(podDelegate) != 0 {
|
||||||
n.Delegates = podDelegate
|
n.Delegates = podDelegate
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for _, delegate := range n.Delegates {
|
for _, delegate := range n.Delegates {
|
||||||
if err := checkDelegate(delegate); err != nil {
|
if err := checkDelegate(delegate); err != nil {
|
||||||
@ -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 {
|
if err := saveDelegates(args.ContainerID, n.CNIDir, n.Delegates); err != nil {
|
||||||
return fmt.Errorf("Multus: Err in saving the delegates: %v", err)
|
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 {
|
func cmdDel(args *skel.CmdArgs) error {
|
||||||
var result error
|
var result error
|
||||||
|
var nopodnet bool
|
||||||
|
|
||||||
var Delegates []map[string]interface{}
|
var Delegates []map[string]interface{}
|
||||||
|
|
||||||
in, err := loadNetConf(args.StdinData)
|
in, err := loadNetConf(args.StdinData)
|
||||||
@ -509,13 +530,23 @@ func cmdDel(args *skel.CmdArgs) error {
|
|||||||
|
|
||||||
if in.Kubeconfig != "" {
|
if in.Kubeconfig != "" {
|
||||||
podDelegate, r := getK8sNetwork(args, in.Kubeconfig)
|
podDelegate, r := getK8sNetwork(args, in.Kubeconfig)
|
||||||
if r != nil {
|
if r != nil && r.Error() == "nonet" {
|
||||||
return r
|
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
|
if r != nil && !defaultcninetwork {
|
||||||
} else {
|
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)
|
netconfBytes, err := consumeScratchNetConf(args.ContainerID, in.CNIDir)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("Multus: Err in reading the delegates: %v", err)
|
return fmt.Errorf("Multus: Err in reading the delegates: %v", err)
|
||||||
|
Loading…
Reference in New Issue
Block a user