diff --git a/pkg/cloudprovider/provider/kubevirt/provider.go b/pkg/cloudprovider/provider/kubevirt/provider.go index 723cbef5f..71202ad8f 100644 --- a/pkg/cloudprovider/provider/kubevirt/provider.go +++ b/pkg/cloudprovider/provider/kubevirt/provider.go @@ -113,6 +113,7 @@ type Config struct { TopologySpreadConstraints []corev1.TopologySpreadConstraint Region string Zone string + EnableNetworkMultiQueue bool ProviderNetworkName string SubnetName string @@ -249,6 +250,16 @@ func (p *provider) getConfig(provSpec clusterv1alpha1.ProviderSpec) (*Config, *p } } + var enableNetworkMultiQueueSet bool + config.EnableNetworkMultiQueue, enableNetworkMultiQueueSet, err = p.configVarResolver.GetConfigVarBoolValue(rawConfig.VirtualMachine.EnableNetworkMultiQueue) + if err != nil { + return nil, nil, fmt.Errorf(`failed to get value of "enableNetworkMultiQueue" field: %w`, err) + } + + if !enableNetworkMultiQueueSet { + config.EnableNetworkMultiQueue = true + } + config.ClusterName, err = p.configVarResolver.GetConfigVarStringValue(rawConfig.ClusterName) if err != nil { return nil, nil, fmt.Errorf(`failed to get value of "clusterName" field: %w`, err) @@ -744,8 +755,9 @@ func (p *provider) newVirtualMachine(c *Config, pc *providerconfigtypes.Config, }, Domain: kubevirtv1.DomainSpec{ Devices: kubevirtv1.Devices{ - Interfaces: []kubevirtv1.Interface{*defaultBridgeNetwork}, - Disks: getVMDisks(c), + Interfaces: []kubevirtv1.Interface{*defaultBridgeNetwork}, + Disks: getVMDisks(c), + NetworkInterfaceMultiQueue: ptr.To(c.EnableNetworkMultiQueue), }, Resources: resourceRequirements, }, diff --git a/pkg/cloudprovider/provider/kubevirt/testdata/affinity-no-values.yaml b/pkg/cloudprovider/provider/kubevirt/testdata/affinity-no-values.yaml index a8382d8ee..4e1986e86 100644 --- a/pkg/cloudprovider/provider/kubevirt/testdata/affinity-no-values.yaml +++ b/pkg/cloudprovider/provider/kubevirt/testdata/affinity-no-values.yaml @@ -56,6 +56,7 @@ spec: interfaces: - name: default bridge: {} + networkInterfaceMultiqueue: true resources: limits: cpu: "2" diff --git a/pkg/cloudprovider/provider/kubevirt/testdata/affinity.yaml b/pkg/cloudprovider/provider/kubevirt/testdata/affinity.yaml index 7c0a3e9d8..61d9f81ac 100644 --- a/pkg/cloudprovider/provider/kubevirt/testdata/affinity.yaml +++ b/pkg/cloudprovider/provider/kubevirt/testdata/affinity.yaml @@ -59,6 +59,7 @@ spec: interfaces: - name: default bridge: {} + networkInterfaceMultiqueue: true resources: limits: cpu: "2" diff --git a/pkg/cloudprovider/provider/kubevirt/testdata/custom-local-disk.yaml b/pkg/cloudprovider/provider/kubevirt/testdata/custom-local-disk.yaml index b83d4b01b..a783434ab 100644 --- a/pkg/cloudprovider/provider/kubevirt/testdata/custom-local-disk.yaml +++ b/pkg/cloudprovider/provider/kubevirt/testdata/custom-local-disk.yaml @@ -51,6 +51,7 @@ spec: interfaces: - name: default bridge: {} + networkInterfaceMultiqueue: true resources: limits: cpu: "2" diff --git a/pkg/cloudprovider/provider/kubevirt/testdata/http-image-source.yaml b/pkg/cloudprovider/provider/kubevirt/testdata/http-image-source.yaml index f36d5392b..1f17d4d96 100644 --- a/pkg/cloudprovider/provider/kubevirt/testdata/http-image-source.yaml +++ b/pkg/cloudprovider/provider/kubevirt/testdata/http-image-source.yaml @@ -50,6 +50,7 @@ spec: interfaces: - name: default bridge: {} + networkInterfaceMultiqueue: true resources: limits: cpu: "2" diff --git a/pkg/cloudprovider/provider/kubevirt/testdata/instancetype-preference-custom.yaml b/pkg/cloudprovider/provider/kubevirt/testdata/instancetype-preference-custom.yaml index 9154f71c1..fa8d2d933 100644 --- a/pkg/cloudprovider/provider/kubevirt/testdata/instancetype-preference-custom.yaml +++ b/pkg/cloudprovider/provider/kubevirt/testdata/instancetype-preference-custom.yaml @@ -56,6 +56,7 @@ spec: interfaces: - name: default bridge: {} + networkInterfaceMultiqueue: true networks: - name: default pod: {} diff --git a/pkg/cloudprovider/provider/kubevirt/testdata/instancetype-preference-standard.yaml b/pkg/cloudprovider/provider/kubevirt/testdata/instancetype-preference-standard.yaml index c890481cb..1478d6539 100644 --- a/pkg/cloudprovider/provider/kubevirt/testdata/instancetype-preference-standard.yaml +++ b/pkg/cloudprovider/provider/kubevirt/testdata/instancetype-preference-standard.yaml @@ -56,6 +56,7 @@ spec: interfaces: - name: default bridge: {} + networkInterfaceMultiqueue: true networks: - name: default pod: {} diff --git a/pkg/cloudprovider/provider/kubevirt/testdata/kubeovn-provider-network.yaml b/pkg/cloudprovider/provider/kubevirt/testdata/kubeovn-provider-network.yaml index aa8dc5b6f..9bb367d33 100644 --- a/pkg/cloudprovider/provider/kubevirt/testdata/kubeovn-provider-network.yaml +++ b/pkg/cloudprovider/provider/kubevirt/testdata/kubeovn-provider-network.yaml @@ -51,6 +51,7 @@ spec: interfaces: - name: default bridge: {} + networkInterfaceMultiqueue: true resources: limits: cpu: "2" diff --git a/pkg/cloudprovider/provider/kubevirt/testdata/nominal-case.yaml b/pkg/cloudprovider/provider/kubevirt/testdata/nominal-case.yaml index 58f1ae771..c6eb221ad 100644 --- a/pkg/cloudprovider/provider/kubevirt/testdata/nominal-case.yaml +++ b/pkg/cloudprovider/provider/kubevirt/testdata/nominal-case.yaml @@ -50,6 +50,7 @@ spec: interfaces: - name: default bridge: {} + networkInterfaceMultiqueue: true resources: limits: cpu: "2" diff --git a/pkg/cloudprovider/provider/kubevirt/testdata/pvc-image-source.yaml b/pkg/cloudprovider/provider/kubevirt/testdata/pvc-image-source.yaml index 61884708e..1eb84320d 100644 --- a/pkg/cloudprovider/provider/kubevirt/testdata/pvc-image-source.yaml +++ b/pkg/cloudprovider/provider/kubevirt/testdata/pvc-image-source.yaml @@ -51,6 +51,7 @@ spec: interfaces: - name: default bridge: {} + networkInterfaceMultiqueue: true resources: limits: cpu: "2" diff --git a/pkg/cloudprovider/provider/kubevirt/testdata/registry-image-source-pod.yaml b/pkg/cloudprovider/provider/kubevirt/testdata/registry-image-source-pod.yaml index 69aaaac70..99e5546e4 100644 --- a/pkg/cloudprovider/provider/kubevirt/testdata/registry-image-source-pod.yaml +++ b/pkg/cloudprovider/provider/kubevirt/testdata/registry-image-source-pod.yaml @@ -51,6 +51,7 @@ spec: interfaces: - name: default bridge: {} + networkInterfaceMultiqueue: true resources: limits: cpu: "2" diff --git a/pkg/cloudprovider/provider/kubevirt/testdata/registry-image-source.yaml b/pkg/cloudprovider/provider/kubevirt/testdata/registry-image-source.yaml index f4608a12d..b1da847a3 100644 --- a/pkg/cloudprovider/provider/kubevirt/testdata/registry-image-source.yaml +++ b/pkg/cloudprovider/provider/kubevirt/testdata/registry-image-source.yaml @@ -51,6 +51,7 @@ spec: interfaces: - name: default bridge: {} + networkInterfaceMultiqueue: true resources: limits: cpu: "2" diff --git a/pkg/cloudprovider/provider/kubevirt/testdata/secondary-disks.yaml b/pkg/cloudprovider/provider/kubevirt/testdata/secondary-disks.yaml index 8abda0e51..2be84ebf3 100644 --- a/pkg/cloudprovider/provider/kubevirt/testdata/secondary-disks.yaml +++ b/pkg/cloudprovider/provider/kubevirt/testdata/secondary-disks.yaml @@ -82,6 +82,7 @@ spec: interfaces: - name: default bridge: {} + networkInterfaceMultiqueue: true resources: limits: cpu: "2" diff --git a/pkg/cloudprovider/provider/kubevirt/testdata/topologyspreadconstraints.yaml b/pkg/cloudprovider/provider/kubevirt/testdata/topologyspreadconstraints.yaml index 141091668..c12f06ef6 100644 --- a/pkg/cloudprovider/provider/kubevirt/testdata/topologyspreadconstraints.yaml +++ b/pkg/cloudprovider/provider/kubevirt/testdata/topologyspreadconstraints.yaml @@ -50,6 +50,7 @@ spec: interfaces: - name: default bridge: {} + networkInterfaceMultiqueue: true resources: limits: cpu: "2" diff --git a/pkg/cloudprovider/provider/kubevirt/testdata/use-storage-as-storage-target.yaml b/pkg/cloudprovider/provider/kubevirt/testdata/use-storage-as-storage-target.yaml index b441d5533..09124dfa0 100644 --- a/pkg/cloudprovider/provider/kubevirt/testdata/use-storage-as-storage-target.yaml +++ b/pkg/cloudprovider/provider/kubevirt/testdata/use-storage-as-storage-target.yaml @@ -51,6 +51,7 @@ spec: interfaces: - name: default bridge: {} + networkInterfaceMultiqueue: true resources: limits: cpu: "2" diff --git a/pkg/cloudprovider/provider/kubevirt/types/types.go b/pkg/cloudprovider/provider/kubevirt/types/types.go index 27641b130..804248c92 100644 --- a/pkg/cloudprovider/provider/kubevirt/types/types.go +++ b/pkg/cloudprovider/provider/kubevirt/types/types.go @@ -53,12 +53,13 @@ type VirtualMachine struct { // Instancetype is optional. Instancetype *kubevirtv1.InstancetypeMatcher `json:"instancetype,omitempty"` // Preference is optional. - Preference *kubevirtv1.PreferenceMatcher `json:"preference,omitempty"` - Template Template `json:"template,omitempty"` - DNSPolicy providerconfigtypes.ConfigVarString `json:"dnsPolicy,omitempty"` - DNSConfig *corev1.PodDNSConfig `json:"dnsConfig,omitempty"` - Location *Location `json:"location,omitempty"` - ProviderNetwork *ProviderNetwork `json:"providerNetwork,omitempty"` + Preference *kubevirtv1.PreferenceMatcher `json:"preference,omitempty"` + Template Template `json:"template,omitempty"` + DNSPolicy providerconfigtypes.ConfigVarString `json:"dnsPolicy,omitempty"` + DNSConfig *corev1.PodDNSConfig `json:"dnsConfig,omitempty"` + Location *Location `json:"location,omitempty"` + ProviderNetwork *ProviderNetwork `json:"providerNetwork,omitempty"` + EnableNetworkMultiQueue providerconfigtypes.ConfigVarBool `json:"enableNetworkMultiQueue,omitempty"` } // Flavor.