@@ -173,7 +173,8 @@ func applyBlockDeviceRefs(
173173
174174 kvvmVolumes := kvvm .Resource .Spec .Template .Spec .Volumes
175175 for i , bd := range vm .Spec .BlockDeviceRefs {
176- if len (kvvmVolumes ) > 0 && ! slices .ContainsFunc (kvvmVolumes , func (v virtv1.Volume ) bool { return v .Name == GenerateDiskName (bd .Kind , bd .Name ) }) {
176+ diskName := GenerateDiskName (bd .Kind , bd .Name )
177+ if len (kvvmVolumes ) > 0 && ! slices .ContainsFunc (kvvmVolumes , func (v virtv1.Volume ) bool { return v .Name == diskName }) {
177178 continue
178179 }
179180
@@ -186,16 +187,32 @@ func applyBlockDeviceRefs(
186187 kvBootOrder = uint (i ) + 1
187188 }
188189
189- if err := setBlockDeviceDisk (kvvm , bd , kvBootOrder , vdByName , viByName , cviByName ); err != nil {
190+ hotpluggable := isVolumeHotpluggable (kvvmVolumes , diskName )
191+ if err := setBlockDeviceDisk (kvvm , bd , kvBootOrder , hotpluggable , vdByName , viByName , cviByName ); err != nil {
190192 return err
191193 }
192194 }
193195
194196 return nil
195197}
196198
199+ func isVolumeHotpluggable (volumes []virtv1.Volume , name string ) bool {
200+ for _ , v := range volumes {
201+ if v .Name != name {
202+ continue
203+ }
204+ if v .PersistentVolumeClaim != nil {
205+ return v .PersistentVolumeClaim .Hotpluggable
206+ }
207+ if v .ContainerDisk != nil {
208+ return v .ContainerDisk .Hotpluggable
209+ }
210+ }
211+ return true
212+ }
213+
197214func setBlockDeviceDisk (
198- kvvm * KVVM , bd v1alpha2.BlockDeviceSpecRef , bootOrder uint ,
215+ kvvm * KVVM , bd v1alpha2.BlockDeviceSpecRef , bootOrder uint , hotpluggable bool ,
199216 vdByName map [string ]* v1alpha2.VirtualDisk ,
200217 viByName map [string ]* v1alpha2.VirtualImage ,
201218 cviByName map [string ]* v1alpha2.ClusterVirtualImage ,
@@ -209,7 +226,7 @@ func setBlockDeviceDisk(
209226 opts := SetDiskOptions {
210227 Serial : GenerateSerialFromObject (vi ),
211228 BootOrder : bootOrder ,
212- IsHotplugged : true ,
229+ IsHotplugged : hotpluggable ,
213230 }
214231 switch vi .Spec .Storage {
215232 case v1alpha2 .StorageKubernetes , v1alpha2 .StoragePersistentVolumeClaim :
@@ -233,7 +250,7 @@ func setBlockDeviceDisk(
233250 IsCdrom : imageformat .IsISO (cvi .Status .Format ),
234251 Serial : GenerateSerialFromObject (cvi ),
235252 BootOrder : bootOrder ,
236- IsHotplugged : true ,
253+ IsHotplugged : hotpluggable ,
237254 })
238255
239256 case v1alpha2 .DiskDevice :
@@ -248,7 +265,7 @@ func setBlockDeviceDisk(
248265 PersistentVolumeClaim : ptr .To (vd .Status .Target .PersistentVolumeClaim ),
249266 Serial : GenerateSerialFromObject (vd ),
250267 BootOrder : bootOrder ,
251- IsHotplugged : true ,
268+ IsHotplugged : hotpluggable ,
252269 })
253270
254271 default :
0 commit comments