Merge pull request #607 from amorenoz/bug/runtime

conf: do not modify global runtimeconfig when merging
This commit is contained in:
Doug Smith
2021-02-16 14:23:34 -05:00
committed by GitHub
2 changed files with 33 additions and 21 deletions

View File

@@ -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

View File

@@ -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{}))
}) })
}) })