From 13c8da29044b13125320972f1d197207436acebe Mon Sep 17 00:00:00 2001 From: yaroslavborbat Date: Sat, 18 Jan 2025 22:37:32 +0300 Subject: [PATCH] fix Signed-off-by: yaroslavborbat --- .../patches/032-hotplug-container-disk.patch | 65 ++++++------------- 1 file changed, 19 insertions(+), 46 deletions(-) diff --git a/images/virt-artifact/patches/032-hotplug-container-disk.patch b/images/virt-artifact/patches/032-hotplug-container-disk.patch index 20b44de509..da478dcfbf 100644 --- a/images/virt-artifact/patches/032-hotplug-container-disk.patch +++ b/images/virt-artifact/patches/032-hotplug-container-disk.patch @@ -533,7 +533,7 @@ index b5d62f5af5..6a3e2b4143 100644 // inject into VMI if ephemeral, else set as a request on the VM to both make permanent and hotplug. diff --git a/pkg/virt-api/webhooks/validating-webhook/admitters/vmi-update-admitter.go b/pkg/virt-api/webhooks/validating-webhook/admitters/vmi-update-admitter.go -index 0af25f8074..59a468730e 100644 +index 0af25f8074..b984ff4262 100644 --- a/pkg/virt-api/webhooks/validating-webhook/admitters/vmi-update-admitter.go +++ b/pkg/virt-api/webhooks/validating-webhook/admitters/vmi-update-admitter.go @@ -200,11 +200,11 @@ func verifyHotplugVolumes(newHotplugVolumeMap, oldHotplugVolumeMap map[string]v1 @@ -550,7 +550,7 @@ index 0af25f8074..59a468730e 100644 }, }) } -@@ -219,19 +219,23 @@ func verifyHotplugVolumes(newHotplugVolumeMap, oldHotplugVolumeMap map[string]v1 +@@ -219,19 +219,19 @@ func verifyHotplugVolumes(newHotplugVolumeMap, oldHotplugVolumeMap map[string]v1 }) } disk := newDisks[k] @@ -565,21 +565,17 @@ index 0af25f8074..59a468730e 100644 }) } - if (disk.Disk == nil || disk.Disk.Bus != "scsi") && (disk.LUN == nil || disk.LUN.Bus != "scsi") { -+ if (disk.Disk != nil && disk.Disk.Bus != v1.DiskBusSCSI) || (disk.LUN != nil && disk.LUN.Bus != v1.DiskBusSCSI) || (disk.CDRom != nil && disk.CDRom.Bus != v1.DiskBusSATA) { -+ bus := v1.DiskBusSCSI -+ if disk.CDRom != nil { -+ bus = v1.DiskBusSATA -+ } ++ if (disk.Disk != nil && disk.Disk.Bus != v1.DiskBusSCSI) || (disk.LUN != nil && disk.LUN.Bus != v1.DiskBusSCSI) || (disk.CDRom != nil && disk.CDRom.Bus != v1.DiskBusSCSI) { return webhookutils.ToAdmissionResponse([]metav1.StatusCause{ { Type: metav1.CauseTypeFieldValueInvalid, - Message: fmt.Sprintf("hotplugged Disk %s does not use a scsi bus", k), -+ Message: fmt.Sprintf("hotplugged Disk %s does not use a %q bus", k, bus), ++ Message: fmt.Sprintf("hotplugged Disk %s does not use a %q bus", k, v1.DiskBusSCSI), }, }) diff --git a/pkg/virt-api/webhooks/validating-webhook/admitters/vms-admitter.go b/pkg/virt-api/webhooks/validating-webhook/admitters/vms-admitter.go -index f7e4f92727..5869638965 100644 +index f7e4f92727..edaf475e05 100644 --- a/pkg/virt-api/webhooks/validating-webhook/admitters/vms-admitter.go +++ b/pkg/virt-api/webhooks/validating-webhook/admitters/vms-admitter.go @@ -591,6 +591,8 @@ func (admitter *VMsAdmitter) validateVolumeRequests(vm *v1.VirtualMachine) ([]me @@ -599,61 +595,38 @@ index f7e4f92727..5869638965 100644 // Validate the disk is configured properly if disk == nil { return []metav1.StatusCause{{ -@@ -675,25 +676,40 @@ func validateDiskConfiguration(disk *v1.Disk, name string) []metav1.StatusCause +@@ -675,19 +676,23 @@ func validateDiskConfiguration(disk *v1.Disk, name string) []metav1.StatusCause Field: k8sfield.NewPath("Status", "volumeRequests").String(), }} } - if disk.DiskDevice.Disk == nil && disk.DiskDevice.LUN == nil { -- return []metav1.StatusCause{{ -- Type: metav1.CauseTypeFieldValueInvalid, -- Message: fmt.Sprintf("AddVolume request for [%s] requires diskDevice of type 'disk' or 'lun' to be used.", name), -- Field: k8sfield.NewPath("Status", "volumeRequests").String(), -- }} -- } -- if disk.DiskDevice.Disk != nil { -- bus = disk.DiskDevice.Disk.Bus -- } else { -- bus = disk.DiskDevice.LUN.Bus -- } -- if bus != "scsi" { ++ var bus v1.DiskBus + switch { + case disk.DiskDevice.Disk != nil: -+ if disk.DiskDevice.Disk.Bus != v1.DiskBusSCSI { -+ return []metav1.StatusCause{{ -+ Type: metav1.CauseTypeFieldValueInvalid, -+ Message: fmt.Sprintf("AddVolume request for [%s] requires disk bus to be 'scsi'. [%s] is not permitted", name, disk.DiskDevice.Disk.Bus), -+ Field: k8sfield.NewPath("Status", "volumeRequests").String(), -+ }} -+ } ++ bus = disk.DiskDevice.Disk.Bus + case disk.DiskDevice.LUN != nil: -+ if disk.DiskDevice.LUN.Bus != v1.DiskBusSCSI { -+ return []metav1.StatusCause{{ -+ Type: metav1.CauseTypeFieldValueInvalid, -+ Message: fmt.Sprintf("AddVolume request for [%s] requires lun bus to be 'scsi'. [%s] is not permitted", name, disk.DiskDevice.LUN.Bus), -+ Field: k8sfield.NewPath("Status", "volumeRequests").String(), -+ }} -+ -+ } ++ bus = disk.DiskDevice.LUN.Bus + case disk.DiskDevice.CDRom != nil: -+ if disk.DiskDevice.CDRom.Bus != v1.DiskBusSATA { -+ return []metav1.StatusCause{{ -+ Type: metav1.CauseTypeFieldValueInvalid, -+ Message: fmt.Sprintf("AddVolume request for [%s] requires cdrom bus to be 'sata'. [%s] is not permitted", name, disk.DiskDevice.CDRom.Bus), -+ Field: k8sfield.NewPath("Status", "volumeRequests").String(), -+ }} -+ } ++ bus = disk.DiskDevice.CDRom.Bus + default: return []metav1.StatusCause{{ Type: metav1.CauseTypeFieldValueInvalid, -- Message: fmt.Sprintf("AddVolume request for [%s] requires disk bus to be 'scsi'. [%s] is not permitted", name, bus), +- Message: fmt.Sprintf("AddVolume request for [%s] requires diskDevice of type 'disk' or 'lun' to be used.", name), + Message: fmt.Sprintf("AddVolume request for [%s] requires diskDevice of type 'disk',lun' or 'cdrom' to be used.", name), Field: k8sfield.NewPath("Status", "volumeRequests").String(), }} } +- if disk.DiskDevice.Disk != nil { +- bus = disk.DiskDevice.Disk.Bus +- } else { +- bus = disk.DiskDevice.LUN.Bus +- } +- if bus != "scsi" { + - if disk.DedicatedIOThread != nil && *disk.DedicatedIOThread { ++ if bus != v1.DiskBusSCSI { return []metav1.StatusCause{{ Type: metav1.CauseTypeFieldValueInvalid, + Message: fmt.Sprintf("AddVolume request for [%s] requires disk bus to be 'scsi'. [%s] is not permitted", name, bus), diff --git a/pkg/virt-controller/services/rendervolumes.go b/pkg/virt-controller/services/rendervolumes.go index 0181fc05e3..de90ed3cbc 100644 --- a/pkg/virt-controller/services/rendervolumes.go