diff --git a/images/virtualization-artifact/go.mod b/images/virtualization-artifact/go.mod index 81a3b679f6..895c1ed922 100644 --- a/images/virtualization-artifact/go.mod +++ b/images/virtualization-artifact/go.mod @@ -145,7 +145,10 @@ require ( sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 // indirect ) -replace github.com/deckhouse/virtualization/api => ./../../api +replace ( + github.com/deckhouse/virtualization/api => ./../../api + kubevirt.io/api => github.com/deckhouse/3p-kubevirt-api v1.3.1-v12n.0 +) replace ( k8s.io/api => k8s.io/api v0.33.3 diff --git a/images/virtualization-artifact/go.sum b/images/virtualization-artifact/go.sum index 409ba2d635..c9d9e3694b 100644 --- a/images/virtualization-artifact/go.sum +++ b/images/virtualization-artifact/go.sum @@ -45,6 +45,8 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/deckhouse/3p-kubevirt-api v1.3.1-v12n.0 h1:Tygrxudb159/H4ozBY+jvVhNWWGP6GYNYz8Hg8k2Sok= +github.com/deckhouse/3p-kubevirt-api v1.3.1-v12n.0/go.mod h1:tCn7VAZktEvymk490iPSMPCmKM9UjbbfH2OsFR/IOLU= github.com/deckhouse/deckhouse/pkg/log v0.0.0-20250226105106-176cd3afcdd5 h1:PsN1E0oxC/+4zdA977txrqUCuObFL3HAuu5Xnud8m8c= github.com/deckhouse/deckhouse/pkg/log v0.0.0-20250226105106-176cd3afcdd5/go.mod h1:Mk5HRzkc5pIcDIZ2JJ6DPuuqnwhXVkb3you8M8Mg+4w= github.com/distribution/reference v0.5.0 h1:/FUIFXtfc/x2gpa5/VGfiGLuOIdYa1t65IKK2OFGvA0= diff --git a/images/virtualization-artifact/pkg/controller/kvbuilder/kvvm.go b/images/virtualization-artifact/pkg/controller/kvbuilder/kvvm.go index e436c84d60..676614e794 100644 --- a/images/virtualization-artifact/pkg/controller/kvbuilder/kvvm.go +++ b/images/virtualization-artifact/pkg/controller/kvbuilder/kvvm.go @@ -373,7 +373,8 @@ func (b *KVVM) SetDisk(name string, opts SetDiskOptions) error { case opts.ContainerDisk != nil: vs.ContainerDisk = &virtv1.ContainerDiskSource{ - Image: *opts.ContainerDisk, + Image: *opts.ContainerDisk, + Hotpluggable: opts.IsHotplugged, } case opts.Provisioning != nil: diff --git a/images/virtualization-artifact/pkg/controller/kvbuilder/kvvm_utils.go b/images/virtualization-artifact/pkg/controller/kvbuilder/kvvm_utils.go index 324ba440db..95a7c9b7fe 100644 --- a/images/virtualization-artifact/pkg/controller/kvbuilder/kvvm_utils.go +++ b/images/virtualization-artifact/pkg/controller/kvbuilder/kvvm_utils.go @@ -84,6 +84,7 @@ type HotPlugDeviceSettings struct { VolumeName string PVCName string DataVolumeName string + ImageName string } func ApplyVirtualMachineSpec( @@ -130,11 +131,10 @@ func ApplyVirtualMachineSpec( PVCName: volume.PersistentVolumeClaim.ClaimName, }) } - // FIXME(VM): not used, now only supports PVC - if volume.DataVolume != nil && volume.DataVolume.Hotpluggable { + if volume.ContainerDisk != nil && volume.ContainerDisk.Hotpluggable { hotpluggedDevices = append(hotpluggedDevices, HotPlugDeviceSettings{ - VolumeName: volume.Name, - DataVolumeName: volume.DataVolume.Name, + VolumeName: volume.Name, + ImageName: volume.ContainerDisk.Image, }) } } @@ -227,8 +227,13 @@ func ApplyVirtualMachineSpec( }); err != nil { return err } - // FIXME(VM): not used, now only supports PVC - case device.DataVolumeName != "": + case device.ImageName != "": + if err := kvvm.SetDisk(device.VolumeName, SetDiskOptions{ + ContainerDisk: pointer.GetPointer(device.ImageName), + IsHotplugged: true, + }); err != nil { + return err + } } } if err := kvvm.SetProvisioning(vm.Spec.Provisioning); err != nil {