mirror of
https://github.com/k8snetworkplumbingwg/multus-cni.git
synced 2025-09-18 16:00:04 +00:00
Merge pull request #607 from amorenoz/bug/runtime
conf: do not modify global runtimeconfig when merging
This commit is contained in:
@@ -145,35 +145,38 @@ func LoadDelegateNetConf(bytes []byte, net *NetworkSelectionElement, deviceID st
|
|||||||
// mergeCNIRuntimeConfig creates CNI runtimeconfig from delegate
|
// mergeCNIRuntimeConfig creates CNI runtimeconfig from delegate
|
||||||
func mergeCNIRuntimeConfig(runtimeConfig *RuntimeConfig, delegate *DelegateNetConf) *RuntimeConfig {
|
func mergeCNIRuntimeConfig(runtimeConfig *RuntimeConfig, delegate *DelegateNetConf) *RuntimeConfig {
|
||||||
logging.Debugf("mergeCNIRuntimeConfig: %v %v", runtimeConfig, delegate)
|
logging.Debugf("mergeCNIRuntimeConfig: %v %v", runtimeConfig, delegate)
|
||||||
|
var mergedRuntimeConfig RuntimeConfig
|
||||||
|
|
||||||
if runtimeConfig == nil {
|
if runtimeConfig == nil {
|
||||||
runtimeConfig = &RuntimeConfig{}
|
mergedRuntimeConfig = RuntimeConfig{}
|
||||||
|
} else {
|
||||||
|
mergedRuntimeConfig = *runtimeConfig
|
||||||
}
|
}
|
||||||
|
|
||||||
// multus inject RuntimeConfig only in case of non MasterPlugin.
|
// multus inject RuntimeConfig only in case of non MasterPlugin.
|
||||||
if delegate.MasterPlugin != true {
|
if delegate.MasterPlugin != true {
|
||||||
logging.Debugf("mergeCNIRuntimeConfig: add runtimeConfig for net-attach-def: %v", runtimeConfig)
|
logging.Debugf("mergeCNIRuntimeConfig: add runtimeConfig for net-attach-def: %v", mergedRuntimeConfig)
|
||||||
if delegate.PortMappingsRequest != nil {
|
if delegate.PortMappingsRequest != nil {
|
||||||
runtimeConfig.PortMaps = delegate.PortMappingsRequest
|
mergedRuntimeConfig.PortMaps = delegate.PortMappingsRequest
|
||||||
}
|
}
|
||||||
if delegate.BandwidthRequest != nil {
|
if delegate.BandwidthRequest != nil {
|
||||||
runtimeConfig.Bandwidth = delegate.BandwidthRequest
|
mergedRuntimeConfig.Bandwidth = delegate.BandwidthRequest
|
||||||
}
|
}
|
||||||
if delegate.IPRequest != nil {
|
if delegate.IPRequest != nil {
|
||||||
runtimeConfig.IPs = delegate.IPRequest
|
mergedRuntimeConfig.IPs = delegate.IPRequest
|
||||||
}
|
}
|
||||||
if delegate.MacRequest != "" {
|
if delegate.MacRequest != "" {
|
||||||
runtimeConfig.Mac = delegate.MacRequest
|
mergedRuntimeConfig.Mac = delegate.MacRequest
|
||||||
}
|
}
|
||||||
if delegate.InfinibandGUIDRequest != "" {
|
if delegate.InfinibandGUIDRequest != "" {
|
||||||
runtimeConfig.InfinibandGUID = delegate.InfinibandGUIDRequest
|
mergedRuntimeConfig.InfinibandGUID = delegate.InfinibandGUIDRequest
|
||||||
}
|
}
|
||||||
if delegate.DeviceID != "" {
|
if delegate.DeviceID != "" {
|
||||||
runtimeConfig.DeviceID = delegate.DeviceID
|
mergedRuntimeConfig.DeviceID = delegate.DeviceID
|
||||||
}
|
}
|
||||||
logging.Debugf("mergeCNIRuntimeConfig: add runtimeConfig for net-attach-def: %v", runtimeConfig)
|
logging.Debugf("mergeCNIRuntimeConfig: add runtimeConfig for net-attach-def: %v", mergedRuntimeConfig)
|
||||||
}
|
}
|
||||||
|
return &mergedRuntimeConfig
|
||||||
return runtimeConfig
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// CreateCNIRuntimeConf create CNI RuntimeConf for a delegate. If delegate configuration
|
// CreateCNIRuntimeConf create CNI RuntimeConf for a delegate. If delegate configuration
|
||||||
@@ -181,16 +184,19 @@ func mergeCNIRuntimeConfig(runtimeConfig *RuntimeConfig, delegate *DelegateNetCo
|
|||||||
func CreateCNIRuntimeConf(args *skel.CmdArgs, k8sArgs *K8sArgs, ifName string, rc *RuntimeConfig, delegate *DelegateNetConf) (*libcni.RuntimeConf, string) {
|
func CreateCNIRuntimeConf(args *skel.CmdArgs, k8sArgs *K8sArgs, ifName string, rc *RuntimeConfig, delegate *DelegateNetConf) (*libcni.RuntimeConf, string) {
|
||||||
logging.Debugf("LoadCNIRuntimeConf: %v, %v, %s, %v %v", args, k8sArgs, ifName, rc, delegate)
|
logging.Debugf("LoadCNIRuntimeConf: %v, %v, %s, %v %v", args, k8sArgs, ifName, rc, delegate)
|
||||||
var cniDeviceInfoFile string
|
var cniDeviceInfoFile string
|
||||||
|
var delegateRc *RuntimeConfig
|
||||||
|
|
||||||
delegateRc := rc
|
|
||||||
if delegate != nil {
|
if delegate != nil {
|
||||||
delegateRc = mergeCNIRuntimeConfig(delegateRc, delegate)
|
delegateRc = mergeCNIRuntimeConfig(rc, delegate)
|
||||||
if delegateRc.CNIDeviceInfoFile == "" && delegate.Name != "" {
|
if delegateRc.CNIDeviceInfoFile != "" {
|
||||||
autoDeviceInfo := fmt.Sprintf("%s-%s_%s", delegate.Name, args.ContainerID, ifName)
|
logging.Debugf("Warning: Existing value of CNIDeviceInfoFile will be overwritten %s", delegateRc.CNIDeviceInfoFile)
|
||||||
delegateRc.CNIDeviceInfoFile = nadutils.GetCNIDeviceInfoPath(autoDeviceInfo)
|
|
||||||
cniDeviceInfoFile = delegateRc.CNIDeviceInfoFile
|
|
||||||
logging.Debugf("Adding auto-generated CNIDeviceInfoFile: %s", delegateRc.CNIDeviceInfoFile)
|
|
||||||
}
|
}
|
||||||
|
autoDeviceInfo := fmt.Sprintf("%s-%s_%s", delegate.Name, args.ContainerID, ifName)
|
||||||
|
delegateRc.CNIDeviceInfoFile = nadutils.GetCNIDeviceInfoPath(autoDeviceInfo)
|
||||||
|
cniDeviceInfoFile = delegateRc.CNIDeviceInfoFile
|
||||||
|
logging.Debugf("Adding auto-generated CNIDeviceInfoFile: %s", delegateRc.CNIDeviceInfoFile)
|
||||||
|
} else {
|
||||||
|
delegateRc = rc
|
||||||
}
|
}
|
||||||
|
|
||||||
// In part, adapted from K8s pkg/kubelet/dockershim/network/cni/cni.go#buildCNIRuntimeConf
|
// In part, adapted from K8s pkg/kubelet/dockershim/network/cni/cni.go#buildCNIRuntimeConf
|
||||||
|
@@ -26,8 +26,8 @@ import (
|
|||||||
types020 "github.com/containernetworking/cni/pkg/types/020"
|
types020 "github.com/containernetworking/cni/pkg/types/020"
|
||||||
"github.com/containernetworking/plugins/pkg/ns"
|
"github.com/containernetworking/plugins/pkg/ns"
|
||||||
"github.com/containernetworking/plugins/pkg/testutils"
|
"github.com/containernetworking/plugins/pkg/testutils"
|
||||||
testhelpers "gopkg.in/intel/multus-cni.v3/pkg/testing"
|
|
||||||
netutils "github.com/k8snetworkplumbingwg/network-attachment-definition-client/pkg/utils"
|
netutils "github.com/k8snetworkplumbingwg/network-attachment-definition-client/pkg/utils"
|
||||||
|
testhelpers "gopkg.in/intel/multus-cni.v3/pkg/testing"
|
||||||
|
|
||||||
. "github.com/onsi/ginkgo"
|
. "github.com/onsi/ginkgo"
|
||||||
. "github.com/onsi/gomega"
|
. "github.com/onsi/gomega"
|
||||||
@@ -757,11 +757,14 @@ var _ = Describe("config operations", func() {
|
|||||||
}
|
}
|
||||||
delegate, err := LoadDelegateNetConf([]byte(conf), networkSelection, "", "")
|
delegate, err := LoadDelegateNetConf([]byte(conf), networkSelection, "", "")
|
||||||
delegate.MasterPlugin = true
|
delegate.MasterPlugin = true
|
||||||
|
origRuntimeConfig := RuntimeConfig{}
|
||||||
Expect(err).NotTo(HaveOccurred())
|
Expect(err).NotTo(HaveOccurred())
|
||||||
runtimeConf := mergeCNIRuntimeConfig(&RuntimeConfig{}, delegate)
|
runtimeConf := mergeCNIRuntimeConfig(&origRuntimeConfig, delegate)
|
||||||
Expect(runtimeConf.PortMaps).To(BeNil())
|
Expect(runtimeConf.PortMaps).To(BeNil())
|
||||||
Expect(runtimeConf.Bandwidth).To(BeNil())
|
Expect(runtimeConf.Bandwidth).To(BeNil())
|
||||||
Expect(runtimeConf.InfinibandGUID).To(Equal(""))
|
Expect(runtimeConf.InfinibandGUID).To(Equal(""))
|
||||||
|
// The original RuntimeConfig must have not been overwritten
|
||||||
|
Expect(origRuntimeConfig).To(Equal(RuntimeConfig{}))
|
||||||
})
|
})
|
||||||
|
|
||||||
It("test mergeCNIRuntimeConfig with delegate plugin", func() {
|
It("test mergeCNIRuntimeConfig with delegate plugin", func() {
|
||||||
@@ -792,9 +795,10 @@ var _ = Describe("config operations", func() {
|
|||||||
BandwidthRequest: bandwidthEntry1,
|
BandwidthRequest: bandwidthEntry1,
|
||||||
PortMappingsRequest: []*PortMapEntry{portMapEntry1},
|
PortMappingsRequest: []*PortMapEntry{portMapEntry1},
|
||||||
}
|
}
|
||||||
|
origRuntimeConfig := RuntimeConfig{}
|
||||||
delegate, err := LoadDelegateNetConf([]byte(conf), networkSelection, "", "")
|
delegate, err := LoadDelegateNetConf([]byte(conf), networkSelection, "", "")
|
||||||
Expect(err).NotTo(HaveOccurred())
|
Expect(err).NotTo(HaveOccurred())
|
||||||
runtimeConf := mergeCNIRuntimeConfig(&RuntimeConfig{}, delegate)
|
runtimeConf := mergeCNIRuntimeConfig(&origRuntimeConfig, delegate)
|
||||||
Expect(runtimeConf.PortMaps).NotTo(BeNil())
|
Expect(runtimeConf.PortMaps).NotTo(BeNil())
|
||||||
Expect(len(runtimeConf.PortMaps)).To(BeEquivalentTo(1))
|
Expect(len(runtimeConf.PortMaps)).To(BeEquivalentTo(1))
|
||||||
Expect(runtimeConf.PortMaps[0]).To(Equal(portMapEntry1))
|
Expect(runtimeConf.PortMaps[0]).To(Equal(portMapEntry1))
|
||||||
@@ -802,5 +806,7 @@ var _ = Describe("config operations", func() {
|
|||||||
Expect(len(runtimeConf.IPs)).To(BeEquivalentTo(1))
|
Expect(len(runtimeConf.IPs)).To(BeEquivalentTo(1))
|
||||||
Expect(runtimeConf.Mac).To(Equal("c2:11:22:33:44:66"))
|
Expect(runtimeConf.Mac).To(Equal("c2:11:22:33:44:66"))
|
||||||
Expect(runtimeConf.InfinibandGUID).To(Equal("24:8a:07:03:00:8d:ae:2e"))
|
Expect(runtimeConf.InfinibandGUID).To(Equal("24:8a:07:03:00:8d:ae:2e"))
|
||||||
|
// The original RuntimeConfig must have not been overwritten
|
||||||
|
Expect(origRuntimeConfig).To(Equal(RuntimeConfig{}))
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
Reference in New Issue
Block a user