diff --git a/pkg/cloudprovider/provider/kubevirt/provider.go b/pkg/cloudprovider/provider/kubevirt/provider.go index 021f200c9..13bd1fca1 100644 --- a/pkg/cloudprovider/provider/kubevirt/provider.go +++ b/pkg/cloudprovider/provider/kubevirt/provider.go @@ -37,7 +37,6 @@ import ( "k8c.io/machine-controller/pkg/cloudprovider/instance" kubevirttypes "k8c.io/machine-controller/pkg/cloudprovider/provider/kubevirt/types" cloudprovidertypes "k8c.io/machine-controller/pkg/cloudprovider/types" - netutil "k8c.io/machine-controller/pkg/cloudprovider/util" controllerutil "k8c.io/machine-controller/pkg/controller/util" "k8c.io/machine-controller/pkg/providerconfig" providerconfigtypes "k8c.io/machine-controller/pkg/providerconfig/types" @@ -597,7 +596,7 @@ func (p *provider) Create(ctx context.Context, _ *zap.SugaredLogger, machine *cl userDataSecretName := fmt.Sprintf("userdata-%s-%s", machine.Name, strconv.Itoa(int(time.Now().Unix()))) virtualMachine, err := p.newVirtualMachine(ctx, c, pc, machine, userDataSecretName, userdata, - machineDeploymentNameAndRevisionForMachineGetter(ctx, machine, data.Client), randomMacAddressGetter) + machineDeploymentNameAndRevisionForMachineGetter(ctx, machine, data.Client)) if err != nil { return nil, fmt.Errorf("could not create a VirtualMachine manifest %w", err) } @@ -621,7 +620,7 @@ func (p *provider) Create(ctx context.Context, _ *zap.SugaredLogger, machine *cl } func (p *provider) newVirtualMachine(_ context.Context, c *Config, pc *providerconfigtypes.Config, machine *clusterv1alpha1.Machine, - userdataSecretName, userdata string, mdNameGetter machineDeploymentNameGetter, macAddressGetter macAddressGetter) (*kubevirtv1.VirtualMachine, error) { + userdataSecretName, userdata string, mdNameGetter machineDeploymentNameGetter) (*kubevirtv1.VirtualMachine, error) { // We add the timestamp because the secret name must be different when we recreate the VMI // because its pod got deleted // The secret has an ownerRef on the VMI so garbace collection will take care of cleaning up. @@ -663,6 +662,7 @@ func (p *provider) newVirtualMachine(_ context.Context, c *Config, pc *providerc } annotations["ovn.kubernetes.io/allow_live_migration"] = "true" + annotations["kubevirt.io/allow-pod-bridge-network-live-migration"] = "true" for k, v := range machine.Annotations { if strings.HasPrefix(k, "cdi.kubevirt.io") { @@ -673,11 +673,7 @@ func (p *provider) newVirtualMachine(_ context.Context, c *Config, pc *providerc annotations[k] = v } - defaultBridgeNetwork, err := defaultBridgeNetwork(macAddressGetter) - if err != nil { - return nil, fmt.Errorf("could not compute a random MAC address") - } - + defaultBridgeNetwork := defaultBridgeNetwork() runStrategyOnce := kubevirtv1.RunStrategyOnce virtualMachine := &kubevirtv1.VirtualMachine{ @@ -799,24 +795,8 @@ func getVMDisks(config *Config) []kubevirtv1.Disk { return disks } -type macAddressGetter func() (string, error) - -func randomMacAddressGetter() (string, error) { - mac, err := netutil.GenerateRandMAC() - if err != nil { - return "", err - } - return mac.String(), nil -} - -func defaultBridgeNetwork(macAddressGetter macAddressGetter) (*kubevirtv1.Interface, error) { - defaultBridgeNetwork := kubevirtv1.DefaultBridgeNetworkInterface() - mac, err := macAddressGetter() - if err != nil { - return nil, err - } - defaultBridgeNetwork.MacAddress = mac - return defaultBridgeNetwork, nil +func defaultBridgeNetwork() *kubevirtv1.Interface { + return kubevirtv1.DefaultBridgeNetworkInterface() } func getVMVolumes(config *Config, dataVolumeName string, userDataSecretName string) []kubevirtv1.Volume { diff --git a/pkg/cloudprovider/provider/kubevirt/provider_test.go b/pkg/cloudprovider/provider/kubevirt/provider_test.go index 18bcea9da..a1ef8545a 100644 --- a/pkg/cloudprovider/provider/kubevirt/provider_test.go +++ b/pkg/cloudprovider/provider/kubevirt/provider_test.go @@ -126,7 +126,7 @@ func (k kubevirtProviderSpecConf) rawProviderSpec(t *testing.T) []byte { "primaryDisk": { {{- if .StorageTarget }} "storageTarget": "{{ .StorageTarget }}", - {{- end }} + {{- end }} {{- if .OsImageDV }} "osImage": "{{ .OsImageDV }}", {{- else }} @@ -221,7 +221,8 @@ func TestNewVirtualMachine(t *testing.T) { { name: "custom-local-disk", specConf: kubevirtProviderSpecConf{OsImageDV: "ns/dvname"}, - }, { + }, + { name: "use-storage-as-storage-target", specConf: kubevirtProviderSpecConf{StorageTarget: Storage}, }, @@ -263,7 +264,7 @@ func TestNewVirtualMachine(t *testing.T) { c.Namespace = testNamespace // Check the created VirtualMachine - vm, _ := p.newVirtualMachine(context.TODO(), c, pc, machine, "udsn", userdata, fakeMachineDeploymentNameAndRevisionForMachineGetter(), fixedMacAddressGetter) + vm, _ := p.newVirtualMachine(context.TODO(), c, pc, machine, "udsn", userdata, fakeMachineDeploymentNameAndRevisionForMachineGetter()) vm.TypeMeta.APIVersion, vm.TypeMeta.Kind = kubevirtv1.VirtualMachineGroupVersionKind.ToAPIVersionAndKind() if !equality.Semantic.DeepEqual(vm, expectedVms[tt.name]) { @@ -289,10 +290,6 @@ func toVirtualMachines(objects []runtime.Object) map[string]*kubevirtv1.VirtualM return vms } -func fixedMacAddressGetter() (string, error) { - return "b6:f5:b4:fe:45:1d", nil -} - // runtimeFromYaml returns a list of Kubernetes runtime objects from their yaml templates. // It returns the objects for all files included in the ManifestFS folder, skipping (with error log) the yaml files // that would not contain correct yaml files. diff --git a/pkg/cloudprovider/provider/kubevirt/testdata/affinity-no-values.yaml b/pkg/cloudprovider/provider/kubevirt/testdata/affinity-no-values.yaml index bac6e7a46..5d55f2071 100644 --- a/pkg/cloudprovider/provider/kubevirt/testdata/affinity-no-values.yaml +++ b/pkg/cloudprovider/provider/kubevirt/testdata/affinity-no-values.yaml @@ -30,6 +30,7 @@ spec: metadata: annotations: "ovn.kubernetes.io/allow_live_migration": "true" + "kubevirt.io/allow-pod-bridge-network-live-migration": "true" labels: cluster.x-k8s.io/cluster-name: cluster-name cluster.x-k8s.io/role: worker @@ -53,8 +54,7 @@ spec: bus: virtio name: cloudinitdisk interfaces: - - macAddress: b6:f5:b4:fe:45:1d - name: default + - name: default bridge: {} resources: limits: diff --git a/pkg/cloudprovider/provider/kubevirt/testdata/affinity.yaml b/pkg/cloudprovider/provider/kubevirt/testdata/affinity.yaml index 7f1889466..8d206aa0c 100644 --- a/pkg/cloudprovider/provider/kubevirt/testdata/affinity.yaml +++ b/pkg/cloudprovider/provider/kubevirt/testdata/affinity.yaml @@ -30,6 +30,7 @@ spec: metadata: annotations: "ovn.kubernetes.io/allow_live_migration": "true" + "kubevirt.io/allow-pod-bridge-network-live-migration": "true" labels: cluster.x-k8s.io/cluster-name: cluster-name cluster.x-k8s.io/role: worker @@ -56,8 +57,7 @@ spec: bus: virtio name: cloudinitdisk interfaces: - - macAddress: b6:f5:b4:fe:45:1d - name: default + - name: default bridge: {} resources: limits: diff --git a/pkg/cloudprovider/provider/kubevirt/testdata/custom-local-disk.yaml b/pkg/cloudprovider/provider/kubevirt/testdata/custom-local-disk.yaml index 1d761053c..767303e29 100644 --- a/pkg/cloudprovider/provider/kubevirt/testdata/custom-local-disk.yaml +++ b/pkg/cloudprovider/provider/kubevirt/testdata/custom-local-disk.yaml @@ -31,6 +31,7 @@ spec: creationTimestamp: null annotations: "ovn.kubernetes.io/allow_live_migration": "true" + "kubevirt.io/allow-pod-bridge-network-live-migration": "true" labels: cluster.x-k8s.io/cluster-name: cluster-name cluster.x-k8s.io/role: worker @@ -48,8 +49,7 @@ spec: bus: virtio name: cloudinitdisk interfaces: - - macAddress: b6:f5:b4:fe:45:1d - name: default + - name: default bridge: {} resources: limits: diff --git a/pkg/cloudprovider/provider/kubevirt/testdata/http-image-source.yaml b/pkg/cloudprovider/provider/kubevirt/testdata/http-image-source.yaml index c5125c087..93fe25186 100644 --- a/pkg/cloudprovider/provider/kubevirt/testdata/http-image-source.yaml +++ b/pkg/cloudprovider/provider/kubevirt/testdata/http-image-source.yaml @@ -30,6 +30,7 @@ spec: creationTimestamp: null annotations: "ovn.kubernetes.io/allow_live_migration": "true" + "kubevirt.io/allow-pod-bridge-network-live-migration": "true" labels: kubevirt.io/vm: http-image-source cluster.x-k8s.io/cluster-name: cluster-name @@ -47,8 +48,7 @@ spec: bus: virtio name: cloudinitdisk interfaces: - - macAddress: b6:f5:b4:fe:45:1d - name: default + - name: default bridge: {} resources: limits: diff --git a/pkg/cloudprovider/provider/kubevirt/testdata/instancetype-preference-custom.yaml b/pkg/cloudprovider/provider/kubevirt/testdata/instancetype-preference-custom.yaml index a27fc8674..4830ac6c6 100644 --- a/pkg/cloudprovider/provider/kubevirt/testdata/instancetype-preference-custom.yaml +++ b/pkg/cloudprovider/provider/kubevirt/testdata/instancetype-preference-custom.yaml @@ -36,6 +36,7 @@ spec: metadata: annotations: "ovn.kubernetes.io/allow_live_migration": "true" + "kubevirt.io/allow-pod-bridge-network-live-migration": "true" labels: cluster.x-k8s.io/cluster-name: cluster-name cluster.x-k8s.io/role: worker @@ -53,8 +54,7 @@ spec: bus: virtio name: cloudinitdisk interfaces: - - macAddress: b6:f5:b4:fe:45:1d - name: default + - name: default bridge: {} networks: - name: default diff --git a/pkg/cloudprovider/provider/kubevirt/testdata/instancetype-preference-standard.yaml b/pkg/cloudprovider/provider/kubevirt/testdata/instancetype-preference-standard.yaml index 718e23d38..20ddfe91e 100644 --- a/pkg/cloudprovider/provider/kubevirt/testdata/instancetype-preference-standard.yaml +++ b/pkg/cloudprovider/provider/kubevirt/testdata/instancetype-preference-standard.yaml @@ -36,6 +36,7 @@ spec: creationTimestamp: null annotations: "ovn.kubernetes.io/allow_live_migration": "true" + "kubevirt.io/allow-pod-bridge-network-live-migration": "true" labels: cluster.x-k8s.io/cluster-name: cluster-name cluster.x-k8s.io/role: worker @@ -53,8 +54,7 @@ spec: bus: virtio name: cloudinitdisk interfaces: - - macAddress: b6:f5:b4:fe:45:1d - name: default + - name: default bridge: {} networks: - name: default diff --git a/pkg/cloudprovider/provider/kubevirt/testdata/nominal-case.yaml b/pkg/cloudprovider/provider/kubevirt/testdata/nominal-case.yaml index bb65126cf..c679f0da1 100644 --- a/pkg/cloudprovider/provider/kubevirt/testdata/nominal-case.yaml +++ b/pkg/cloudprovider/provider/kubevirt/testdata/nominal-case.yaml @@ -30,6 +30,7 @@ spec: creationTimestamp: null annotations: "ovn.kubernetes.io/allow_live_migration": "true" + "kubevirt.io/allow-pod-bridge-network-live-migration": "true" labels: cluster.x-k8s.io/cluster-name: cluster-name cluster.x-k8s.io/role: worker @@ -47,8 +48,7 @@ spec: bus: virtio name: cloudinitdisk interfaces: - - macAddress: b6:f5:b4:fe:45:1d - name: default + - name: default bridge: {} resources: limits: diff --git a/pkg/cloudprovider/provider/kubevirt/testdata/pvc-image-source.yaml b/pkg/cloudprovider/provider/kubevirt/testdata/pvc-image-source.yaml index 20fd7a4ee..7caf5b201 100644 --- a/pkg/cloudprovider/provider/kubevirt/testdata/pvc-image-source.yaml +++ b/pkg/cloudprovider/provider/kubevirt/testdata/pvc-image-source.yaml @@ -31,6 +31,7 @@ spec: creationTimestamp: null annotations: "ovn.kubernetes.io/allow_live_migration": "true" + "kubevirt.io/allow-pod-bridge-network-live-migration": "true" labels: kubevirt.io/vm: pvc-image-source cluster.x-k8s.io/cluster-name: cluster-name @@ -48,8 +49,7 @@ spec: bus: virtio name: cloudinitdisk interfaces: - - macAddress: b6:f5:b4:fe:45:1d - name: default + - name: default bridge: {} resources: limits: 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 7c047af05..f632c05f8 100644 --- a/pkg/cloudprovider/provider/kubevirt/testdata/registry-image-source-pod.yaml +++ b/pkg/cloudprovider/provider/kubevirt/testdata/registry-image-source-pod.yaml @@ -31,6 +31,7 @@ spec: creationTimestamp: null annotations: "ovn.kubernetes.io/allow_live_migration": "true" + "kubevirt.io/allow-pod-bridge-network-live-migration": "true" labels: kubevirt.io/vm: registry-image-source-pod cluster.x-k8s.io/cluster-name: cluster-name @@ -48,8 +49,7 @@ spec: bus: virtio name: cloudinitdisk interfaces: - - macAddress: b6:f5:b4:fe:45:1d - name: default + - name: default bridge: {} resources: limits: diff --git a/pkg/cloudprovider/provider/kubevirt/testdata/registry-image-source.yaml b/pkg/cloudprovider/provider/kubevirt/testdata/registry-image-source.yaml index df5dedac2..3bfcd1a68 100644 --- a/pkg/cloudprovider/provider/kubevirt/testdata/registry-image-source.yaml +++ b/pkg/cloudprovider/provider/kubevirt/testdata/registry-image-source.yaml @@ -31,6 +31,7 @@ spec: creationTimestamp: null annotations: "ovn.kubernetes.io/allow_live_migration": "true" + "kubevirt.io/allow-pod-bridge-network-live-migration": "true" labels: kubevirt.io/vm: registry-image-source cluster.x-k8s.io/cluster-name: cluster-name @@ -48,8 +49,7 @@ spec: bus: virtio name: cloudinitdisk interfaces: - - macAddress: b6:f5:b4:fe:45:1d - name: default + - name: default bridge: {} resources: limits: diff --git a/pkg/cloudprovider/provider/kubevirt/testdata/secondary-disks.yaml b/pkg/cloudprovider/provider/kubevirt/testdata/secondary-disks.yaml index bea429e6f..d563ea7eb 100644 --- a/pkg/cloudprovider/provider/kubevirt/testdata/secondary-disks.yaml +++ b/pkg/cloudprovider/provider/kubevirt/testdata/secondary-disks.yaml @@ -56,6 +56,7 @@ spec: creationTimestamp: null annotations: "ovn.kubernetes.io/allow_live_migration": "true" + "kubevirt.io/allow-pod-bridge-network-live-migration": "true" labels: cluster.x-k8s.io/cluster-name: cluster-name cluster.x-k8s.io/role: worker @@ -79,8 +80,7 @@ spec: bus: virtio name: secondary-disks-secondarydisk1 interfaces: - - macAddress: b6:f5:b4:fe:45:1d - name: default + - name: default bridge: {} resources: limits: diff --git a/pkg/cloudprovider/provider/kubevirt/testdata/topologyspreadconstraints.yaml b/pkg/cloudprovider/provider/kubevirt/testdata/topologyspreadconstraints.yaml index 965429429..ebd161b71 100644 --- a/pkg/cloudprovider/provider/kubevirt/testdata/topologyspreadconstraints.yaml +++ b/pkg/cloudprovider/provider/kubevirt/testdata/topologyspreadconstraints.yaml @@ -30,6 +30,7 @@ spec: creationTimestamp: null annotations: "ovn.kubernetes.io/allow_live_migration": "true" + "kubevirt.io/allow-pod-bridge-network-live-migration": "true" labels: cluster.x-k8s.io/cluster-name: cluster-name cluster.x-k8s.io/role: worker @@ -47,8 +48,7 @@ spec: bus: virtio name: cloudinitdisk interfaces: - - macAddress: b6:f5:b4:fe:45:1d - name: default + - name: default bridge: {} resources: limits: 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 c0246a801..7ba8c9cef 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 @@ -31,6 +31,7 @@ spec: creationTimestamp: null annotations: "ovn.kubernetes.io/allow_live_migration": "true" + "kubevirt.io/allow-pod-bridge-network-live-migration": "true" labels: cluster.x-k8s.io/cluster-name: cluster-name cluster.x-k8s.io/role: worker @@ -48,8 +49,7 @@ spec: bus: virtio name: cloudinitdisk interfaces: - - macAddress: b6:f5:b4:fe:45:1d - name: default + - name: default bridge: {} resources: limits: