all lists on lists.proxmox.com
 help / color / mirror / Atom feed
* [pve-devel] [PATCH qemu-server 1/6] pci: add get_pci_addr
       [not found] <20250627124228.1542397-1-alexandre.derumier@groupe-cyllene.com>
@ 2025-06-27 12:42 ` Alexandre Derumier via pve-devel
  2025-06-27 12:42 ` [pve-devel] [PATCH qemu-server 2/6] qmphelpers: add qmp_deviceadd && qmp_devicedel Alexandre Derumier via pve-devel
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 6+ messages in thread
From: Alexandre Derumier via pve-devel @ 2025-06-27 12:42 UTC (permalink / raw)
  To: pve-devel; +Cc: Alexandre Derumier

[-- Attachment #1: Type: message/rfc822, Size: 4669 bytes --]

From: Alexandre Derumier <alexandre.derumier@groupe-cyllene.com>
To: pve-devel@lists.proxmox.com
Subject: [PATCH qemu-server 1/6] pci: add get_pci_addr
Date: Fri, 27 Jun 2025 14:42:23 +0200
Message-ID: <20250627124228.1542397-2-alexandre.derumier@groupe-cyllene.com>

return a hash with pci bus && pci address

Signed-off-by: Alexandre Derumier <alexandre.derumier@groupe-cyllene.com>
---
 src/PVE/QemuServer/PCI.pm | 22 +++++++++++++++++-----
 1 file changed, 17 insertions(+), 5 deletions(-)

diff --git a/src/PVE/QemuServer/PCI.pm b/src/PVE/QemuServer/PCI.pm
index ddf2f028..7952dc61 100644
--- a/src/PVE/QemuServer/PCI.pm
+++ b/src/PVE/QemuServer/PCI.pm
@@ -16,6 +16,7 @@ use PVE::QemuServer::Machine;
 use base 'Exporter';
 
 our @EXPORT_OK = qw(
+    get_pci_addr
     print_pci_addr
     print_pcie_addr
     print_pcie_root_port
@@ -288,27 +289,38 @@ my $get_addr_mapping_from_id = sub {
     return { bus => $d->{bus}, addr => sprintf("0x%x", $d->{addr}) };
 };
 
-sub print_pci_addr {
+sub get_pci_addr {
     my ($id, $bridges, $arch) = @_;
 
-    my $res = '';
+    my $res = {};
 
     # using same bus slots on all HW, so we need to check special cases here:
     my $busname = 'pci';
     if ($arch eq 'aarch64') {
-        die "aarch64 cannot use IDE devices\n" if $id =~ /^ide/;
-        $busname = 'pcie';
+	die "aarch64 cannot use IDE devices\n" if $id =~ /^ide/;
+	$busname = 'pcie';
     }
 
     my $map = get_pci_addr_map();
     if (my $d = $get_addr_mapping_from_id->($map, $id)) {
-        $res = ",bus=$busname.$d->{bus},addr=$d->{addr}";
+        $res = { bus => "$busname.$d->{bus}", addr => $d->{addr} };
         $bridges->{ $d->{bus} } = 1 if $bridges;
     }
 
     return $res;
 }
 
+
+sub print_pci_addr {
+    my ($id, $bridges, $arch) = @_;
+
+    my $pci = get_pci_addr($id, $bridges, $arch);
+    my $res = "";
+    $res.=",bus=$pci->{bus}" if $pci->{bus};
+    $res.=",addr=$pci->{addr}" if $pci->{addr};
+    return $res;
+}
+
 my $pcie_addr_map;
 
 sub get_pcie_addr_map {
-- 
2.39.5



[-- Attachment #2: Type: text/plain, Size: 160 bytes --]

_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [pve-devel] [PATCH qemu-server 2/6] qmphelpers: add qmp_deviceadd && qmp_devicedel
       [not found] <20250627124228.1542397-1-alexandre.derumier@groupe-cyllene.com>
  2025-06-27 12:42 ` [pve-devel] [PATCH qemu-server 1/6] pci: add get_pci_addr Alexandre Derumier via pve-devel
@ 2025-06-27 12:42 ` Alexandre Derumier via pve-devel
  2025-06-27 12:42 ` [pve-devel] [PATCH qemu-server 3/6] convert drive device to json format Alexandre Derumier via pve-devel
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 6+ messages in thread
From: Alexandre Derumier via pve-devel @ 2025-06-27 12:42 UTC (permalink / raw)
  To: pve-devel; +Cc: Alexandre Derumier

[-- Attachment #1: Type: message/rfc822, Size: 4052 bytes --]

From: Alexandre Derumier <alexandre.derumier@groupe-cyllene.com>
To: pve-devel@lists.proxmox.com
Subject: [PATCH qemu-server 2/6] qmphelpers: add qmp_deviceadd && qmp_devicedel
Date: Fri, 27 Jun 2025 14:42:24 +0200
Message-ID: <20250627124228.1542397-3-alexandre.derumier@groupe-cyllene.com>

old hmp methos can be removed when everything will be
converted to hash/json

Signed-off-by: Alexandre Derumier <alexandre.derumier@groupe-cyllene.com>
---
 src/PVE/QemuServer/QMPHelpers.pm | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/src/PVE/QemuServer/QMPHelpers.pm b/src/PVE/QemuServer/QMPHelpers.pm
index c3be2b8e..327ecec4 100644
--- a/src/PVE/QemuServer/QMPHelpers.pm
+++ b/src/PVE/QemuServer/QMPHelpers.pm
@@ -9,6 +9,8 @@ use PVE::QemuServer::Monitor qw(mon_cmd);
 use base 'Exporter';
 
 our @EXPORT_OK = qw(
+    qmp_deviceadd
+    qmp_devicedel
     qemu_deviceadd
     qemu_devicedel
     qemu_objectadd
@@ -35,6 +37,20 @@ sub qemu_devicedel {
     PVE::QemuServer::Monitor::hmp_cmd($vmid, "device_del $deviceid", 25);
 }
 
+sub qmp_deviceadd {
+    my ($vmid, $opts) = @_;
+
+    $opts->{timeout} = 25;
+    mon_cmd($vmid, "device_add", %$opts);
+}
+
+sub qmp_devicedel {
+    my ($vmid, $deviceid) = @_;
+
+    my $opts = { id => $deviceid, timeout => 25 };
+    mon_cmd($vmid, "device_del", %$opts);
+}
+
 sub qemu_objectadd {
     my ($vmid, $objectid, $qomtype) = @_;
 
-- 
2.39.5



[-- Attachment #2: Type: text/plain, Size: 160 bytes --]

_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [pve-devel] [PATCH qemu-server 3/6] convert drive device to json format
       [not found] <20250627124228.1542397-1-alexandre.derumier@groupe-cyllene.com>
  2025-06-27 12:42 ` [pve-devel] [PATCH qemu-server 1/6] pci: add get_pci_addr Alexandre Derumier via pve-devel
  2025-06-27 12:42 ` [pve-devel] [PATCH qemu-server 2/6] qmphelpers: add qmp_deviceadd && qmp_devicedel Alexandre Derumier via pve-devel
@ 2025-06-27 12:42 ` Alexandre Derumier via pve-devel
  2025-06-27 12:42 ` [pve-devel] [PATCH qemu-server 4/6] convert iothread to json Alexandre Derumier via pve-devel
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 6+ messages in thread
From: Alexandre Derumier via pve-devel @ 2025-06-27 12:42 UTC (permalink / raw)
  To: pve-devel; +Cc: Alexandre Derumier

[-- Attachment #1: Type: message/rfc822, Size: 12939 bytes --]

From: Alexandre Derumier <alexandre.derumier@groupe-cyllene.com>
To: pve-devel@lists.proxmox.com
Subject: [PATCH qemu-server 3/6] convert drive device to json format
Date: Fri, 27 Jun 2025 14:42:25 +0200
Message-ID: <20250627124228.1542397-4-alexandre.derumier@groupe-cyllene.com>

Signed-off-by: Alexandre Derumier <alexandre.derumier@groupe-cyllene.com>
---
 src/PVE/QemuServer.pm             | 26 ++++++------
 src/PVE/QemuServer/DriveDevice.pm | 70 +++++++++++++++++--------------
 2 files changed, 51 insertions(+), 45 deletions(-)

diff --git a/src/PVE/QemuServer.pm b/src/PVE/QemuServer.pm
index a5b5ad33..035034ec 100644
--- a/src/PVE/QemuServer.pm
+++ b/src/PVE/QemuServer.pm
@@ -72,7 +72,7 @@ use PVE::QemuServer::Drive qw(
     print_drive
     storage_allows_io_uring_default
 );
-use PVE::QemuServer::DriveDevice qw(print_drivedevice_controller print_drivedevice_full print_drivedevice_iothread scsihw_infos);
+use PVE::QemuServer::DriveDevice qw(print_drivedevice_controller get_drivedevice print_drivedevice_iothread scsihw_infos);
 use PVE::QemuServer::Machine;
 use PVE::QemuServer::Memory qw(get_current_memory);
 use PVE::QemuServer::MetaInfo;
@@ -81,7 +81,7 @@ use PVE::QemuServer::Network;
 use PVE::QemuServer::OVMF;
 use PVE::QemuServer::PCI qw(print_pci_addr print_pcie_addr print_pcie_root_port parse_hostpci);
 use PVE::QemuServer::QemuImage;
-use PVE::QemuServer::QMPHelpers qw(qemu_deviceadd qemu_devicedel qemu_objectadd qemu_objectdel);
+use PVE::QemuServer::QMPHelpers qw(qemu_deviceadd qemu_devicedel qemu_objectadd qemu_objectdel qmp_deviceadd qmp_devicedel);
 use PVE::QemuServer::RNG qw(parse_rng print_rng_device_commandline print_rng_object_commandline);
 use PVE::QemuServer::RunState;
 use PVE::QemuServer::StateFile;
@@ -3504,10 +3504,8 @@ sub config_to_command {
                 push @$devices, '-drive', $drive_cmd;
             }
 
-            push @$devices, '-device',
-                print_drivedevice_full(
-                    $storecfg, $conf, $vmid, $drive, $bridges, $arch, $machine_type,
-                );
+            my $drive_device = get_drivedevice($storecfg, $conf, $vmid, $drive, $bridges, $arch, $machine_type);
+            push @$devices, '-device', to_json($drive_device, { canonical => 1 });
         },
     );
 
@@ -3736,10 +3734,10 @@ sub vm_deviceplug {
         qemu_iothread_add($vmid, $deviceid, $device);
 
         qemu_driveadd($storecfg, $vmid, $device);
-        my $devicefull =
-            print_drivedevice_full($storecfg, $conf, $vmid, $device, undef, $arch, $machine_type);
+        my $drive_device =
+            get_drivedevice($storecfg, $conf, $vmid, $device, undef, $arch, $machine_type);
 
-        qemu_deviceadd($vmid, $devicefull);
+        qmp_deviceadd($vmid, $drive_device);
         eval { qemu_deviceaddverify($vmid, $deviceid); };
         if (my $err = $@) {
             eval { qemu_drivedel($vmid, $deviceid); };
@@ -3758,9 +3756,9 @@ sub vm_deviceplug {
         qemu_findorcreatescsihw($storecfg, $conf, $vmid, $device, $arch, $machine_type);
         qemu_driveadd($storecfg, $vmid, $device);
 
-        my $devicefull =
-            print_drivedevice_full($storecfg, $conf, $vmid, $device, undef, $arch, $machine_type);
-        eval { qemu_deviceadd($vmid, $devicefull); };
+        my $drive_device =
+            get_drivedevice($storecfg, $conf, $vmid, $device, undef, $arch, $machine_type);
+        eval { qmp_deviceadd($vmid, $drive_device); };
         if (my $err = $@) {
             eval { qemu_drivedel($vmid, $deviceid); };
             warn $@ if $@;
@@ -3829,7 +3827,7 @@ sub vm_deviceunplug {
     } elsif ($deviceid =~ m/^(virtio)(\d+)$/) {
         my $device = parse_drive($deviceid, $conf->{$deviceid});
 
-        qemu_devicedel($vmid, $deviceid);
+        qmp_devicedel($vmid, $deviceid);
         qemu_devicedelverify($vmid, $deviceid);
         qemu_drivedel($vmid, $deviceid);
         qemu_iothread_del($vmid, $deviceid, $device);
@@ -3839,7 +3837,7 @@ sub vm_deviceunplug {
     } elsif ($deviceid =~ m/^(scsi)(\d+)$/) {
         my $device = parse_drive($deviceid, $conf->{$deviceid});
 
-        qemu_devicedel($vmid, $deviceid);
+        qmp_devicedel($vmid, $deviceid);
         qemu_devicedelverify($vmid, $deviceid);
         qemu_drivedel($vmid, $deviceid);
         qemu_deletescsihw($conf, $vmid, $deviceid);
diff --git a/src/PVE/QemuServer/DriveDevice.pm b/src/PVE/QemuServer/DriveDevice.pm
index 1e875cb9..103180f3 100644
--- a/src/PVE/QemuServer/DriveDevice.pm
+++ b/src/PVE/QemuServer/DriveDevice.pm
@@ -8,12 +8,12 @@ use URI::Escape;
 use PVE::QemuServer::Drive qw (drive_is_cdrom);
 use PVE::QemuServer::Helpers qw(kvm_user_version min_version);
 use PVE::QemuServer::Machine;
-use PVE::QemuServer::PCI qw(print_pci_addr);
+use PVE::QemuServer::PCI qw(get_pci_addr print_pci_addr);
 
 use base qw(Exporter);
 
 our @EXPORT_OK = qw(
-    print_drivedevice_full
+    get_drivedevice
     print_drivedevice_controller
     print_drivedevice_iothread
     scsihw_infos
@@ -41,24 +41,28 @@ sub scsihw_infos {
     return ($maxdev, $controller, $controller_prefix);
 }
 
-sub print_drivedevice_full {
+sub get_drivedevice {
     my ($storecfg, $conf, $vmid, $drive, $bridges, $arch, $machine_type) = @_;
 
-    my $device = '';
+    my $device = {};
+
     my $maxdev = 0;
 
     my $machine_version = PVE::QemuServer::Machine::extract_version($machine_type, kvm_user_version());
 
     my $drive_id = PVE::QemuServer::Drive::get_drive_id($drive);
+
     if ($drive->{interface} eq 'virtio') {
-	my $pciaddr = print_pci_addr("$drive_id", $bridges, $arch);
-	$device = 'virtio-blk-pci';
+	my $pciaddr = get_pci_addr("$drive_id", $bridges, $arch);
+	$device->{bus} = $pciaddr->{bus};
+	$device->{addr} = $pciaddr->{addr};
+	$device->{driver} = 'virtio-blk-pci';
 	# for the switch to -blockdev, there is no blockdev for 'none'
 	if (!min_version($machine_version, 10, 0) || $drive->{file} ne 'none') {
-	    $device .= ",drive=drive-$drive_id";
+	    $device->{drive} = "drive-$drive_id";
 	}
-	$device .= ",id=${drive_id}${pciaddr}";
-	$device .= ",iothread=iothread-$drive_id" if $drive->{iothread};
+	$device->{id} = $drive_id;
+	$device->{iothread} = "iothread-$drive_id" if $drive->{iothread};
     } elsif ($drive->{interface} eq 'scsi') {
 
 	my ($maxdev, $controller, $controller_prefix) = scsihw_infos($conf, $drive);
@@ -67,30 +71,34 @@ sub print_drivedevice_full {
 	my $device_type =
 	    PVE::QemuServer::Drive::get_scsi_device_type($drive, $storecfg, $machine_version);
 
+	$device->{driver} = "scsi-$device_type";
+	$device->{bus} = "$controller_prefix$controller.0";
+
 	if (!$conf->{scsihw} || $conf->{scsihw} =~ m/^lsi/ || $conf->{scsihw} eq 'pvscsi') {
-	    $device = "scsi-$device_type,bus=$controller_prefix$controller.0,scsi-id=$unit";
+	    $device->{'scsi-id'} = $unit;
 	} else {
-	    $device = "scsi-$device_type,bus=$controller_prefix$controller.0,channel=0,scsi-id=0"
-		. ",lun=$drive->{index}";
+	    $device->{'scsi-id'} = 0;
+	    $device->{channel} = 0;
+	    $device->{lun} = int($drive->{index});
 	}
 	# for the switch to -blockdev, there is no blockdev for 'none'
 	if (!min_version($machine_version, 10, 0) || $drive->{file} ne 'none') {
-	    $device .= ",drive=drive-$drive_id";
+	    $device->{drive} = "drive-$drive_id";
 	}
-	$device .= ",id=$drive_id";
+	$device->{id} = "$drive_id";
 
 	if ($drive->{ssd} && ($device_type eq 'block' || $device_type eq 'hd')) {
-	    $device .= ",rotation_rate=1";
+	    $device->{'rotation-rate'} = 1;
 	}
-	$device .= ",wwn=$drive->{wwn}" if $drive->{wwn};
+	$device->{wwn} = $drive->{wwn} if $drive->{wwn};
 
 	# only scsi-hd and scsi-cd support passing vendor and product information
 	if ($device_type eq 'hd' || $device_type eq 'cd') {
 	    if (my $vendor = $drive->{vendor}) {
-		$device .= ",vendor=$vendor";
+		$device->{vendor} = $vendor;
 	    }
 	    if (my $product = $drive->{product}) {
-		$device .= ",product=$product";
+		$device->{product} = $product;
 	    }
 	}
 
@@ -111,27 +119,28 @@ sub print_drivedevice_full {
 
 	my $device_type = ($drive->{media} && $drive->{media} eq 'cdrom') ? "cd" : "hd";
 
-	$device = "ide-$device_type";
+	$device->{driver} = "ide-$device_type";
 	if ($drive->{interface} eq 'ide') {
-	    $device .= ",bus=ide.$controller,unit=$unit";
+	    $device->{bus} = "ide.$controller";
+	    $device->{unit} = $unit;
 	} else {
-	    $device .= ",bus=ahci$controller.$unit";
+	    $device->{bus} = "ahci$controller.$unit";
 	}
 	if (!min_version($machine_version, 10, 0) || $drive->{file} ne 'none') {
-	    $device .= ",drive=drive-$drive_id";
+	    $device->{drive} = "drive-$drive_id";
 	}
-	$device .= ",id=$drive_id";
+	$drive->{id} = $drive_id;
 
 	if ($device_type eq 'hd') {
 	    if (my $model = $drive->{model}) {
 		$model = URI::Escape::uri_unescape($model);
-		$device .= ",model=$model";
+		$device->{model} = $model;
 	    }
 	    if ($drive->{ssd}) {
-		$device .= ",rotation_rate=1";
+		$device->{'rotation-rate'} = 1;
 	    }
 	}
-	$device .= ",wwn=$drive->{wwn}" if $drive->{wwn};
+	$device->{wwn} = $drive->{wwn} if $drive->{wwn};
     } elsif ($drive->{interface} eq 'usb') {
 	die "implement me";
 	#  -device ide-drive,bus=ide.1,unit=0,drive=drive-ide0-1-0,id=ide0-1-0
@@ -139,11 +148,10 @@ sub print_drivedevice_full {
 	die "unsupported interface type";
     }
 
-    $device .= ",bootindex=$drive->{bootindex}" if $drive->{bootindex};
+    $device->{bootindex} = $drive->{bootindex} if $drive->{bootindex};
 
     if (my $serial = $drive->{serial}) {
-	$serial = URI::Escape::uri_unescape($serial);
-	$device .= ",serial=$serial";
+	$device->{serial} = URI::Escape::uri_unescape($serial);
     }
 
     if (min_version($machine_version, 10, 0)) { # for the switch to -blockdev
@@ -152,10 +160,10 @@ sub print_drivedevice_full {
 	    if (my $cache = $drive->{cache}) {
 		$write_cache = 'off' if $cache eq 'writethrough' || $cache eq 'directsync';
 	    }
-	    $device .= ",write-cache=$write_cache";
+	    $device->{'write-cache'} = $write_cache;
 	}
 	for my $o (qw(rerror werror)) {
-	    $device .= ",$o=$drive->{$o}" if defined($drive->{$o});
+	    $device->{$o} = $drive->{$o} if defined($drive->{$o});
 	}
     }
 
-- 
2.39.5



[-- Attachment #2: Type: text/plain, Size: 160 bytes --]

_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [pve-devel] [PATCH qemu-server 4/6] convert iothread to json
       [not found] <20250627124228.1542397-1-alexandre.derumier@groupe-cyllene.com>
                   ` (2 preceding siblings ...)
  2025-06-27 12:42 ` [pve-devel] [PATCH qemu-server 3/6] convert drive device to json format Alexandre Derumier via pve-devel
@ 2025-06-27 12:42 ` Alexandre Derumier via pve-devel
  2025-06-27 12:42 ` [pve-devel] [PATCH qemu-server 5/6] convert disk controller device to json format Alexandre Derumier via pve-devel
  2025-06-27 12:42 ` [pve-devel] [PATCH qemu-server 6/6] tests: cfg2cmd: convert drive devices " Alexandre Derumier via pve-devel
  5 siblings, 0 replies; 6+ messages in thread
From: Alexandre Derumier via pve-devel @ 2025-06-27 12:42 UTC (permalink / raw)
  To: pve-devel; +Cc: Alexandre Derumier

[-- Attachment #1: Type: message/rfc822, Size: 5951 bytes --]

From: Alexandre Derumier <alexandre.derumier@groupe-cyllene.com>
To: pve-devel@lists.proxmox.com
Subject: [PATCH qemu-server 4/6] convert iothread to json
Date: Fri, 27 Jun 2025 14:42:26 +0200
Message-ID: <20250627124228.1542397-5-alexandre.derumier@groupe-cyllene.com>

Signed-off-by: Alexandre Derumier <alexandre.derumier@groupe-cyllene.com>
---
 src/PVE/QemuServer.pm             | 8 ++++----
 src/PVE/QemuServer/DriveDevice.pm | 8 ++++----
 2 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/src/PVE/QemuServer.pm b/src/PVE/QemuServer.pm
index 035034ec..6ee156e2 100644
--- a/src/PVE/QemuServer.pm
+++ b/src/PVE/QemuServer.pm
@@ -72,7 +72,7 @@ use PVE::QemuServer::Drive qw(
     print_drive
     storage_allows_io_uring_default
 );
-use PVE::QemuServer::DriveDevice qw(print_drivedevice_controller get_drivedevice print_drivedevice_iothread scsihw_infos);
+use PVE::QemuServer::DriveDevice qw(print_drivedevice_controller get_drivedevice get_drivedevice_iothread scsihw_infos);
 use PVE::QemuServer::Machine;
 use PVE::QemuServer::Memory qw(get_current_memory);
 use PVE::QemuServer::MetaInfo;
@@ -3464,8 +3464,8 @@ sub config_to_command {
 
             $drive->{bootindex} = $bootorder->{$ds} if $bootorder->{$ds};
 
-	    my $iothread = print_drivedevice_iothread($conf, $drive);
-	    push @$cmd, '-object', $iothread if $iothread;
+            my $iothread = get_drivedevice_iothread($conf, $drive);
+            push @$cmd, '-object', to_json($iothread, { canonical => 1 }) if $iothread;
 
             my $controller = print_drivedevice_controller($conf, $drive, $iothread, $scsihw, $arch, $bridges, $used_controller);
             push @$devices, '-device', $controller if $controller;
@@ -3746,7 +3746,7 @@ sub vm_deviceplug {
         }
     } elsif ($deviceid =~ m/^(virtioscsi|scsihw)(\d+)$/) {
         my $scsihw = defined($conf->{scsihw}) ? $conf->{scsihw} : "lsi";
-        my $iothread = print_drivedevice_iothread($conf, $device);
+        my $iothread = get_drivedevice_iothread($conf, $device);
         my $controller = print_drivedevice_controller($conf, $device, $iothread, $scsihw, $arch);
 
         qemu_iothread_add($vmid, $deviceid, $device) if $iothread;
diff --git a/src/PVE/QemuServer/DriveDevice.pm b/src/PVE/QemuServer/DriveDevice.pm
index 103180f3..ab62c4ff 100644
--- a/src/PVE/QemuServer/DriveDevice.pm
+++ b/src/PVE/QemuServer/DriveDevice.pm
@@ -15,7 +15,7 @@ use base qw(Exporter);
 our @EXPORT_OK = qw(
     get_drivedevice
     print_drivedevice_controller
-    print_drivedevice_iothread
+    get_drivedevice_iothread
     scsihw_infos
 );
 
@@ -211,13 +211,13 @@ sub print_drivedevice_controller {
     }
 }
 
-sub print_drivedevice_iothread {
+sub get_drivedevice_iothread {
     my ($conf, $drive) = @_;
 
     my $drive_id = PVE::QemuServer::Drive::get_drive_id($drive);
 
     if ($drive->{interface} eq 'virtio') {
-	return "iothread,id=iothread-$drive_id" if $drive->{iothread};
+	return {'qom-type' => 'iothread', id => "iothread-$drive_id"} if $drive->{iothread};
     }
 
     if ($drive->{interface} eq 'scsi') {
@@ -229,7 +229,7 @@ sub print_drivedevice_iothread {
 	    && $conf->{scsihw} eq "virtio-scsi-single"
 	    && $drive->{iothread}
 	) {
-	    return "iothread,id=iothread-$controller_prefix$controller";
+	    return {'qom-type' => 'iothread', id => "iothread-$controller_prefix$controller"};
 	} elsif ($drive->{iothread}) {
 	    log_warn(
 		"iothread is only valid with virtio disk or virtio-scsi-single controller, ignoring\n"
-- 
2.39.5



[-- Attachment #2: Type: text/plain, Size: 160 bytes --]

_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [pve-devel] [PATCH qemu-server 5/6] convert disk controller device to json format
       [not found] <20250627124228.1542397-1-alexandre.derumier@groupe-cyllene.com>
                   ` (3 preceding siblings ...)
  2025-06-27 12:42 ` [pve-devel] [PATCH qemu-server 4/6] convert iothread to json Alexandre Derumier via pve-devel
@ 2025-06-27 12:42 ` Alexandre Derumier via pve-devel
  2025-06-27 12:42 ` [pve-devel] [PATCH qemu-server 6/6] tests: cfg2cmd: convert drive devices " Alexandre Derumier via pve-devel
  5 siblings, 0 replies; 6+ messages in thread
From: Alexandre Derumier via pve-devel @ 2025-06-27 12:42 UTC (permalink / raw)
  To: pve-devel; +Cc: Alexandre Derumier

[-- Attachment #1: Type: message/rfc822, Size: 8033 bytes --]

From: Alexandre Derumier <alexandre.derumier@groupe-cyllene.com>
To: pve-devel@lists.proxmox.com
Subject: [PATCH qemu-server 5/6] convert disk controller device to json format
Date: Fri, 27 Jun 2025 14:42:27 +0200
Message-ID: <20250627124228.1542397-6-alexandre.derumier@groupe-cyllene.com>

Signed-off-by: Alexandre Derumier <alexandre.derumier@groupe-cyllene.com>
---
 src/PVE/QemuServer.pm             | 12 ++++++------
 src/PVE/QemuServer/DriveDevice.pm | 23 +++++++++++------------
 2 files changed, 17 insertions(+), 18 deletions(-)

diff --git a/src/PVE/QemuServer.pm b/src/PVE/QemuServer.pm
index 6ee156e2..e43cf41f 100644
--- a/src/PVE/QemuServer.pm
+++ b/src/PVE/QemuServer.pm
@@ -72,7 +72,7 @@ use PVE::QemuServer::Drive qw(
     print_drive
     storage_allows_io_uring_default
 );
-use PVE::QemuServer::DriveDevice qw(print_drivedevice_controller get_drivedevice get_drivedevice_iothread scsihw_infos);
+use PVE::QemuServer::DriveDevice qw(get_drivedevice_controller get_drivedevice get_drivedevice_iothread scsihw_infos);
 use PVE::QemuServer::Machine;
 use PVE::QemuServer::Memory qw(get_current_memory);
 use PVE::QemuServer::MetaInfo;
@@ -3467,8 +3467,8 @@ sub config_to_command {
             my $iothread = get_drivedevice_iothread($conf, $drive);
             push @$cmd, '-object', to_json($iothread, { canonical => 1 }) if $iothread;
 
-            my $controller = print_drivedevice_controller($conf, $drive, $iothread, $scsihw, $arch, $bridges, $used_controller);
-            push @$devices, '-device', $controller if $controller;
+            my $drive_controller = get_drivedevice_controller($conf, $drive, $iothread, $scsihw, $arch, $bridges, $used_controller);
+            push @$devices, '-device', to_json($drive_controller, { canonical => 1 }) if $drive_controller;
 
             my $live_restore = $live_restore_backing->{$ds};
             my $live_blockdev_name = undef;
@@ -3747,10 +3747,10 @@ sub vm_deviceplug {
     } elsif ($deviceid =~ m/^(virtioscsi|scsihw)(\d+)$/) {
         my $scsihw = defined($conf->{scsihw}) ? $conf->{scsihw} : "lsi";
         my $iothread = get_drivedevice_iothread($conf, $device);
-        my $controller = print_drivedevice_controller($conf, $device, $iothread, $scsihw, $arch);
+        my $controller = get_drivedevice_controller($conf, $device, $iothread, $scsihw, $arch);
 
         qemu_iothread_add($vmid, $deviceid, $device) if $iothread;
-        qemu_deviceadd($vmid, $controller);
+        qmp_deviceadd($vmid, $controller);
         qemu_deviceaddverify($vmid, $deviceid);
     } elsif ($deviceid =~ m/^(scsi)(\d+)$/) {
         qemu_findorcreatescsihw($storecfg, $conf, $vmid, $device, $arch, $machine_type);
@@ -3832,7 +3832,7 @@ sub vm_deviceunplug {
         qemu_drivedel($vmid, $deviceid);
         qemu_iothread_del($vmid, $deviceid, $device);
     } elsif ($deviceid =~ m/^(virtioscsi|scsihw)(\d+)$/) {
-        qemu_devicedel($vmid, $deviceid);
+        qmp_devicedel($vmid, $deviceid);
         qemu_devicedelverify($vmid, $deviceid);
     } elsif ($deviceid =~ m/^(scsi)(\d+)$/) {
         my $device = parse_drive($deviceid, $conf->{$deviceid});
diff --git a/src/PVE/QemuServer/DriveDevice.pm b/src/PVE/QemuServer/DriveDevice.pm
index ab62c4ff..6c478ca6 100644
--- a/src/PVE/QemuServer/DriveDevice.pm
+++ b/src/PVE/QemuServer/DriveDevice.pm
@@ -14,7 +14,7 @@ use base qw(Exporter);
 
 our @EXPORT_OK = qw(
     get_drivedevice
-    print_drivedevice_controller
+    get_drivedevice_controller
     get_drivedevice_iothread
     scsihw_infos
 );
@@ -170,7 +170,7 @@ sub get_drivedevice {
     return $device;
 }
 
-sub print_drivedevice_controller {
+sub get_drivedevice_controller {
     my ($conf, $drive, $iothread_enabled, $scsihw, $arch, $bridges, $used_controller) = @_;
 
     if ($drive->{interface} eq 'scsi') {
@@ -178,36 +178,35 @@ sub print_drivedevice_controller {
 	my ($maxdev, $controller, $controller_prefix) = scsihw_infos($conf, $drive);
 	return if $used_controller->{scsi}->{$controller};
 
-	my $pciaddr = print_pci_addr("$controller_prefix$controller", $bridges, $arch);
+	my $controllerid = "$controller_prefix$controller";
+	my $pciaddr = get_pci_addr($controllerid, $bridges, $arch);
 	my $scsihw_type =
 	    $scsihw =~ m/^virtio-scsi-single/ ? "virtio-scsi-pci" : $scsihw;
 
+        my $device = { id => $controllerid, driver => $scsihw_type, addr => $pciaddr->{addr}, bus => $pciaddr->{bus} };
+        $device->{iothread} = "iothread-$controllerid" if $iothread_enabled;
 
-	my $iothread = $iothread_enabled ? ",iothread=iothread-$controller_prefix$controller" : "";
-
-	my $queues = '';
 	if (
 	    $conf->{scsihw}
 	    && $conf->{scsihw} eq "virtio-scsi-single"
 	    && $drive->{queues}
 	) {
-	    $queues = ",num_queues=$drive->{queues}";
+	    $device->{'num_queues'} = int($drive->{queues});
 	}
 
-
 	$used_controller->{scsi}->{$controller} = 1;
-	return "$scsihw_type,id=$controller_prefix$controller$pciaddr$iothread$queues";
+	return $device;
     }
 
     if ($drive->{interface} eq 'sata') {
 	my $controller = int($drive->{index} / $PVE::QemuServer::Drive::MAX_SATA_DISKS);
 	return if $used_controller->{ahci}->{$controller};
 
-	my $pciaddr = print_pci_addr("ahci$controller", $bridges, $arch);
+	my $controllerid = "ahci$controller";
+	my $pciaddr = get_pci_addr($controllerid, $bridges, $arch);
 
 	$used_controller->{ahci}->{$controller} = 1;
-	return "ahci,id=ahci$controller,multifunction=on$pciaddr";
-
+        return { driver => 'ahci', id => $controllerid, multifunction => 'on', addr => $pciaddr->{addr}, bus => $pciaddr->{bus} };
     }
 }
 
-- 
2.39.5



[-- Attachment #2: Type: text/plain, Size: 160 bytes --]

_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [pve-devel] [PATCH qemu-server 6/6] tests: cfg2cmd: convert drive devices to json format
       [not found] <20250627124228.1542397-1-alexandre.derumier@groupe-cyllene.com>
                   ` (4 preceding siblings ...)
  2025-06-27 12:42 ` [pve-devel] [PATCH qemu-server 5/6] convert disk controller device to json format Alexandre Derumier via pve-devel
@ 2025-06-27 12:42 ` Alexandre Derumier via pve-devel
  5 siblings, 0 replies; 6+ messages in thread
From: Alexandre Derumier via pve-devel @ 2025-06-27 12:42 UTC (permalink / raw)
  To: pve-devel; +Cc: Alexandre Derumier

[-- Attachment #1: Type: message/rfc822, Size: 80965 bytes --]

From: Alexandre Derumier <alexandre.derumier@groupe-cyllene.com>
To: pve-devel@lists.proxmox.com
Subject: [PATCH qemu-server 6/6] tests: cfg2cmd: convert drive devices to json format
Date: Fri, 27 Jun 2025 14:42:28 +0200
Message-ID: <20250627124228.1542397-7-alexandre.derumier@groupe-cyllene.com>

Signed-off-by: Alexandre Derumier <alexandre.derumier@groupe-cyllene.com>
---
 src/test/cfg2cmd/aio.conf.cmd                 | 32 +++++++++----------
 src/test/cfg2cmd/bootorder-empty.conf.cmd     | 14 ++++----
 src/test/cfg2cmd/bootorder-legacy.conf.cmd    | 14 ++++----
 src/test/cfg2cmd/bootorder.conf.cmd           | 14 ++++----
 ...putype-icelake-client-deprecation.conf.cmd |  6 ++--
 src/test/cfg2cmd/ide.conf.cmd                 | 12 +++----
 .../cfg2cmd/pinned-version-pxe-pve.conf.cmd   |  6 ++--
 src/test/cfg2cmd/pinned-version-pxe.conf.cmd  |  6 ++--
 src/test/cfg2cmd/pinned-version.conf.cmd      |  6 ++--
 src/test/cfg2cmd/q35-ide.conf.cmd             | 12 +++----
 .../q35-linux-hostpci-template.conf.cmd       |  4 +--
 src/test/cfg2cmd/seabios_serial.conf.cmd      |  6 ++--
 ...imple-balloon-free-page-reporting.conf.cmd |  6 ++--
 src/test/cfg2cmd/simple-btrfs.conf.cmd        | 12 +++----
 src/test/cfg2cmd/simple-cifs.conf.cmd         | 12 +++----
 .../cfg2cmd/simple-disk-passthrough.conf.cmd  |  8 ++---
 src/test/cfg2cmd/simple-lvm.conf.cmd          | 10 +++---
 src/test/cfg2cmd/simple-lvmthin.conf.cmd      | 10 +++---
 src/test/cfg2cmd/simple-rbd.conf.cmd          | 20 ++++++------
 src/test/cfg2cmd/simple-virtio-blk.conf.cmd   |  6 ++--
 .../cfg2cmd/simple-zfs-over-iscsi.conf.cmd    | 12 +++----
 src/test/cfg2cmd/simple1-template.conf.cmd    | 10 +++---
 src/test/cfg2cmd/simple1.conf.cmd             |  6 ++--
 23 files changed, 122 insertions(+), 122 deletions(-)

diff --git a/src/test/cfg2cmd/aio.conf.cmd b/src/test/cfg2cmd/aio.conf.cmd
index 272c6cd6..7ddfa6dd 100644
--- a/src/test/cfg2cmd/aio.conf.cmd
+++ b/src/test/cfg2cmd/aio.conf.cmd
@@ -37,34 +37,34 @@
   -device 'VGA,id=vga,bus=pci.0,addr=0x2' \
   -device 'virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3,free-page-reporting=on' \
   -iscsi 'initiator-name=iqn.1993-08.org.debian:01:aabbccddeeff' \
-  -device 'lsi,id=scsihw0,bus=pci.0,addr=0x5' \
+  -device '{"addr":"0x5","bus":"pci.0","driver":"lsi","id":"scsihw0"}' \
   -blockdev '{"driver":"throttle","file":{"cache":{"direct":true,"no-flush":false},"driver":"raw","file":{"aio":"threads","cache":{"direct":true,"no-flush":false},"detect-zeroes":"unmap","discard":"unmap","driver":"file","filename":"/var/lib/vz/images/8006/vm-8006-disk-0.raw","node-name":"e3b2553803d55d43b9986a0aac3e9a7","read-only":false},"node-name":"f3b2553803d55d43b9986a0aac3e9a7","read-only":false},"node-name":"drive-scsi0","throttle-group":"throttle-drive-scsi0"}' \
-  -device 'scsi-hd,bus=scsihw0.0,scsi-id=0,drive=drive-scsi0,id=scsi0,write-cache=on' \
+  -device '{"bus":"scsihw0.0","drive":"drive-scsi0","driver":"scsi-hd","id":"scsi0","scsi-id":0,"write-cache":"on"}' \
   -blockdev '{"driver":"throttle","file":{"cache":{"direct":true,"no-flush":false},"driver":"raw","file":{"aio":"native","cache":{"direct":true,"no-flush":false},"detect-zeroes":"unmap","discard":"unmap","driver":"file","filename":"/var/lib/vz/images/8006/vm-8006-disk-1.raw","node-name":"e08707d013893852b3d4d42301a4298","read-only":false},"node-name":"f08707d013893852b3d4d42301a4298","read-only":false},"node-name":"drive-scsi1","throttle-group":"throttle-drive-scsi1"}' \
-  -device 'scsi-hd,bus=scsihw0.0,scsi-id=1,drive=drive-scsi1,id=scsi1,write-cache=on' \
+  -device '{"bus":"scsihw0.0","drive":"drive-scsi1","driver":"scsi-hd","id":"scsi1","scsi-id":1,"write-cache":"on"}' \
   -blockdev '{"driver":"throttle","file":{"cache":{"direct":true,"no-flush":false},"driver":"raw","file":{"aio":"io_uring","cache":{"direct":true,"no-flush":false},"detect-zeroes":"unmap","discard":"unmap","driver":"file","filename":"/var/lib/vz/images/8006/vm-8006-disk-2.raw","node-name":"edb0854bba55e8b2544ad937c9f5afc","read-only":false},"node-name":"fdb0854bba55e8b2544ad937c9f5afc","read-only":false},"node-name":"drive-scsi2","throttle-group":"throttle-drive-scsi2"}' \
-  -device 'scsi-hd,bus=scsihw0.0,scsi-id=2,drive=drive-scsi2,id=scsi2,write-cache=on' \
+  -device '{"bus":"scsihw0.0","drive":"drive-scsi2","driver":"scsi-hd","id":"scsi2","scsi-id":2,"write-cache":"on"}' \
   -blockdev '{"driver":"throttle","file":{"cache":{"direct":true,"no-flush":false},"driver":"raw","file":{"aio":"io_uring","cache":{"direct":true,"no-flush":false},"detect-zeroes":"unmap","discard":"unmap","driver":"file","filename":"/var/lib/vz/images/8006/vm-8006-disk-3.raw","node-name":"e9c170cb9491763cad3f31718205efc","read-only":false},"node-name":"f9c170cb9491763cad3f31718205efc","read-only":false},"node-name":"drive-scsi3","throttle-group":"throttle-drive-scsi3"}' \
-  -device 'scsi-hd,bus=scsihw0.0,scsi-id=3,drive=drive-scsi3,id=scsi3,write-cache=on' \
+  -device '{"bus":"scsihw0.0","drive":"drive-scsi3","driver":"scsi-hd","id":"scsi3","scsi-id":3,"write-cache":"on"}' \
   -blockdev '{"driver":"throttle","file":{"cache":{"direct":true,"no-flush":false},"driver":"raw","file":{"aio":"native","cache":{"direct":true,"no-flush":false},"detect-zeroes":"unmap","discard":"unmap","driver":"file","filename":"/mnt/pve/cifs-store/images/8006/vm-8006-disk-4.raw","node-name":"ea34ecc24c40da0d53420ef344ced37","read-only":false},"node-name":"fa34ecc24c40da0d53420ef344ced37","read-only":false},"node-name":"drive-scsi4","throttle-group":"throttle-drive-scsi4"}' \
-  -device 'scsi-hd,bus=scsihw0.0,scsi-id=4,drive=drive-scsi4,id=scsi4,write-cache=on' \
+  -device '{"bus":"scsihw0.0","drive":"drive-scsi4","driver":"scsi-hd","id":"scsi4","scsi-id":4,"write-cache":"on"}' \
   -blockdev '{"driver":"throttle","file":{"cache":{"direct":true,"no-flush":false},"driver":"raw","file":{"aio":"io_uring","cache":{"direct":true,"no-flush":false},"detect-zeroes":"unmap","discard":"unmap","driver":"file","filename":"/mnt/pve/cifs-store/images/8006/vm-8006-disk-5.raw","node-name":"e39cacf47a4f4877072601505d90949","read-only":false},"node-name":"f39cacf47a4f4877072601505d90949","read-only":false},"node-name":"drive-scsi5","throttle-group":"throttle-drive-scsi5"}' \
-  -device 'scsi-hd,bus=scsihw0.0,scsi-id=5,drive=drive-scsi5,id=scsi5,write-cache=on' \
+  -device '{"bus":"scsihw0.0","drive":"drive-scsi5","driver":"scsi-hd","id":"scsi5","scsi-id":5,"write-cache":"on"}' \
   -blockdev '{"driver":"throttle","file":{"cache":{"direct":true,"no-flush":false},"driver":"raw","file":{"aio":"io_uring","cache":{"direct":true,"no-flush":false},"detect-zeroes":"unmap","discard":"unmap","driver":"host_device","filename":"/dev/rbd-pve/fc4181a6-56eb-4f68-b452-8ba1f381ca2a/cpool/vm-8006-disk-6","node-name":"e7db1ee70981087e4a2861bc7da417b","read-only":false},"node-name":"f7db1ee70981087e4a2861bc7da417b","read-only":false},"node-name":"drive-scsi6","throttle-group":"throttle-drive-scsi6"}' \
-  -device 'scsi-hd,bus=scsihw0.0,scsi-id=6,drive=drive-scsi6,id=scsi6,write-cache=on' \
-  -device 'lsi,id=scsihw1,bus=pci.0,addr=0x6' \
+  -device '{"bus":"scsihw0.0","drive":"drive-scsi6","driver":"scsi-hd","id":"scsi6","scsi-id":6,"write-cache":"on"}' \
+  -device '{"addr":"0x6","bus":"pci.0","driver":"lsi","id":"scsihw1"}' \
   -blockdev '{"driver":"throttle","file":{"cache":{"direct":true,"no-flush":false},"driver":"raw","file":{"aio":"io_uring","cache":{"direct":true,"no-flush":false},"detect-zeroes":"unmap","discard":"unmap","driver":"host_device","filename":"/dev/rbd-pve/fc4181a6-56eb-4f68-b452-8ba1f381ca2a/cpool/vm-8006-disk-7","node-name":"e2d2deac808301140a96c862fe3ea85","read-only":false},"node-name":"f2d2deac808301140a96c862fe3ea85","read-only":false},"node-name":"drive-scsi7","throttle-group":"throttle-drive-scsi7"}' \
-  -device 'scsi-hd,bus=scsihw1.0,scsi-id=0,drive=drive-scsi7,id=scsi7,write-cache=on' \
+  -device '{"bus":"scsihw1.0","drive":"drive-scsi7","driver":"scsi-hd","id":"scsi7","scsi-id":0,"write-cache":"on"}' \
   -blockdev '{"driver":"throttle","file":{"cache":{"direct":false,"no-flush":false},"driver":"raw","file":{"aio":"threads","cache":{"direct":false,"no-flush":false},"detect-zeroes":"unmap","discard":"unmap","driver":"host_device","filename":"/dev/rbd-pve/fc4181a6-56eb-4f68-b452-8ba1f381ca2a/cpool/vm-8006-disk-8","node-name":"e9796b73db57b8943746ede7d0d3060","read-only":false},"node-name":"f9796b73db57b8943746ede7d0d3060","read-only":false},"node-name":"drive-scsi8","throttle-group":"throttle-drive-scsi8"}' \
-  -device 'scsi-hd,bus=scsihw1.0,scsi-id=1,drive=drive-scsi8,id=scsi8,write-cache=on' \
+  -device '{"bus":"scsihw1.0","drive":"drive-scsi8","driver":"scsi-hd","id":"scsi8","scsi-id":1,"write-cache":"on"}' \
   -blockdev '{"driver":"throttle","file":{"cache":{"direct":false,"no-flush":false},"driver":"raw","file":{"aio":"io_uring","cache":{"direct":false,"no-flush":false},"detect-zeroes":"unmap","discard":"unmap","driver":"host_device","filename":"/dev/rbd-pve/fc4181a6-56eb-4f68-b452-8ba1f381ca2a/cpool/vm-8006-disk-9","node-name":"efa538892acc012edbdc5810035bf7d","read-only":false},"node-name":"ffa538892acc012edbdc5810035bf7d","read-only":false},"node-name":"drive-scsi9","throttle-group":"throttle-drive-scsi9"}' \
-  -device 'scsi-hd,bus=scsihw1.0,scsi-id=2,drive=drive-scsi9,id=scsi9,write-cache=on' \
+  -device '{"bus":"scsihw1.0","drive":"drive-scsi9","driver":"scsi-hd","id":"scsi9","scsi-id":2,"write-cache":"on"}' \
   -blockdev '{"driver":"throttle","file":{"cache":{"direct":true,"no-flush":false},"driver":"raw","file":{"auth-client-required":["none"],"cache":{"direct":true,"no-flush":false},"detect-zeroes":"unmap","discard":"unmap","driver":"rbd","image":"vm-8006-disk-8","node-name":"e6f4cbffa741d16bba69304eb2800ef","pool":"cpool","read-only":false,"server":[{"host":"127.0.0.42","port":"3300"},{"host":"127.0.0.21","port":"3300"},{"host":"::1","port":"3300"}]},"node-name":"f6f4cbffa741d16bba69304eb2800ef","read-only":false},"node-name":"drive-scsi10","throttle-group":"throttle-drive-scsi10"}' \
-  -device 'scsi-hd,bus=scsihw1.0,scsi-id=3,drive=drive-scsi10,id=scsi10,write-cache=on' \
+  -device '{"bus":"scsihw1.0","drive":"drive-scsi10","driver":"scsi-hd","id":"scsi10","scsi-id":3,"write-cache":"on"}' \
   -blockdev '{"driver":"throttle","file":{"cache":{"direct":true,"no-flush":false},"driver":"raw","file":{"auth-client-required":["none"],"cache":{"direct":true,"no-flush":false},"detect-zeroes":"unmap","discard":"unmap","driver":"rbd","image":"vm-8006-disk-8","node-name":"e42375c54de70f5f4be966d98c90255","pool":"cpool","read-only":false,"server":[{"host":"127.0.0.42","port":"3300"},{"host":"127.0.0.21","port":"3300"},{"host":"::1","port":"3300"}]},"node-name":"f42375c54de70f5f4be966d98c90255","read-only":false},"node-name":"drive-scsi11","throttle-group":"throttle-drive-scsi11"}' \
-  -device 'scsi-hd,bus=scsihw1.0,scsi-id=4,drive=drive-scsi11,id=scsi11,write-cache=on' \
+  -device '{"bus":"scsihw1.0","drive":"drive-scsi11","driver":"scsi-hd","id":"scsi11","scsi-id":4,"write-cache":"on"}' \
   -blockdev '{"driver":"throttle","file":{"cache":{"direct":true,"no-flush":false},"driver":"raw","file":{"aio":"native","cache":{"direct":true,"no-flush":false},"detect-zeroes":"unmap","discard":"unmap","driver":"host_device","filename":"/dev/veegee/vm-8006-disk-9","node-name":"ed7b2c9e0133619fcf6cb8ce5903502","read-only":false},"node-name":"fd7b2c9e0133619fcf6cb8ce5903502","read-only":false},"node-name":"drive-scsi12","throttle-group":"throttle-drive-scsi12"}' \
-  -device 'scsi-hd,bus=scsihw1.0,scsi-id=5,drive=drive-scsi12,id=scsi12,write-cache=on' \
+  -device '{"bus":"scsihw1.0","drive":"drive-scsi12","driver":"scsi-hd","id":"scsi12","scsi-id":5,"write-cache":"on"}' \
   -blockdev '{"driver":"throttle","file":{"cache":{"direct":true,"no-flush":false},"driver":"raw","file":{"aio":"io_uring","cache":{"direct":true,"no-flush":false},"detect-zeroes":"unmap","discard":"unmap","driver":"host_device","filename":"/dev/veegee/vm-8006-disk-9","node-name":"ed85420a880203ca1401d00a8edf132","read-only":false},"node-name":"fd85420a880203ca1401d00a8edf132","read-only":false},"node-name":"drive-scsi13","throttle-group":"throttle-drive-scsi13"}' \
-  -device 'scsi-hd,bus=scsihw1.0,scsi-id=6,drive=drive-scsi13,id=scsi13,write-cache=on' \
+  -device '{"bus":"scsihw1.0","drive":"drive-scsi13","driver":"scsi-hd","id":"scsi13","scsi-id":6,"write-cache":"on"}' \
   -machine 'type=pc+pve0'
diff --git a/src/test/cfg2cmd/bootorder-empty.conf.cmd b/src/test/cfg2cmd/bootorder-empty.conf.cmd
index 89f73145..f36da15d 100644
--- a/src/test/cfg2cmd/bootorder-empty.conf.cmd
+++ b/src/test/cfg2cmd/bootorder-empty.conf.cmd
@@ -17,9 +17,9 @@
   -m 768 \
   -object '{"id":"throttle-drive-ide2","limits":{},"qom-type":"throttle-group"}' \
   -object '{"id":"throttle-drive-scsi4","limits":{},"qom-type":"throttle-group"}' \
-  -object 'iothread,id=iothread-virtio0' \
+  -object '{"id":"iothread-virtio0","qom-type":"iothread"}' \
   -object '{"id":"throttle-drive-virtio0","limits":{},"qom-type":"throttle-group"}' \
-  -object 'iothread,id=iothread-virtio1' \
+  -object '{"id":"iothread-virtio1","qom-type":"iothread"}' \
   -object '{"id":"throttle-drive-virtio1","limits":{},"qom-type":"throttle-group"}' \
   -global 'PIIX4_PM.disable_s3=1' \
   -global 'PIIX4_PM.disable_s4=1' \
@@ -31,14 +31,14 @@
   -device 'VGA,id=vga,bus=pci.0,addr=0x2' \
   -device 'virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3,free-page-reporting=on' \
   -iscsi 'initiator-name=iqn.1993-08.org.debian:01:aabbccddeeff' \
-  -device 'ide-cd,bus=ide.1,unit=0,id=ide2' \
-  -device 'lsi,id=scsihw0,bus=pci.0,addr=0x5' \
+  -device '{"bus":"ide.1","driver":"ide-cd","unit":0}' \
+  -device '{"addr":"0x5","bus":"pci.0","driver":"lsi","id":"scsihw0"}' \
   -blockdev '{"driver":"throttle","file":{"cache":{"direct":true,"no-flush":false},"driver":"qcow2","file":{"aio":"io_uring","cache":{"direct":true,"no-flush":false},"detect-zeroes":"unmap","discard":"unmap","driver":"file","filename":"/var/lib/vz/images/8006/vm-8006-disk-0.qcow2","node-name":"e6bf62e20f6c14a2c19bd6f1f5ac36c","read-only":false},"node-name":"f6bf62e20f6c14a2c19bd6f1f5ac36c","read-only":false},"node-name":"drive-scsi4","throttle-group":"throttle-drive-scsi4"}' \
-  -device 'scsi-hd,bus=scsihw0.0,scsi-id=4,drive=drive-scsi4,id=scsi4,write-cache=on' \
+  -device '{"bus":"scsihw0.0","drive":"drive-scsi4","driver":"scsi-hd","id":"scsi4","scsi-id":4,"write-cache":"on"}' \
   -blockdev '{"driver":"throttle","file":{"cache":{"direct":true,"no-flush":false},"driver":"qcow2","file":{"aio":"io_uring","cache":{"direct":true,"no-flush":false},"detect-zeroes":"unmap","discard":"unmap","driver":"file","filename":"/var/lib/vz/images/8006/vm-8006-disk-0.qcow2","node-name":"edd19f6c1b3a6d5a6248c3376a91a16","read-only":false},"node-name":"fdd19f6c1b3a6d5a6248c3376a91a16","read-only":false},"node-name":"drive-virtio0","throttle-group":"throttle-drive-virtio0"}' \
-  -device 'virtio-blk-pci,drive=drive-virtio0,id=virtio0,bus=pci.0,addr=0xa,iothread=iothread-virtio0,write-cache=on' \
+  -device '{"addr":"0xa","bus":"pci.0","drive":"drive-virtio0","driver":"virtio-blk-pci","id":"virtio0","iothread":"iothread-virtio0","write-cache":"on"}' \
   -blockdev '{"driver":"throttle","file":{"cache":{"direct":true,"no-flush":false},"driver":"qcow2","file":{"aio":"io_uring","cache":{"direct":true,"no-flush":false},"detect-zeroes":"unmap","discard":"unmap","driver":"file","filename":"/var/lib/vz/images/8006/vm-8006-disk-0.qcow2","node-name":"eeb683fb9c516c1a8707c917f0d7a38","read-only":false},"node-name":"feb683fb9c516c1a8707c917f0d7a38","read-only":false},"node-name":"drive-virtio1","throttle-group":"throttle-drive-virtio1"}' \
-  -device 'virtio-blk-pci,drive=drive-virtio1,id=virtio1,bus=pci.0,addr=0xb,iothread=iothread-virtio1,write-cache=on' \
+  -device '{"addr":"0xb","bus":"pci.0","drive":"drive-virtio1","driver":"virtio-blk-pci","id":"virtio1","iothread":"iothread-virtio1","write-cache":"on"}' \
   -netdev 'type=tap,id=net0,ifname=tap8006i0,script=/usr/libexec/qemu-server/pve-bridge,downscript=/usr/libexec/qemu-server/pve-bridgedown,vhost=on' \
   -device 'virtio-net-pci,mac=A2:C0:43:77:08:A0,netdev=net0,bus=pci.0,addr=0x12,id=net0,rx_queue_size=1024,tx_queue_size=256' \
   -machine 'type=pc+pve0'
diff --git a/src/test/cfg2cmd/bootorder-legacy.conf.cmd b/src/test/cfg2cmd/bootorder-legacy.conf.cmd
index a2341692..5dd2e742 100644
--- a/src/test/cfg2cmd/bootorder-legacy.conf.cmd
+++ b/src/test/cfg2cmd/bootorder-legacy.conf.cmd
@@ -17,9 +17,9 @@
   -m 768 \
   -object '{"id":"throttle-drive-ide2","limits":{},"qom-type":"throttle-group"}' \
   -object '{"id":"throttle-drive-scsi4","limits":{},"qom-type":"throttle-group"}' \
-  -object 'iothread,id=iothread-virtio0' \
+  -object '{"id":"iothread-virtio0","qom-type":"iothread"}' \
   -object '{"id":"throttle-drive-virtio0","limits":{},"qom-type":"throttle-group"}' \
-  -object 'iothread,id=iothread-virtio1' \
+  -object '{"id":"iothread-virtio1","qom-type":"iothread"}' \
   -object '{"id":"throttle-drive-virtio1","limits":{},"qom-type":"throttle-group"}' \
   -global 'PIIX4_PM.disable_s3=1' \
   -global 'PIIX4_PM.disable_s4=1' \
@@ -31,14 +31,14 @@
   -device 'VGA,id=vga,bus=pci.0,addr=0x2' \
   -device 'virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3,free-page-reporting=on' \
   -iscsi 'initiator-name=iqn.1993-08.org.debian:01:aabbccddeeff' \
-  -device 'ide-cd,bus=ide.1,unit=0,id=ide2,bootindex=200' \
-  -device 'lsi,id=scsihw0,bus=pci.0,addr=0x5' \
+  -device '{"bootindex":200,"bus":"ide.1","driver":"ide-cd","unit":0}' \
+  -device '{"addr":"0x5","bus":"pci.0","driver":"lsi","id":"scsihw0"}' \
   -blockdev '{"driver":"throttle","file":{"cache":{"direct":true,"no-flush":false},"driver":"qcow2","file":{"aio":"io_uring","cache":{"direct":true,"no-flush":false},"detect-zeroes":"unmap","discard":"unmap","driver":"file","filename":"/var/lib/vz/images/8006/vm-8006-disk-0.qcow2","node-name":"e6bf62e20f6c14a2c19bd6f1f5ac36c","read-only":false},"node-name":"f6bf62e20f6c14a2c19bd6f1f5ac36c","read-only":false},"node-name":"drive-scsi4","throttle-group":"throttle-drive-scsi4"}' \
-  -device 'scsi-hd,bus=scsihw0.0,scsi-id=4,drive=drive-scsi4,id=scsi4,write-cache=on' \
+  -device '{"bus":"scsihw0.0","drive":"drive-scsi4","driver":"scsi-hd","id":"scsi4","scsi-id":4,"write-cache":"on"}' \
   -blockdev '{"driver":"throttle","file":{"cache":{"direct":true,"no-flush":false},"driver":"qcow2","file":{"aio":"io_uring","cache":{"direct":true,"no-flush":false},"detect-zeroes":"unmap","discard":"unmap","driver":"file","filename":"/var/lib/vz/images/8006/vm-8006-disk-0.qcow2","node-name":"edd19f6c1b3a6d5a6248c3376a91a16","read-only":false},"node-name":"fdd19f6c1b3a6d5a6248c3376a91a16","read-only":false},"node-name":"drive-virtio0","throttle-group":"throttle-drive-virtio0"}' \
-  -device 'virtio-blk-pci,drive=drive-virtio0,id=virtio0,bus=pci.0,addr=0xa,iothread=iothread-virtio0,write-cache=on' \
+  -device '{"addr":"0xa","bus":"pci.0","drive":"drive-virtio0","driver":"virtio-blk-pci","id":"virtio0","iothread":"iothread-virtio0","write-cache":"on"}' \
   -blockdev '{"driver":"throttle","file":{"cache":{"direct":true,"no-flush":false},"driver":"qcow2","file":{"aio":"io_uring","cache":{"direct":true,"no-flush":false},"detect-zeroes":"unmap","discard":"unmap","driver":"file","filename":"/var/lib/vz/images/8006/vm-8006-disk-0.qcow2","node-name":"eeb683fb9c516c1a8707c917f0d7a38","read-only":false},"node-name":"feb683fb9c516c1a8707c917f0d7a38","read-only":false},"node-name":"drive-virtio1","throttle-group":"throttle-drive-virtio1"}' \
-  -device 'virtio-blk-pci,drive=drive-virtio1,id=virtio1,bus=pci.0,addr=0xb,iothread=iothread-virtio1,bootindex=302,write-cache=on' \
+  -device '{"addr":"0xb","bootindex":302,"bus":"pci.0","drive":"drive-virtio1","driver":"virtio-blk-pci","id":"virtio1","iothread":"iothread-virtio1","write-cache":"on"}' \
   -netdev 'type=tap,id=net0,ifname=tap8006i0,script=/usr/libexec/qemu-server/pve-bridge,downscript=/usr/libexec/qemu-server/pve-bridgedown,vhost=on' \
   -device 'virtio-net-pci,mac=A2:C0:43:77:08:A0,netdev=net0,bus=pci.0,addr=0x12,id=net0,rx_queue_size=1024,tx_queue_size=256,bootindex=100' \
   -machine 'type=pc+pve0'
diff --git a/src/test/cfg2cmd/bootorder.conf.cmd b/src/test/cfg2cmd/bootorder.conf.cmd
index 87a9fca0..11e30e31 100644
--- a/src/test/cfg2cmd/bootorder.conf.cmd
+++ b/src/test/cfg2cmd/bootorder.conf.cmd
@@ -17,9 +17,9 @@
   -m 768 \
   -object '{"id":"throttle-drive-ide2","limits":{},"qom-type":"throttle-group"}' \
   -object '{"id":"throttle-drive-scsi4","limits":{},"qom-type":"throttle-group"}' \
-  -object 'iothread,id=iothread-virtio0' \
+  -object '{"id":"iothread-virtio0","qom-type":"iothread"}' \
   -object '{"id":"throttle-drive-virtio0","limits":{},"qom-type":"throttle-group"}' \
-  -object 'iothread,id=iothread-virtio1' \
+  -object '{"id":"iothread-virtio1","qom-type":"iothread"}' \
   -object '{"id":"throttle-drive-virtio1","limits":{},"qom-type":"throttle-group"}' \
   -global 'PIIX4_PM.disable_s3=1' \
   -global 'PIIX4_PM.disable_s4=1' \
@@ -31,14 +31,14 @@
   -device 'VGA,id=vga,bus=pci.0,addr=0x2' \
   -device 'virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3,free-page-reporting=on' \
   -iscsi 'initiator-name=iqn.1993-08.org.debian:01:aabbccddeeff' \
-  -device 'ide-cd,bus=ide.1,unit=0,id=ide2,bootindex=103' \
-  -device 'lsi,id=scsihw0,bus=pci.0,addr=0x5' \
+  -device '{"bootindex":103,"bus":"ide.1","driver":"ide-cd","unit":0}' \
+  -device '{"addr":"0x5","bus":"pci.0","driver":"lsi","id":"scsihw0"}' \
   -blockdev '{"driver":"throttle","file":{"cache":{"direct":true,"no-flush":false},"driver":"qcow2","file":{"aio":"io_uring","cache":{"direct":true,"no-flush":false},"detect-zeroes":"unmap","discard":"unmap","driver":"file","filename":"/var/lib/vz/images/8006/vm-8006-disk-0.qcow2","node-name":"e6bf62e20f6c14a2c19bd6f1f5ac36c","read-only":false},"node-name":"f6bf62e20f6c14a2c19bd6f1f5ac36c","read-only":false},"node-name":"drive-scsi4","throttle-group":"throttle-drive-scsi4"}' \
-  -device 'scsi-hd,bus=scsihw0.0,scsi-id=4,drive=drive-scsi4,id=scsi4,bootindex=102,write-cache=on' \
+  -device '{"bootindex":102,"bus":"scsihw0.0","drive":"drive-scsi4","driver":"scsi-hd","id":"scsi4","scsi-id":4,"write-cache":"on"}' \
   -blockdev '{"driver":"throttle","file":{"cache":{"direct":true,"no-flush":false},"driver":"qcow2","file":{"aio":"io_uring","cache":{"direct":true,"no-flush":false},"detect-zeroes":"unmap","discard":"unmap","driver":"file","filename":"/var/lib/vz/images/8006/vm-8006-disk-0.qcow2","node-name":"edd19f6c1b3a6d5a6248c3376a91a16","read-only":false},"node-name":"fdd19f6c1b3a6d5a6248c3376a91a16","read-only":false},"node-name":"drive-virtio0","throttle-group":"throttle-drive-virtio0"}' \
-  -device 'virtio-blk-pci,drive=drive-virtio0,id=virtio0,bus=pci.0,addr=0xa,iothread=iothread-virtio0,write-cache=on' \
+  -device '{"addr":"0xa","bus":"pci.0","drive":"drive-virtio0","driver":"virtio-blk-pci","id":"virtio0","iothread":"iothread-virtio0","write-cache":"on"}' \
   -blockdev '{"driver":"throttle","file":{"cache":{"direct":true,"no-flush":false},"driver":"qcow2","file":{"aio":"io_uring","cache":{"direct":true,"no-flush":false},"detect-zeroes":"unmap","discard":"unmap","driver":"file","filename":"/var/lib/vz/images/8006/vm-8006-disk-0.qcow2","node-name":"eeb683fb9c516c1a8707c917f0d7a38","read-only":false},"node-name":"feb683fb9c516c1a8707c917f0d7a38","read-only":false},"node-name":"drive-virtio1","throttle-group":"throttle-drive-virtio1"}' \
-  -device 'virtio-blk-pci,drive=drive-virtio1,id=virtio1,bus=pci.0,addr=0xb,iothread=iothread-virtio1,bootindex=100,write-cache=on' \
+  -device '{"addr":"0xb","bootindex":100,"bus":"pci.0","drive":"drive-virtio1","driver":"virtio-blk-pci","id":"virtio1","iothread":"iothread-virtio1","write-cache":"on"}' \
   -netdev 'type=tap,id=net0,ifname=tap8006i0,script=/usr/libexec/qemu-server/pve-bridge,downscript=/usr/libexec/qemu-server/pve-bridgedown,vhost=on' \
   -device 'virtio-net-pci,mac=A2:C0:43:77:08:A0,netdev=net0,bus=pci.0,addr=0x12,id=net0,rx_queue_size=1024,tx_queue_size=256,bootindex=101' \
   -machine 'type=pc+pve0'
diff --git a/src/test/cfg2cmd/cputype-icelake-client-deprecation.conf.cmd b/src/test/cfg2cmd/cputype-icelake-client-deprecation.conf.cmd
index 11533c1d..bf102415 100644
--- a/src/test/cfg2cmd/cputype-icelake-client-deprecation.conf.cmd
+++ b/src/test/cfg2cmd/cputype-icelake-client-deprecation.conf.cmd
@@ -27,8 +27,8 @@
   -device 'VGA,id=vga,bus=pci.0,addr=0x2' \
   -device 'virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3,free-page-reporting=on' \
   -iscsi 'initiator-name=iqn.1993-08.org.debian:01:aabbccddeeff' \
-  -device 'ide-cd,bus=ide.1,unit=0,id=ide2,bootindex=200' \
-  -device 'virtio-scsi-pci,id=scsihw0,bus=pci.0,addr=0x5' \
+  -device '{"bootindex":200,"bus":"ide.1","driver":"ide-cd","unit":0}' \
+  -device '{"addr":"0x5","bus":"pci.0","driver":"virtio-scsi-pci","id":"scsihw0"}' \
   -blockdev '{"driver":"throttle","file":{"cache":{"direct":true,"no-flush":false},"driver":"qcow2","file":{"aio":"io_uring","cache":{"direct":true,"no-flush":false},"detect-zeroes":"unmap","discard":"unmap","driver":"file","filename":"/var/lib/vz/images/8006/base-8006-disk-0.qcow2","node-name":"e417d5947e69c5890b1e3ddf8a68167","read-only":false},"node-name":"f417d5947e69c5890b1e3ddf8a68167","read-only":false},"node-name":"drive-scsi0","throttle-group":"throttle-drive-scsi0"}' \
-  -device 'scsi-hd,bus=scsihw0.0,channel=0,scsi-id=0,lun=0,drive=drive-scsi0,id=scsi0,bootindex=100,write-cache=on' \
+  -device '{"bootindex":100,"bus":"scsihw0.0","channel":0,"drive":"drive-scsi0","driver":"scsi-hd","id":"scsi0","lun":0,"scsi-id":0,"write-cache":"on"}' \
   -machine 'type=pc+pve0'
diff --git a/src/test/cfg2cmd/ide.conf.cmd b/src/test/cfg2cmd/ide.conf.cmd
index 78fe7550..a089d6ae 100644
--- a/src/test/cfg2cmd/ide.conf.cmd
+++ b/src/test/cfg2cmd/ide.conf.cmd
@@ -31,16 +31,16 @@
   -device 'virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3,free-page-reporting=on' \
   -iscsi 'initiator-name=iqn.1993-08.org.debian:01:aabbccddeeff' \
   -blockdev '{"driver":"throttle","file":{"cache":{"direct":false,"no-flush":false},"driver":"raw","file":{"aio":"io_uring","cache":{"direct":false,"no-flush":false},"driver":"file","filename":"/var/lib/vz/template/iso/zero.iso","node-name":"e19e15bf93b8cf09e2a5d1669648165","read-only":true},"node-name":"f19e15bf93b8cf09e2a5d1669648165","read-only":true},"node-name":"drive-ide0","throttle-group":"throttle-drive-ide0"}' \
-  -device 'ide-cd,bus=ide.0,unit=0,drive=drive-ide0,id=ide0,bootindex=200' \
+  -device '{"bootindex":200,"bus":"ide.0","drive":"drive-ide0","driver":"ide-cd","unit":0}' \
   -blockdev '{"driver":"throttle","file":{"cache":{"direct":false,"no-flush":false},"driver":"raw","file":{"aio":"threads","cache":{"direct":false,"no-flush":false},"driver":"file","filename":"/mnt/pve/cifs-store/template/iso/one.iso","node-name":"e247a6535f864815c8e9dbb5a118336","read-only":true},"node-name":"f247a6535f864815c8e9dbb5a118336","read-only":true},"node-name":"drive-ide1","throttle-group":"throttle-drive-ide1"}' \
-  -device 'ide-cd,bus=ide.0,unit=1,drive=drive-ide1,id=ide1,bootindex=201' \
+  -device '{"bootindex":201,"bus":"ide.0","drive":"drive-ide1","driver":"ide-cd","unit":1}' \
   -blockdev '{"driver":"throttle","file":{"cache":{"direct":false,"no-flush":false},"driver":"raw","file":{"aio":"threads","cache":{"direct":false,"no-flush":false},"driver":"file","filename":"/mnt/pve/cifs-store/template/iso/two.iso","node-name":"ec78a64f692c2fa9f873a111580aebd","read-only":true},"node-name":"fc78a64f692c2fa9f873a111580aebd","read-only":true},"node-name":"drive-ide2","throttle-group":"throttle-drive-ide2"}' \
-  -device 'ide-cd,bus=ide.1,unit=0,drive=drive-ide2,id=ide2,bootindex=202' \
+  -device '{"bootindex":202,"bus":"ide.1","drive":"drive-ide2","driver":"ide-cd","unit":0}' \
   -blockdev '{"driver":"throttle","file":{"cache":{"direct":false,"no-flush":false},"driver":"raw","file":{"aio":"threads","cache":{"direct":false,"no-flush":false},"driver":"file","filename":"/mnt/pve/cifs-store/template/iso/three.iso","node-name":"e35557bae4bcbf9edc9f7ff7f132f30","read-only":true},"node-name":"f35557bae4bcbf9edc9f7ff7f132f30","read-only":true},"node-name":"drive-ide3","throttle-group":"throttle-drive-ide3"}' \
-  -device 'ide-cd,bus=ide.1,unit=1,drive=drive-ide3,id=ide3,bootindex=203' \
-  -device 'virtio-scsi-pci,id=scsihw0,bus=pci.0,addr=0x5' \
+  -device '{"bootindex":203,"bus":"ide.1","drive":"drive-ide3","driver":"ide-cd","unit":1}' \
+  -device '{"addr":"0x5","bus":"pci.0","driver":"virtio-scsi-pci","id":"scsihw0"}' \
   -blockdev '{"driver":"throttle","file":{"cache":{"direct":true,"no-flush":false},"driver":"qcow2","file":{"aio":"io_uring","cache":{"direct":true,"no-flush":false},"detect-zeroes":"on","discard":"ignore","driver":"file","filename":"/var/lib/vz/images/100/vm-100-disk-2.qcow2","node-name":"ec11e0572184321efc5835152b95d5d","read-only":false},"node-name":"fc11e0572184321efc5835152b95d5d","read-only":false},"node-name":"drive-scsi0","throttle-group":"throttle-drive-scsi0"}' \
-  -device 'scsi-hd,bus=scsihw0.0,channel=0,scsi-id=0,lun=0,drive=drive-scsi0,id=scsi0,bootindex=100,write-cache=on' \
+  -device '{"bootindex":100,"bus":"scsihw0.0","channel":0,"drive":"drive-scsi0","driver":"scsi-hd","id":"scsi0","lun":0,"scsi-id":0,"write-cache":"on"}' \
   -netdev 'type=tap,id=net0,ifname=tap8006i0,script=/usr/libexec/qemu-server/pve-bridge,downscript=/usr/libexec/qemu-server/pve-bridgedown,vhost=on' \
   -device 'virtio-net-pci,mac=2E:01:68:F9:9C:87,netdev=net0,bus=pci.0,addr=0x12,id=net0,rx_queue_size=1024,tx_queue_size=256,bootindex=300' \
   -machine 'type=pc+pve0'
diff --git a/src/test/cfg2cmd/pinned-version-pxe-pve.conf.cmd b/src/test/cfg2cmd/pinned-version-pxe-pve.conf.cmd
index 7301e3fa..20c7a08c 100644
--- a/src/test/cfg2cmd/pinned-version-pxe-pve.conf.cmd
+++ b/src/test/cfg2cmd/pinned-version-pxe-pve.conf.cmd
@@ -24,10 +24,10 @@
   -device 'virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3' \
   -iscsi 'initiator-name=iqn.1993-08.org.debian:01:aabbccddeeff' \
   -drive 'if=none,id=drive-ide2,media=cdrom,aio=io_uring' \
-  -device 'ide-cd,bus=ide.1,unit=0,drive=drive-ide2,id=ide2,bootindex=200' \
-  -device 'virtio-scsi-pci,id=scsihw0,bus=pci.0,addr=0x5' \
+  -device '{"bootindex":200,"bus":"ide.1","drive":"drive-ide2","driver":"ide-cd","unit":0}' \
+  -device '{"addr":"0x5","bus":"pci.0","driver":"virtio-scsi-pci","id":"scsihw0"}' \
   -drive 'file=/var/lib/vz/images/8006/vm-8006-disk-0.raw,if=none,id=drive-scsi0,discard=on,format=raw,cache=none,aio=io_uring,detect-zeroes=unmap' \
-  -device 'scsi-hd,bus=scsihw0.0,channel=0,scsi-id=0,lun=0,drive=drive-scsi0,id=scsi0,bootindex=100' \
+  -device '{"bootindex":100,"bus":"scsihw0.0","channel":0,"drive":"drive-scsi0","driver":"scsi-hd","id":"scsi0","lun":0,"scsi-id":0}' \
   -netdev 'type=tap,id=net0,ifname=tap8006i0,script=/usr/libexec/qemu-server/pve-bridge,downscript=/usr/libexec/qemu-server/pve-bridgedown,vhost=on' \
   -device 'virtio-net-pci,mac=A2:C0:43:77:08:A1,netdev=net0,bus=pci.0,addr=0x12,id=net0,bootindex=300,romfile=pxe-virtio.rom' \
   -machine 'type=pc-q35-4.1+pve2'
diff --git a/src/test/cfg2cmd/pinned-version-pxe.conf.cmd b/src/test/cfg2cmd/pinned-version-pxe.conf.cmd
index 89be8c69..e9bcaa11 100644
--- a/src/test/cfg2cmd/pinned-version-pxe.conf.cmd
+++ b/src/test/cfg2cmd/pinned-version-pxe.conf.cmd
@@ -22,10 +22,10 @@
   -device 'virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3' \
   -iscsi 'initiator-name=iqn.1993-08.org.debian:01:aabbccddeeff' \
   -drive 'if=none,id=drive-ide2,media=cdrom,aio=io_uring' \
-  -device 'ide-cd,bus=ide.1,unit=0,drive=drive-ide2,id=ide2,bootindex=200' \
-  -device 'virtio-scsi-pci,id=scsihw0,bus=pci.0,addr=0x5' \
+  -device '{"bootindex":200,"bus":"ide.1","drive":"drive-ide2","driver":"ide-cd","unit":0}' \
+  -device '{"addr":"0x5","bus":"pci.0","driver":"virtio-scsi-pci","id":"scsihw0"}' \
   -drive 'file=/var/lib/vz/images/8006/vm-8006-disk-0.raw,if=none,id=drive-scsi0,discard=on,format=raw,cache=none,aio=io_uring,detect-zeroes=unmap' \
-  -device 'scsi-hd,bus=scsihw0.0,channel=0,scsi-id=0,lun=0,drive=drive-scsi0,id=scsi0,bootindex=100' \
+  -device '{"bootindex":100,"bus":"scsihw0.0","channel":0,"drive":"drive-scsi0","driver":"scsi-hd","id":"scsi0","lun":0,"scsi-id":0}' \
   -netdev 'type=tap,id=net0,ifname=tap8006i0,script=/usr/libexec/qemu-server/pve-bridge,downscript=/usr/libexec/qemu-server/pve-bridgedown,vhost=on' \
   -device 'virtio-net-pci,mac=A2:C0:43:77:08:A1,netdev=net0,bus=pci.0,addr=0x12,id=net0,bootindex=300,romfile=pxe-virtio.rom' \
   -machine 'type=pc-q35-5.1+pve0'
diff --git a/src/test/cfg2cmd/pinned-version.conf.cmd b/src/test/cfg2cmd/pinned-version.conf.cmd
index da161ad9..a7e0759a 100644
--- a/src/test/cfg2cmd/pinned-version.conf.cmd
+++ b/src/test/cfg2cmd/pinned-version.conf.cmd
@@ -22,10 +22,10 @@
   -device 'virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3' \
   -iscsi 'initiator-name=iqn.1993-08.org.debian:01:aabbccddeeff' \
   -drive 'if=none,id=drive-ide2,media=cdrom,aio=io_uring' \
-  -device 'ide-cd,bus=ide.1,unit=0,drive=drive-ide2,id=ide2,bootindex=200' \
-  -device 'virtio-scsi-pci,id=scsihw0,bus=pci.0,addr=0x5' \
+  -device '{"bootindex":200,"bus":"ide.1","drive":"drive-ide2","driver":"ide-cd","unit":0}' \
+  -device '{"addr":"0x5","bus":"pci.0","driver":"virtio-scsi-pci","id":"scsihw0"}' \
   -drive 'file=/var/lib/vz/images/8006/vm-8006-disk-0.raw,if=none,id=drive-scsi0,discard=on,format=raw,cache=none,aio=io_uring,detect-zeroes=unmap' \
-  -device 'scsi-hd,bus=scsihw0.0,channel=0,scsi-id=0,lun=0,drive=drive-scsi0,id=scsi0,bootindex=100' \
+  -device '{"bootindex":100,"bus":"scsihw0.0","channel":0,"drive":"drive-scsi0","driver":"scsi-hd","id":"scsi0","lun":0,"scsi-id":0}' \
   -netdev 'type=tap,id=net0,ifname=tap8006i0,script=/usr/libexec/qemu-server/pve-bridge,downscript=/usr/libexec/qemu-server/pve-bridgedown,vhost=on' \
   -device 'virtio-net-pci,mac=A2:C0:43:77:08:A1,netdev=net0,bus=pci.0,addr=0x12,id=net0,bootindex=300' \
   -machine 'type=pc-q35-3.1+pve0'
diff --git a/src/test/cfg2cmd/q35-ide.conf.cmd b/src/test/cfg2cmd/q35-ide.conf.cmd
index f94accb9..f9b3643e 100644
--- a/src/test/cfg2cmd/q35-ide.conf.cmd
+++ b/src/test/cfg2cmd/q35-ide.conf.cmd
@@ -30,16 +30,16 @@
   -device 'virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3,free-page-reporting=on' \
   -iscsi 'initiator-name=iqn.1993-08.org.debian:01:aabbccddeeff' \
   -blockdev '{"driver":"throttle","file":{"cache":{"direct":false,"no-flush":false},"driver":"raw","file":{"aio":"threads","cache":{"direct":false,"no-flush":false},"driver":"file","filename":"/mnt/pve/cifs-store/template/iso/zero.iso","node-name":"e1677eafc00b7016099210662868e38","read-only":true},"node-name":"f1677eafc00b7016099210662868e38","read-only":true},"node-name":"drive-ide0","throttle-group":"throttle-drive-ide0"}' \
-  -device 'ide-cd,bus=ide.0,unit=0,drive=drive-ide0,id=ide0,bootindex=200' \
+  -device '{"bootindex":200,"bus":"ide.0","drive":"drive-ide0","driver":"ide-cd","unit":0}' \
   -blockdev '{"driver":"throttle","file":{"cache":{"direct":false,"no-flush":false},"driver":"raw","file":{"aio":"threads","cache":{"direct":false,"no-flush":false},"driver":"file","filename":"/mnt/pve/cifs-store/template/iso/one.iso","node-name":"e247a6535f864815c8e9dbb5a118336","read-only":true},"node-name":"f247a6535f864815c8e9dbb5a118336","read-only":true},"node-name":"drive-ide1","throttle-group":"throttle-drive-ide1"}' \
-  -device 'ide-cd,bus=ide.2,unit=0,drive=drive-ide1,id=ide1,bootindex=201' \
+  -device '{"bootindex":201,"bus":"ide.2","drive":"drive-ide1","driver":"ide-cd","unit":0}' \
   -blockdev '{"driver":"throttle","file":{"cache":{"direct":false,"no-flush":false},"driver":"raw","file":{"aio":"threads","cache":{"direct":false,"no-flush":false},"driver":"file","filename":"/mnt/pve/cifs-store/template/iso/two.iso","node-name":"ec78a64f692c2fa9f873a111580aebd","read-only":true},"node-name":"fc78a64f692c2fa9f873a111580aebd","read-only":true},"node-name":"drive-ide2","throttle-group":"throttle-drive-ide2"}' \
-  -device 'ide-cd,bus=ide.1,unit=0,drive=drive-ide2,id=ide2,bootindex=202' \
+  -device '{"bootindex":202,"bus":"ide.1","drive":"drive-ide2","driver":"ide-cd","unit":0}' \
   -blockdev '{"driver":"throttle","file":{"cache":{"direct":false,"no-flush":false},"driver":"raw","file":{"aio":"threads","cache":{"direct":false,"no-flush":false},"driver":"file","filename":"/mnt/pve/cifs-store/template/iso/three.iso","node-name":"e35557bae4bcbf9edc9f7ff7f132f30","read-only":true},"node-name":"f35557bae4bcbf9edc9f7ff7f132f30","read-only":true},"node-name":"drive-ide3","throttle-group":"throttle-drive-ide3"}' \
-  -device 'ide-cd,bus=ide.3,unit=0,drive=drive-ide3,id=ide3,bootindex=203' \
-  -device 'virtio-scsi-pci,id=scsihw0,bus=pci.0,addr=0x5' \
+  -device '{"bootindex":203,"bus":"ide.3","drive":"drive-ide3","driver":"ide-cd","unit":0}' \
+  -device '{"addr":"0x5","bus":"pci.0","driver":"virtio-scsi-pci","id":"scsihw0"}' \
   -blockdev '{"driver":"throttle","file":{"cache":{"direct":true,"no-flush":false},"driver":"qcow2","file":{"aio":"io_uring","cache":{"direct":true,"no-flush":false},"detect-zeroes":"on","discard":"ignore","driver":"file","filename":"/var/lib/vz/images/100/vm-100-disk-2.qcow2","node-name":"ec11e0572184321efc5835152b95d5d","read-only":false},"node-name":"fc11e0572184321efc5835152b95d5d","read-only":false},"node-name":"drive-scsi0","throttle-group":"throttle-drive-scsi0"}' \
-  -device 'scsi-hd,bus=scsihw0.0,channel=0,scsi-id=0,lun=0,drive=drive-scsi0,id=scsi0,bootindex=100,write-cache=on' \
+  -device '{"bootindex":100,"bus":"scsihw0.0","channel":0,"drive":"drive-scsi0","driver":"scsi-hd","id":"scsi0","lun":0,"scsi-id":0,"write-cache":"on"}' \
   -netdev 'type=tap,id=net0,ifname=tap8006i0,script=/usr/libexec/qemu-server/pve-bridge,downscript=/usr/libexec/qemu-server/pve-bridgedown,vhost=on' \
   -device 'virtio-net-pci,mac=2E:01:68:F9:9C:87,netdev=net0,bus=pci.0,addr=0x12,id=net0,rx_queue_size=1024,tx_queue_size=256,bootindex=300' \
   -machine 'type=q35+pve0'
diff --git a/src/test/cfg2cmd/q35-linux-hostpci-template.conf.cmd b/src/test/cfg2cmd/q35-linux-hostpci-template.conf.cmd
index ddc87814..4d8edab9 100644
--- a/src/test/cfg2cmd/q35-linux-hostpci-template.conf.cmd
+++ b/src/test/cfg2cmd/q35-linux-hostpci-template.conf.cmd
@@ -27,8 +27,8 @@
   -device 'usb-tablet,id=tablet,bus=uhci.0,port=1' \
   -device 'virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3,free-page-reporting=on' \
   -iscsi 'initiator-name=iqn.1993-08.org.debian:01:aabbccddeeff' \
-  -device 'virtio-scsi-pci,id=scsihw0,bus=pci.0,addr=0x5' \
+  -device '{"addr":"0x5","bus":"pci.0","driver":"virtio-scsi-pci","id":"scsihw0"}' \
   -blockdev '{"driver":"throttle","file":{"cache":{"direct":true,"no-flush":false},"driver":"raw","file":{"aio":"io_uring","cache":{"direct":true,"no-flush":false},"detect-zeroes":"on","discard":"ignore","driver":"file","filename":"/var/lib/vz/images/100/base-100-disk-2.raw","node-name":"e24dfe239201bb9924fc4cfb899ca70","read-only":true},"node-name":"f24dfe239201bb9924fc4cfb899ca70","read-only":true},"node-name":"drive-scsi0","throttle-group":"throttle-drive-scsi0"}' \
-  -device 'scsi-hd,bus=scsihw0.0,channel=0,scsi-id=0,lun=0,drive=drive-scsi0,id=scsi0,write-cache=on' \
+  -device '{"bus":"scsihw0.0","channel":0,"drive":"drive-scsi0","driver":"scsi-hd","id":"scsi0","lun":0,"scsi-id":0,"write-cache":"on"}' \
   -machine 'pflash0=pflash0,pflash1=drive-efidisk0,accel=tcg,type=pc+pve0' \
   -snapshot
diff --git a/src/test/cfg2cmd/seabios_serial.conf.cmd b/src/test/cfg2cmd/seabios_serial.conf.cmd
index a00def0a..f0a63cb8 100644
--- a/src/test/cfg2cmd/seabios_serial.conf.cmd
+++ b/src/test/cfg2cmd/seabios_serial.conf.cmd
@@ -27,10 +27,10 @@
   -device 'isa-serial,chardev=serial0' \
   -device 'virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3,free-page-reporting=on' \
   -iscsi 'initiator-name=iqn.1993-08.org.debian:01:aabbccddeeff' \
-  -device 'ide-cd,bus=ide.1,unit=0,id=ide2,bootindex=200' \
-  -device 'virtio-scsi-pci,id=scsihw0,bus=pci.0,addr=0x5' \
+  -device '{"bootindex":200,"bus":"ide.1","driver":"ide-cd","unit":0}' \
+  -device '{"addr":"0x5","bus":"pci.0","driver":"virtio-scsi-pci","id":"scsihw0"}' \
   -blockdev '{"driver":"throttle","file":{"cache":{"direct":true,"no-flush":false},"driver":"qcow2","file":{"aio":"io_uring","cache":{"direct":true,"no-flush":false},"detect-zeroes":"unmap","discard":"unmap","driver":"file","filename":"/var/lib/vz/images/8006/vm-8006-disk-0.qcow2","node-name":"ecd04be4259153b8293415fefa2a84c","read-only":false},"node-name":"fcd04be4259153b8293415fefa2a84c","read-only":false},"node-name":"drive-scsi0","throttle-group":"throttle-drive-scsi0"}' \
-  -device 'scsi-hd,bus=scsihw0.0,channel=0,scsi-id=0,lun=0,drive=drive-scsi0,id=scsi0,bootindex=100,write-cache=on' \
+  -device '{"bootindex":100,"bus":"scsihw0.0","channel":0,"drive":"drive-scsi0","driver":"scsi-hd","id":"scsi0","lun":0,"scsi-id":0,"write-cache":"on"}' \
   -netdev 'type=tap,id=net0,ifname=tap8006i0,script=/usr/libexec/qemu-server/pve-bridge,downscript=/usr/libexec/qemu-server/pve-bridgedown,vhost=on' \
   -device 'virtio-net-pci,mac=A2:C0:43:77:08:A0,netdev=net0,bus=pci.0,addr=0x12,id=net0,rx_queue_size=1024,tx_queue_size=256,bootindex=300' \
   -machine 'smm=off,type=pc+pve0'
diff --git a/src/test/cfg2cmd/simple-balloon-free-page-reporting.conf.cmd b/src/test/cfg2cmd/simple-balloon-free-page-reporting.conf.cmd
index 0c61d334..d4ad734d 100644
--- a/src/test/cfg2cmd/simple-balloon-free-page-reporting.conf.cmd
+++ b/src/test/cfg2cmd/simple-balloon-free-page-reporting.conf.cmd
@@ -24,10 +24,10 @@
   -device 'virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3,free-page-reporting=on' \
   -iscsi 'initiator-name=iqn.1993-08.org.debian:01:aabbccddeeff' \
   -drive 'if=none,id=drive-ide2,media=cdrom,aio=io_uring' \
-  -device 'ide-cd,bus=ide.1,unit=0,drive=drive-ide2,id=ide2,bootindex=200' \
-  -device 'virtio-scsi-pci,id=scsihw0,bus=pci.0,addr=0x5' \
+  -device '{"bootindex":200,"bus":"ide.1","drive":"drive-ide2","driver":"ide-cd","unit":0}' \
+  -device '{"addr":"0x5","bus":"pci.0","driver":"virtio-scsi-pci","id":"scsihw0"}' \
   -drive 'file=/var/lib/vz/images/8006/vm-8006-disk-0.qcow2,if=none,id=drive-scsi0,discard=on,format=qcow2,cache=none,aio=io_uring,detect-zeroes=unmap' \
-  -device 'scsi-hd,bus=scsihw0.0,channel=0,scsi-id=0,lun=0,drive=drive-scsi0,id=scsi0,bootindex=100' \
+  -device '{"bootindex":100,"bus":"scsihw0.0","channel":0,"drive":"drive-scsi0","driver":"scsi-hd","id":"scsi0","lun":0,"scsi-id":0}' \
   -netdev 'type=tap,id=net0,ifname=tap8006i0,script=/usr/libexec/qemu-server/pve-bridge,downscript=/usr/libexec/qemu-server/pve-bridgedown,vhost=on' \
   -device 'virtio-net-pci,mac=A2:C0:43:77:08:A0,netdev=net0,bus=pci.0,addr=0x12,id=net0,bootindex=300' \
   -machine 'type=pc-i440fx-6.2+pve0'
diff --git a/src/test/cfg2cmd/simple-btrfs.conf.cmd b/src/test/cfg2cmd/simple-btrfs.conf.cmd
index 6c944f62..137a1f88 100644
--- a/src/test/cfg2cmd/simple-btrfs.conf.cmd
+++ b/src/test/cfg2cmd/simple-btrfs.conf.cmd
@@ -30,16 +30,16 @@
   -device 'VGA,id=vga,bus=pci.0,addr=0x2' \
   -device 'virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3,free-page-reporting=on' \
   -iscsi 'initiator-name=iqn.1993-08.org.debian:01:aabbccddeeff' \
-  -device 'ide-cd,bus=ide.1,unit=0,id=ide2,bootindex=200' \
-  -device 'virtio-scsi-pci,id=scsihw0,bus=pci.0,addr=0x5' \
+  -device '{"bootindex":200,"bus":"ide.1","driver":"ide-cd","unit":0}' \
+  -device '{"addr":"0x5","bus":"pci.0","driver":"virtio-scsi-pci","id":"scsihw0"}' \
   -blockdev '{"driver":"throttle","file":{"cache":{"direct":false,"no-flush":false},"driver":"raw","file":{"aio":"io_uring","cache":{"direct":false,"no-flush":false},"detect-zeroes":"unmap","discard":"unmap","driver":"file","filename":"/butter/bread/images/8006/vm-8006-disk-0/disk.raw","node-name":"e99aff0ff797aa030a22e9f580076dd","read-only":false},"node-name":"f99aff0ff797aa030a22e9f580076dd","read-only":false},"node-name":"drive-scsi0","throttle-group":"throttle-drive-scsi0"}' \
-  -device 'scsi-hd,bus=scsihw0.0,channel=0,scsi-id=0,lun=0,drive=drive-scsi0,id=scsi0,bootindex=100,write-cache=on' \
+  -device '{"bootindex":100,"bus":"scsihw0.0","channel":0,"drive":"drive-scsi0","driver":"scsi-hd","id":"scsi0","lun":0,"scsi-id":0,"write-cache":"on"}' \
   -blockdev '{"driver":"throttle","file":{"cache":{"direct":false,"no-flush":false},"driver":"raw","file":{"aio":"io_uring","cache":{"direct":false,"no-flush":false},"detect-zeroes":"unmap","discard":"unmap","driver":"file","filename":"/butter/bread/images/8006/vm-8006-disk-0/disk.raw","node-name":"e7b2fd2a8c5dbfc550d9781e5df8841","read-only":false},"node-name":"f7b2fd2a8c5dbfc550d9781e5df8841","read-only":false},"node-name":"drive-scsi1","throttle-group":"throttle-drive-scsi1"}' \
-  -device 'scsi-hd,bus=scsihw0.0,channel=0,scsi-id=0,lun=1,drive=drive-scsi1,id=scsi1,write-cache=on' \
+  -device '{"bus":"scsihw0.0","channel":0,"drive":"drive-scsi1","driver":"scsi-hd","id":"scsi1","lun":1,"scsi-id":0,"write-cache":"on"}' \
   -blockdev '{"driver":"throttle","file":{"cache":{"direct":false,"no-flush":false},"driver":"raw","file":{"aio":"io_uring","cache":{"direct":false,"no-flush":false},"detect-zeroes":"unmap","discard":"unmap","driver":"file","filename":"/butter/bread/images/8006/vm-8006-disk-0/disk.raw","node-name":"ed78b07bb04c2cbd8aedc648e885569","read-only":false},"node-name":"fd78b07bb04c2cbd8aedc648e885569","read-only":false},"node-name":"drive-scsi2","throttle-group":"throttle-drive-scsi2"}' \
-  -device 'scsi-hd,bus=scsihw0.0,channel=0,scsi-id=0,lun=2,drive=drive-scsi2,id=scsi2,write-cache=off' \
+  -device '{"bus":"scsihw0.0","channel":0,"drive":"drive-scsi2","driver":"scsi-hd","id":"scsi2","lun":2,"scsi-id":0,"write-cache":"off"}' \
   -blockdev '{"driver":"throttle","file":{"cache":{"direct":true,"no-flush":false},"driver":"raw","file":{"aio":"io_uring","cache":{"direct":true,"no-flush":false},"detect-zeroes":"unmap","discard":"unmap","driver":"file","filename":"/butter/bread/images/8006/vm-8006-disk-0/disk.raw","node-name":"e7487c01d831e2b51a5446980170ec9","read-only":false},"node-name":"f7487c01d831e2b51a5446980170ec9","read-only":false},"node-name":"drive-scsi3","throttle-group":"throttle-drive-scsi3"}' \
-  -device 'scsi-hd,bus=scsihw0.0,channel=0,scsi-id=0,lun=3,drive=drive-scsi3,id=scsi3,write-cache=off' \
+  -device '{"bus":"scsihw0.0","channel":0,"drive":"drive-scsi3","driver":"scsi-hd","id":"scsi3","lun":3,"scsi-id":0,"write-cache":"off"}' \
   -netdev 'type=tap,id=net0,ifname=tap8006i0,script=/usr/libexec/qemu-server/pve-bridge,downscript=/usr/libexec/qemu-server/pve-bridgedown,vhost=on' \
   -device 'virtio-net-pci,mac=A2:C0:43:77:08:A0,netdev=net0,bus=pci.0,addr=0x12,id=net0,rx_queue_size=1024,tx_queue_size=256,bootindex=300' \
   -machine 'type=pc+pve0'
diff --git a/src/test/cfg2cmd/simple-cifs.conf.cmd b/src/test/cfg2cmd/simple-cifs.conf.cmd
index f22eb033..23b73a81 100644
--- a/src/test/cfg2cmd/simple-cifs.conf.cmd
+++ b/src/test/cfg2cmd/simple-cifs.conf.cmd
@@ -28,14 +28,14 @@
   -device 'VGA,id=vga,bus=pci.0,addr=0x2' \
   -device 'virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3,free-page-reporting=on' \
   -iscsi 'initiator-name=iqn.1993-08.org.debian:01:aabbccddeeff' \
-  -device 'ide-cd,bus=ide.1,unit=0,id=ide2,bootindex=200' \
-  -device 'virtio-scsi-pci,id=scsihw0,bus=pci.0,addr=0x5' \
+  -device '{"bootindex":200,"bus":"ide.1","driver":"ide-cd","unit":0}' \
+  -device '{"addr":"0x5","bus":"pci.0","driver":"virtio-scsi-pci","id":"scsihw0"}' \
   -blockdev '{"driver":"throttle","file":{"cache":{"direct":true,"no-flush":false},"driver":"raw","file":{"aio":"native","cache":{"direct":true,"no-flush":false},"detect-zeroes":"unmap","discard":"unmap","driver":"file","filename":"/mnt/pve/cifs-store/images/8006/vm-8006-disk-0.raw","node-name":"e2b3b8f2d6a23adc1aa3ecd195dbaf5","read-only":false},"node-name":"f2b3b8f2d6a23adc1aa3ecd195dbaf5","read-only":false},"node-name":"drive-scsi0","throttle-group":"throttle-drive-scsi0"}' \
-  -device 'scsi-hd,bus=scsihw0.0,channel=0,scsi-id=0,lun=0,drive=drive-scsi0,id=scsi0,write-cache=on' \
+  -device '{"bus":"scsihw0.0","channel":0,"drive":"drive-scsi0","driver":"scsi-hd","id":"scsi0","lun":0,"scsi-id":0,"write-cache":"on"}' \
   -blockdev '{"driver":"throttle","file":{"cache":{"direct":false,"no-flush":false},"driver":"raw","file":{"aio":"threads","cache":{"direct":false,"no-flush":false},"detect-zeroes":"unmap","discard":"unmap","driver":"file","filename":"/mnt/pve/cifs-store/images/8006/vm-8006-disk-0.raw","node-name":"ee4d9a961200a669c1a8182632aba3e","read-only":false},"node-name":"fe4d9a961200a669c1a8182632aba3e","read-only":false},"node-name":"drive-scsi1","throttle-group":"throttle-drive-scsi1"}' \
-  -device 'scsi-hd,bus=scsihw0.0,channel=0,scsi-id=0,lun=1,drive=drive-scsi1,id=scsi1,write-cache=on' \
+  -device '{"bus":"scsihw0.0","channel":0,"drive":"drive-scsi1","driver":"scsi-hd","id":"scsi1","lun":1,"scsi-id":0,"write-cache":"on"}' \
   -blockdev '{"driver":"throttle","file":{"cache":{"direct":false,"no-flush":false},"driver":"raw","file":{"aio":"threads","cache":{"direct":false,"no-flush":false},"detect-zeroes":"unmap","discard":"unmap","driver":"file","filename":"/mnt/pve/cifs-store/images/8006/vm-8006-disk-0.raw","node-name":"e6a3bf7eee1e2636cbe31f62b537b6c","read-only":false},"node-name":"f6a3bf7eee1e2636cbe31f62b537b6c","read-only":false},"node-name":"drive-scsi2","throttle-group":"throttle-drive-scsi2"}' \
-  -device 'scsi-hd,bus=scsihw0.0,channel=0,scsi-id=0,lun=2,drive=drive-scsi2,id=scsi2,write-cache=off' \
+  -device '{"bus":"scsihw0.0","channel":0,"drive":"drive-scsi2","driver":"scsi-hd","id":"scsi2","lun":2,"scsi-id":0,"write-cache":"off"}' \
   -blockdev '{"driver":"throttle","file":{"cache":{"direct":true,"no-flush":false},"driver":"raw","file":{"aio":"native","cache":{"direct":true,"no-flush":false},"detect-zeroes":"unmap","discard":"unmap","driver":"file","filename":"/mnt/pve/cifs-store/images/8006/vm-8006-disk-0.raw","node-name":"e7042ee58e764b1296ad54014cb9a03","read-only":false},"node-name":"f7042ee58e764b1296ad54014cb9a03","read-only":false},"node-name":"drive-scsi3","throttle-group":"throttle-drive-scsi3"}' \
-  -device 'scsi-hd,bus=scsihw0.0,channel=0,scsi-id=0,lun=3,drive=drive-scsi3,id=scsi3,write-cache=off' \
+  -device '{"bus":"scsihw0.0","channel":0,"drive":"drive-scsi3","driver":"scsi-hd","id":"scsi3","lun":3,"scsi-id":0,"write-cache":"off"}' \
   -machine 'type=pc+pve0'
diff --git a/src/test/cfg2cmd/simple-disk-passthrough.conf.cmd b/src/test/cfg2cmd/simple-disk-passthrough.conf.cmd
index 58368210..1e7183f6 100644
--- a/src/test/cfg2cmd/simple-disk-passthrough.conf.cmd
+++ b/src/test/cfg2cmd/simple-disk-passthrough.conf.cmd
@@ -29,12 +29,12 @@
   -device 'virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3,free-page-reporting=on' \
   -iscsi 'initiator-name=iqn.1993-08.org.debian:01:aabbccddeeff' \
   -blockdev '{"driver":"throttle","file":{"cache":{"direct":false,"no-flush":false},"driver":"raw","file":{"aio":"io_uring","cache":{"direct":false,"no-flush":false},"driver":"host_cdrom","filename":"/dev/cdrom","node-name":"ee50e59431a6228dc388fc821b35696","read-only":true},"node-name":"fe50e59431a6228dc388fc821b35696","read-only":true},"node-name":"drive-ide2","throttle-group":"throttle-drive-ide2"}' \
-  -device 'ide-cd,bus=ide.1,unit=0,drive=drive-ide2,id=ide2,bootindex=200' \
-  -device 'virtio-scsi-pci,id=scsihw0,bus=pci.0,addr=0x5' \
+  -device '{"bootindex":200,"bus":"ide.1","drive":"drive-ide2","driver":"ide-cd","unit":0}' \
+  -device '{"addr":"0x5","bus":"pci.0","driver":"virtio-scsi-pci","id":"scsihw0"}' \
   -blockdev '{"driver":"throttle","file":{"cache":{"direct":true,"no-flush":false},"driver":"raw","file":{"aio":"io_uring","cache":{"direct":true,"no-flush":false},"detect-zeroes":"on","discard":"ignore","driver":"host_device","filename":"/dev/sda","node-name":"eec235c1b362ebd19d5e98959b4c171","read-only":false},"node-name":"fec235c1b362ebd19d5e98959b4c171","read-only":false},"node-name":"drive-scsi0","throttle-group":"throttle-drive-scsi0"}' \
-  -device 'scsi-hd,bus=scsihw0.0,channel=0,scsi-id=0,lun=0,drive=drive-scsi0,id=scsi0,bootindex=100,write-cache=on' \
+  -device '{"bootindex":100,"bus":"scsihw0.0","channel":0,"drive":"drive-scsi0","driver":"scsi-hd","id":"scsi0","lun":0,"scsi-id":0,"write-cache":"on"}' \
   -blockdev '{"driver":"throttle","file":{"cache":{"direct":true,"no-flush":false},"driver":"raw","file":{"aio":"io_uring","cache":{"direct":true,"no-flush":false},"detect-zeroes":"on","discard":"ignore","driver":"file","filename":"/mnt/file.raw","node-name":"e234a4e3b89ac3adac9bdbf0c3dd6b4","read-only":false},"node-name":"f234a4e3b89ac3adac9bdbf0c3dd6b4","read-only":false},"node-name":"drive-scsi1","throttle-group":"throttle-drive-scsi1"}' \
-  -device 'scsi-hd,bus=scsihw0.0,channel=0,scsi-id=0,lun=1,drive=drive-scsi1,id=scsi1,write-cache=on' \
+  -device '{"bus":"scsihw0.0","channel":0,"drive":"drive-scsi1","driver":"scsi-hd","id":"scsi1","lun":1,"scsi-id":0,"write-cache":"on"}' \
   -netdev 'type=tap,id=net0,ifname=tap8006i0,script=/usr/libexec/qemu-server/pve-bridge,downscript=/usr/libexec/qemu-server/pve-bridgedown,vhost=on' \
   -device 'virtio-net-pci,mac=A2:C0:43:77:08:A0,netdev=net0,bus=pci.0,addr=0x12,id=net0,rx_queue_size=1024,tx_queue_size=256,bootindex=300' \
   -machine 'type=pc+pve0'
diff --git a/src/test/cfg2cmd/simple-lvm.conf.cmd b/src/test/cfg2cmd/simple-lvm.conf.cmd
index 650f0ac3..316a5f9e 100644
--- a/src/test/cfg2cmd/simple-lvm.conf.cmd
+++ b/src/test/cfg2cmd/simple-lvm.conf.cmd
@@ -27,13 +27,13 @@
   -device 'VGA,id=vga,bus=pci.0,addr=0x2' \
   -device 'virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3,free-page-reporting=on' \
   -iscsi 'initiator-name=iqn.1993-08.org.debian:01:aabbccddeeff' \
-  -device 'virtio-scsi-pci,id=scsihw0,bus=pci.0,addr=0x5' \
+  -device '{"addr":"0x5","bus":"pci.0","driver":"virtio-scsi-pci","id":"scsihw0"}' \
   -blockdev '{"driver":"throttle","file":{"cache":{"direct":true,"no-flush":false},"driver":"raw","file":{"aio":"native","cache":{"direct":true,"no-flush":false},"detect-zeroes":"unmap","discard":"unmap","driver":"host_device","filename":"/dev/veegee/vm-8006-disk-0","node-name":"e0378a375d635b0f473569544c7c207","read-only":false},"node-name":"f0378a375d635b0f473569544c7c207","read-only":false},"node-name":"drive-scsi0","throttle-group":"throttle-drive-scsi0"}' \
-  -device 'scsi-hd,bus=scsihw0.0,channel=0,scsi-id=0,lun=0,drive=drive-scsi0,id=scsi0,bootindex=100,write-cache=on' \
+  -device '{"bootindex":100,"bus":"scsihw0.0","channel":0,"drive":"drive-scsi0","driver":"scsi-hd","id":"scsi0","lun":0,"scsi-id":0,"write-cache":"on"}' \
   -blockdev '{"driver":"throttle","file":{"cache":{"direct":false,"no-flush":false},"driver":"raw","file":{"aio":"threads","cache":{"direct":false,"no-flush":false},"detect-zeroes":"unmap","discard":"unmap","driver":"host_device","filename":"/dev/veegee/vm-8006-disk-0","node-name":"e2fbae024c8a771f708f4a5391211b0","read-only":false},"node-name":"f2fbae024c8a771f708f4a5391211b0","read-only":false},"node-name":"drive-scsi1","throttle-group":"throttle-drive-scsi1"}' \
-  -device 'scsi-hd,bus=scsihw0.0,channel=0,scsi-id=0,lun=1,drive=drive-scsi1,id=scsi1,write-cache=on' \
+  -device '{"bus":"scsihw0.0","channel":0,"drive":"drive-scsi1","driver":"scsi-hd","id":"scsi1","lun":1,"scsi-id":0,"write-cache":"on"}' \
   -blockdev '{"driver":"throttle","file":{"cache":{"direct":false,"no-flush":false},"driver":"raw","file":{"aio":"threads","cache":{"direct":false,"no-flush":false},"detect-zeroes":"unmap","discard":"unmap","driver":"host_device","filename":"/dev/veegee/vm-8006-disk-0","node-name":"e4328c26b141e3efe1564cb60bf1155","read-only":false},"node-name":"f4328c26b141e3efe1564cb60bf1155","read-only":false},"node-name":"drive-scsi2","throttle-group":"throttle-drive-scsi2"}' \
-  -device 'scsi-hd,bus=scsihw0.0,channel=0,scsi-id=0,lun=2,drive=drive-scsi2,id=scsi2,write-cache=off' \
+  -device '{"bus":"scsihw0.0","channel":0,"drive":"drive-scsi2","driver":"scsi-hd","id":"scsi2","lun":2,"scsi-id":0,"write-cache":"off"}' \
   -blockdev '{"driver":"throttle","file":{"cache":{"direct":true,"no-flush":false},"driver":"raw","file":{"aio":"native","cache":{"direct":true,"no-flush":false},"detect-zeroes":"unmap","discard":"unmap","driver":"host_device","filename":"/dev/veegee/vm-8006-disk-0","node-name":"e68e10f8128f05fe5f7e85cc1f9922b","read-only":false},"node-name":"f68e10f8128f05fe5f7e85cc1f9922b","read-only":false},"node-name":"drive-scsi3","throttle-group":"throttle-drive-scsi3"}' \
-  -device 'scsi-hd,bus=scsihw0.0,channel=0,scsi-id=0,lun=3,drive=drive-scsi3,id=scsi3,write-cache=off' \
+  -device '{"bus":"scsihw0.0","channel":0,"drive":"drive-scsi3","driver":"scsi-hd","id":"scsi3","lun":3,"scsi-id":0,"write-cache":"off"}' \
   -machine 'type=pc+pve0'
diff --git a/src/test/cfg2cmd/simple-lvmthin.conf.cmd b/src/test/cfg2cmd/simple-lvmthin.conf.cmd
index 22251bc6..6cb1b1c1 100644
--- a/src/test/cfg2cmd/simple-lvmthin.conf.cmd
+++ b/src/test/cfg2cmd/simple-lvmthin.conf.cmd
@@ -27,13 +27,13 @@
   -device 'VGA,id=vga,bus=pci.0,addr=0x2' \
   -device 'virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3,free-page-reporting=on' \
   -iscsi 'initiator-name=iqn.1993-08.org.debian:01:aabbccddeeff' \
-  -device 'virtio-scsi-pci,id=scsihw0,bus=pci.0,addr=0x5' \
+  -device '{"addr":"0x5","bus":"pci.0","driver":"virtio-scsi-pci","id":"scsihw0"}' \
   -blockdev '{"driver":"throttle","file":{"cache":{"direct":true,"no-flush":false},"driver":"raw","file":{"aio":"io_uring","cache":{"direct":true,"no-flush":false},"detect-zeroes":"unmap","discard":"unmap","driver":"host_device","filename":"/dev/pve/vm-8006-disk-0","node-name":"e6d87b01b7bb888b8426534a542ff1c","read-only":false},"node-name":"f6d87b01b7bb888b8426534a542ff1c","read-only":false},"node-name":"drive-scsi0","throttle-group":"throttle-drive-scsi0"}' \
-  -device 'scsi-hd,bus=scsihw0.0,channel=0,scsi-id=0,lun=0,drive=drive-scsi0,id=scsi0,bootindex=100,write-cache=on' \
+  -device '{"bootindex":100,"bus":"scsihw0.0","channel":0,"drive":"drive-scsi0","driver":"scsi-hd","id":"scsi0","lun":0,"scsi-id":0,"write-cache":"on"}' \
   -blockdev '{"driver":"throttle","file":{"cache":{"direct":false,"no-flush":false},"driver":"raw","file":{"aio":"io_uring","cache":{"direct":false,"no-flush":false},"detect-zeroes":"unmap","discard":"unmap","driver":"host_device","filename":"/dev/pve/vm-8006-disk-0","node-name":"e96d9ece81aa4271aa2d8485184f66b","read-only":false},"node-name":"f96d9ece81aa4271aa2d8485184f66b","read-only":false},"node-name":"drive-scsi1","throttle-group":"throttle-drive-scsi1"}' \
-  -device 'scsi-hd,bus=scsihw0.0,channel=0,scsi-id=0,lun=1,drive=drive-scsi1,id=scsi1,write-cache=on' \
+  -device '{"bus":"scsihw0.0","channel":0,"drive":"drive-scsi1","driver":"scsi-hd","id":"scsi1","lun":1,"scsi-id":0,"write-cache":"on"}' \
   -blockdev '{"driver":"throttle","file":{"cache":{"direct":false,"no-flush":false},"driver":"raw","file":{"aio":"io_uring","cache":{"direct":false,"no-flush":false},"detect-zeroes":"unmap","discard":"unmap","driver":"host_device","filename":"/dev/pve/vm-8006-disk-0","node-name":"e0b89788ef97beda10a850ab45897d9","read-only":false},"node-name":"f0b89788ef97beda10a850ab45897d9","read-only":false},"node-name":"drive-scsi2","throttle-group":"throttle-drive-scsi2"}' \
-  -device 'scsi-hd,bus=scsihw0.0,channel=0,scsi-id=0,lun=2,drive=drive-scsi2,id=scsi2,write-cache=off' \
+  -device '{"bus":"scsihw0.0","channel":0,"drive":"drive-scsi2","driver":"scsi-hd","id":"scsi2","lun":2,"scsi-id":0,"write-cache":"off"}' \
   -blockdev '{"driver":"throttle","file":{"cache":{"direct":true,"no-flush":false},"driver":"raw","file":{"aio":"io_uring","cache":{"direct":true,"no-flush":false},"detect-zeroes":"unmap","discard":"unmap","driver":"host_device","filename":"/dev/pve/vm-8006-disk-0","node-name":"ea7b6871af66ca3e13e95bd74570aa2","read-only":false},"node-name":"fa7b6871af66ca3e13e95bd74570aa2","read-only":false},"node-name":"drive-scsi3","throttle-group":"throttle-drive-scsi3"}' \
-  -device 'scsi-hd,bus=scsihw0.0,channel=0,scsi-id=0,lun=3,drive=drive-scsi3,id=scsi3,write-cache=off' \
+  -device '{"bus":"scsihw0.0","channel":0,"drive":"drive-scsi3","driver":"scsi-hd","id":"scsi3","lun":3,"scsi-id":0,"write-cache":"off"}' \
   -machine 'type=pc+pve0'
diff --git a/src/test/cfg2cmd/simple-rbd.conf.cmd b/src/test/cfg2cmd/simple-rbd.conf.cmd
index 9260e448..e5a3612f 100644
--- a/src/test/cfg2cmd/simple-rbd.conf.cmd
+++ b/src/test/cfg2cmd/simple-rbd.conf.cmd
@@ -34,24 +34,24 @@
   -device 'VGA,id=vga,bus=pci.0,addr=0x2' \
   -device 'virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3,free-page-reporting=on' \
   -iscsi 'initiator-name=iqn.1993-08.org.debian:01:aabbccddeeff' \
-  -device 'ide-cd,bus=ide.1,unit=0,id=ide2,bootindex=200' \
-  -device 'virtio-scsi-pci,id=scsihw0,bus=pci.0,addr=0x5' \
+  -device '{"bootindex":200,"bus":"ide.1","driver":"ide-cd","unit":0}' \
+  -device '{"addr":"0x5","bus":"pci.0","driver":"virtio-scsi-pci","id":"scsihw0"}' \
   -blockdev '{"driver":"throttle","file":{"cache":{"direct":true,"no-flush":false},"driver":"raw","file":{"auth-client-required":["none"],"cache":{"direct":true,"no-flush":false},"detect-zeroes":"unmap","discard":"unmap","driver":"rbd","image":"vm-8006-disk-0","node-name":"e8e1af6f55c6a2466f178045aa79710","pool":"cpool","read-only":false,"server":[{"host":"127.0.0.42","port":"3300"},{"host":"127.0.0.21","port":"3300"},{"host":"::1","port":"3300"}]},"node-name":"f8e1af6f55c6a2466f178045aa79710","read-only":false},"node-name":"drive-scsi0","throttle-group":"throttle-drive-scsi0"}' \
-  -device 'scsi-hd,bus=scsihw0.0,channel=0,scsi-id=0,lun=0,drive=drive-scsi0,id=scsi0,bootindex=100,write-cache=on' \
+  -device '{"bootindex":100,"bus":"scsihw0.0","channel":0,"drive":"drive-scsi0","driver":"scsi-hd","id":"scsi0","lun":0,"scsi-id":0,"write-cache":"on"}' \
   -blockdev '{"driver":"throttle","file":{"cache":{"direct":false,"no-flush":false},"driver":"raw","file":{"auth-client-required":["none"],"cache":{"direct":false,"no-flush":false},"detect-zeroes":"unmap","discard":"unmap","driver":"rbd","image":"vm-8006-disk-0","node-name":"e3990bba2ed1f48c5bb23e9f37b4cec","pool":"cpool","read-only":false,"server":[{"host":"127.0.0.42","port":"3300"},{"host":"127.0.0.21","port":"3300"},{"host":"::1","port":"3300"}]},"node-name":"f3990bba2ed1f48c5bb23e9f37b4cec","read-only":false},"node-name":"drive-scsi1","throttle-group":"throttle-drive-scsi1"}' \
-  -device 'scsi-hd,bus=scsihw0.0,channel=0,scsi-id=0,lun=1,drive=drive-scsi1,id=scsi1,write-cache=on' \
+  -device '{"bus":"scsihw0.0","channel":0,"drive":"drive-scsi1","driver":"scsi-hd","id":"scsi1","lun":1,"scsi-id":0,"write-cache":"on"}' \
   -blockdev '{"driver":"throttle","file":{"cache":{"direct":false,"no-flush":false},"driver":"raw","file":{"auth-client-required":["none"],"cache":{"direct":false,"no-flush":false},"detect-zeroes":"unmap","discard":"unmap","driver":"rbd","image":"vm-8006-disk-0","node-name":"e3beccc2a8f2eacb8b5df8055a7d093","pool":"cpool","read-only":false,"server":[{"host":"127.0.0.42","port":"3300"},{"host":"127.0.0.21","port":"3300"},{"host":"::1","port":"3300"}]},"node-name":"f3beccc2a8f2eacb8b5df8055a7d093","read-only":false},"node-name":"drive-scsi2","throttle-group":"throttle-drive-scsi2"}' \
-  -device 'scsi-hd,bus=scsihw0.0,channel=0,scsi-id=0,lun=2,drive=drive-scsi2,id=scsi2,write-cache=off' \
+  -device '{"bus":"scsihw0.0","channel":0,"drive":"drive-scsi2","driver":"scsi-hd","id":"scsi2","lun":2,"scsi-id":0,"write-cache":"off"}' \
   -blockdev '{"driver":"throttle","file":{"cache":{"direct":true,"no-flush":false},"driver":"raw","file":{"auth-client-required":["none"],"cache":{"direct":true,"no-flush":false},"detect-zeroes":"unmap","discard":"unmap","driver":"rbd","image":"vm-8006-disk-0","node-name":"eef923d5dfcee93fbc712b03f9f21af","pool":"cpool","read-only":false,"server":[{"host":"127.0.0.42","port":"3300"},{"host":"127.0.0.21","port":"3300"},{"host":"::1","port":"3300"}]},"node-name":"fef923d5dfcee93fbc712b03f9f21af","read-only":false},"node-name":"drive-scsi3","throttle-group":"throttle-drive-scsi3"}' \
-  -device 'scsi-hd,bus=scsihw0.0,channel=0,scsi-id=0,lun=3,drive=drive-scsi3,id=scsi3,write-cache=off' \
+  -device '{"bus":"scsihw0.0","channel":0,"drive":"drive-scsi3","driver":"scsi-hd","id":"scsi3","lun":3,"scsi-id":0,"write-cache":"off"}' \
   -blockdev '{"driver":"throttle","file":{"cache":{"direct":true,"no-flush":false},"driver":"raw","file":{"aio":"io_uring","cache":{"direct":true,"no-flush":false},"detect-zeroes":"unmap","discard":"unmap","driver":"host_device","filename":"/dev/rbd-pve/fc4181a6-56eb-4f68-b452-8ba1f381ca2a/cpool/vm-8006-disk-0","node-name":"eb2c7a292f03b9f6d015cf83ae79730","read-only":false},"node-name":"fb2c7a292f03b9f6d015cf83ae79730","read-only":false},"node-name":"drive-scsi4","throttle-group":"throttle-drive-scsi4"}' \
-  -device 'scsi-hd,bus=scsihw0.0,channel=0,scsi-id=0,lun=4,drive=drive-scsi4,id=scsi4,write-cache=on' \
+  -device '{"bus":"scsihw0.0","channel":0,"drive":"drive-scsi4","driver":"scsi-hd","id":"scsi4","lun":4,"scsi-id":0,"write-cache":"on"}' \
   -blockdev '{"driver":"throttle","file":{"cache":{"direct":false,"no-flush":false},"driver":"raw","file":{"aio":"threads","cache":{"direct":false,"no-flush":false},"detect-zeroes":"unmap","discard":"unmap","driver":"host_device","filename":"/dev/rbd-pve/fc4181a6-56eb-4f68-b452-8ba1f381ca2a/cpool/vm-8006-disk-0","node-name":"e5258ec75558b1f102af1e20e677fd0","read-only":false},"node-name":"f5258ec75558b1f102af1e20e677fd0","read-only":false},"node-name":"drive-scsi5","throttle-group":"throttle-drive-scsi5"}' \
-  -device 'scsi-hd,bus=scsihw0.0,channel=0,scsi-id=0,lun=5,drive=drive-scsi5,id=scsi5,write-cache=on' \
+  -device '{"bus":"scsihw0.0","channel":0,"drive":"drive-scsi5","driver":"scsi-hd","id":"scsi5","lun":5,"scsi-id":0,"write-cache":"on"}' \
   -blockdev '{"driver":"throttle","file":{"cache":{"direct":false,"no-flush":false},"driver":"raw","file":{"aio":"threads","cache":{"direct":false,"no-flush":false},"detect-zeroes":"unmap","discard":"unmap","driver":"host_device","filename":"/dev/rbd-pve/fc4181a6-56eb-4f68-b452-8ba1f381ca2a/cpool/vm-8006-disk-0","node-name":"edb33cdcea8ec3e2225509c4945227e","read-only":false},"node-name":"fdb33cdcea8ec3e2225509c4945227e","read-only":false},"node-name":"drive-scsi6","throttle-group":"throttle-drive-scsi6"}' \
-  -device 'scsi-hd,bus=scsihw0.0,channel=0,scsi-id=0,lun=6,drive=drive-scsi6,id=scsi6,write-cache=off' \
+  -device '{"bus":"scsihw0.0","channel":0,"drive":"drive-scsi6","driver":"scsi-hd","id":"scsi6","lun":6,"scsi-id":0,"write-cache":"off"}' \
   -blockdev '{"driver":"throttle","file":{"cache":{"direct":true,"no-flush":false},"driver":"raw","file":{"aio":"io_uring","cache":{"direct":true,"no-flush":false},"detect-zeroes":"unmap","discard":"unmap","driver":"host_device","filename":"/dev/rbd-pve/fc4181a6-56eb-4f68-b452-8ba1f381ca2a/cpool/vm-8006-disk-0","node-name":"eb0b017124a47505c97a5da052e0141","read-only":false},"node-name":"fb0b017124a47505c97a5da052e0141","read-only":false},"node-name":"drive-scsi7","throttle-group":"throttle-drive-scsi7"}' \
-  -device 'scsi-hd,bus=scsihw0.0,channel=0,scsi-id=0,lun=7,drive=drive-scsi7,id=scsi7,write-cache=off' \
+  -device '{"bus":"scsihw0.0","channel":0,"drive":"drive-scsi7","driver":"scsi-hd","id":"scsi7","lun":7,"scsi-id":0,"write-cache":"off"}' \
   -netdev 'type=tap,id=net0,ifname=tap8006i0,script=/usr/libexec/qemu-server/pve-bridge,downscript=/usr/libexec/qemu-server/pve-bridgedown,vhost=on' \
   -device 'virtio-net-pci,mac=A2:C0:43:77:08:A0,netdev=net0,bus=pci.0,addr=0x12,id=net0,rx_queue_size=1024,tx_queue_size=256,bootindex=300' \
   -machine 'type=pc+pve0'
diff --git a/src/test/cfg2cmd/simple-virtio-blk.conf.cmd b/src/test/cfg2cmd/simple-virtio-blk.conf.cmd
index 4a3a4c7a..58f38752 100644
--- a/src/test/cfg2cmd/simple-virtio-blk.conf.cmd
+++ b/src/test/cfg2cmd/simple-virtio-blk.conf.cmd
@@ -16,7 +16,7 @@
   -cpu kvm64,enforce,+kvm_pv_eoi,+kvm_pv_unhalt,+lahf_lm,+sep \
   -m 768 \
   -object '{"id":"throttle-drive-ide2","limits":{},"qom-type":"throttle-group"}' \
-  -object 'iothread,id=iothread-virtio0' \
+  -object '{"id":"iothread-virtio0","qom-type":"iothread"}' \
   -object '{"id":"throttle-drive-virtio0","limits":{},"qom-type":"throttle-group"}' \
   -global 'PIIX4_PM.disable_s3=1' \
   -global 'PIIX4_PM.disable_s4=1' \
@@ -28,9 +28,9 @@
   -device 'VGA,id=vga,bus=pci.0,addr=0x2' \
   -device 'virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3,free-page-reporting=on' \
   -iscsi 'initiator-name=iqn.1993-08.org.debian:01:aabbccddeeff' \
-  -device 'ide-cd,bus=ide.1,unit=0,id=ide2,bootindex=200' \
+  -device '{"bootindex":200,"bus":"ide.1","driver":"ide-cd","unit":0}' \
   -blockdev '{"driver":"throttle","file":{"cache":{"direct":true,"no-flush":false},"driver":"qcow2","file":{"aio":"io_uring","cache":{"direct":true,"no-flush":false},"detect-zeroes":"unmap","discard":"unmap","driver":"file","filename":"/var/lib/vz/images/8006/vm-8006-disk-0.qcow2","node-name":"edd19f6c1b3a6d5a6248c3376a91a16","read-only":false},"node-name":"fdd19f6c1b3a6d5a6248c3376a91a16","read-only":false},"node-name":"drive-virtio0","throttle-group":"throttle-drive-virtio0"}' \
-  -device 'virtio-blk-pci,drive=drive-virtio0,id=virtio0,bus=pci.0,addr=0xa,iothread=iothread-virtio0,bootindex=100,write-cache=on' \
+  -device '{"addr":"0xa","bootindex":100,"bus":"pci.0","drive":"drive-virtio0","driver":"virtio-blk-pci","id":"virtio0","iothread":"iothread-virtio0","write-cache":"on"}' \
   -netdev 'type=tap,id=net0,ifname=tap8006i0,script=/usr/libexec/qemu-server/pve-bridge,downscript=/usr/libexec/qemu-server/pve-bridgedown,vhost=on' \
   -device 'virtio-net-pci,mac=A2:C0:43:77:08:A0,netdev=net0,bus=pci.0,addr=0x12,id=net0,rx_queue_size=1024,tx_queue_size=256,bootindex=300' \
   -machine 'type=pc+pve0'
diff --git a/src/test/cfg2cmd/simple-zfs-over-iscsi.conf.cmd b/src/test/cfg2cmd/simple-zfs-over-iscsi.conf.cmd
index 22603fa5..2e5e67c5 100644
--- a/src/test/cfg2cmd/simple-zfs-over-iscsi.conf.cmd
+++ b/src/test/cfg2cmd/simple-zfs-over-iscsi.conf.cmd
@@ -30,16 +30,16 @@
   -device 'VGA,id=vga,bus=pci.0,addr=0x2' \
   -device 'virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3,free-page-reporting=on' \
   -iscsi 'initiator-name=iqn.1993-08.org.debian:01:aabbccddeeff' \
-  -device 'ide-cd,bus=ide.1,unit=0,id=ide2,bootindex=200' \
-  -device 'virtio-scsi-pci,id=scsihw0,bus=pci.0,addr=0x5' \
+  -device '{"bootindex":200,"bus":"ide.1","driver":"ide-cd","unit":0}' \
+  -device '{"addr":"0x5","bus":"pci.0","driver":"virtio-scsi-pci","id":"scsihw0"}' \
   -blockdev '{"driver":"throttle","file":{"cache":{"direct":true,"no-flush":false},"driver":"raw","file":{"cache":{"direct":true,"no-flush":false},"detect-zeroes":"unmap","discard":"unmap","driver":"iscsi","lun":0,"node-name":"e7106ac43d4f125a1911487dd9e3e42","portal":"127.0.0.1","read-only":false,"target":"iqn.2019-10.org.test:foobar","transport":"tcp"},"node-name":"f7106ac43d4f125a1911487dd9e3e42","read-only":false},"node-name":"drive-scsi0","throttle-group":"throttle-drive-scsi0"}' \
-  -device 'scsi-hd,bus=scsihw0.0,channel=0,scsi-id=0,lun=0,drive=drive-scsi0,id=scsi0,bootindex=100,write-cache=on' \
+  -device '{"bootindex":100,"bus":"scsihw0.0","channel":0,"drive":"drive-scsi0","driver":"scsi-hd","id":"scsi0","lun":0,"scsi-id":0,"write-cache":"on"}' \
   -blockdev '{"driver":"throttle","file":{"cache":{"direct":false,"no-flush":false},"driver":"raw","file":{"cache":{"direct":false,"no-flush":false},"detect-zeroes":"unmap","discard":"unmap","driver":"iscsi","lun":0,"node-name":"efdb73e0d0acc5a60e3ff438cb20113","portal":"127.0.0.1","read-only":false,"target":"iqn.2019-10.org.test:foobar","transport":"tcp"},"node-name":"ffdb73e0d0acc5a60e3ff438cb20113","read-only":false},"node-name":"drive-scsi1","throttle-group":"throttle-drive-scsi1"}' \
-  -device 'scsi-hd,bus=scsihw0.0,channel=0,scsi-id=0,lun=1,drive=drive-scsi1,id=scsi1,write-cache=on' \
+  -device '{"bus":"scsihw0.0","channel":0,"drive":"drive-scsi1","driver":"scsi-hd","id":"scsi1","lun":1,"scsi-id":0,"write-cache":"on"}' \
   -blockdev '{"driver":"throttle","file":{"cache":{"direct":false,"no-flush":false},"driver":"raw","file":{"cache":{"direct":false,"no-flush":false},"detect-zeroes":"unmap","discard":"unmap","driver":"iscsi","lun":0,"node-name":"eab527a81b458aa9603dca5e2505f6e","portal":"127.0.0.1","read-only":false,"target":"iqn.2019-10.org.test:foobar","transport":"tcp"},"node-name":"fab527a81b458aa9603dca5e2505f6e","read-only":false},"node-name":"drive-scsi2","throttle-group":"throttle-drive-scsi2"}' \
-  -device 'scsi-hd,bus=scsihw0.0,channel=0,scsi-id=0,lun=2,drive=drive-scsi2,id=scsi2,write-cache=off' \
+  -device '{"bus":"scsihw0.0","channel":0,"drive":"drive-scsi2","driver":"scsi-hd","id":"scsi2","lun":2,"scsi-id":0,"write-cache":"off"}' \
   -blockdev '{"driver":"throttle","file":{"cache":{"direct":true,"no-flush":false},"driver":"raw","file":{"cache":{"direct":true,"no-flush":false},"detect-zeroes":"unmap","discard":"unmap","driver":"iscsi","lun":0,"node-name":"e915a332310039f7a3feed6901eb5da","portal":"127.0.0.1","read-only":false,"target":"iqn.2019-10.org.test:foobar","transport":"tcp"},"node-name":"f915a332310039f7a3feed6901eb5da","read-only":false},"node-name":"drive-scsi3","throttle-group":"throttle-drive-scsi3"}' \
-  -device 'scsi-hd,bus=scsihw0.0,channel=0,scsi-id=0,lun=3,drive=drive-scsi3,id=scsi3,write-cache=off' \
+  -device '{"bus":"scsihw0.0","channel":0,"drive":"drive-scsi3","driver":"scsi-hd","id":"scsi3","lun":3,"scsi-id":0,"write-cache":"off"}' \
   -netdev 'type=tap,id=net0,ifname=tap8006i0,script=/usr/libexec/qemu-server/pve-bridge,downscript=/usr/libexec/qemu-server/pve-bridgedown,vhost=on' \
   -device 'virtio-net-pci,mac=A2:C0:43:77:08:A0,netdev=net0,bus=pci.0,addr=0x12,id=net0,rx_queue_size=1024,tx_queue_size=256,bootindex=300' \
   -machine 'type=pc+pve0'
diff --git a/src/test/cfg2cmd/simple1-template.conf.cmd b/src/test/cfg2cmd/simple1-template.conf.cmd
index 4f8f29f6..cfbf5086 100644
--- a/src/test/cfg2cmd/simple1-template.conf.cmd
+++ b/src/test/cfg2cmd/simple1-template.conf.cmd
@@ -26,12 +26,12 @@
   -device 'usb-tablet,id=tablet,bus=uhci.0,port=1' \
   -device 'virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3,free-page-reporting=on' \
   -iscsi 'initiator-name=iqn.1993-08.org.debian:01:aabbccddeeff' \
-  -device 'ide-cd,bus=ide.1,unit=0,id=ide2,bootindex=200' \
-  -device 'virtio-scsi-pci,id=scsihw0,bus=pci.0,addr=0x5' \
+  -device '{"bootindex":200,"bus":"ide.1","driver":"ide-cd","unit":0}' \
+  -device '{"addr":"0x5","bus":"pci.0","driver":"virtio-scsi-pci","id":"scsihw0"}' \
   -blockdev '{"driver":"throttle","file":{"cache":{"direct":true,"no-flush":false},"driver":"qcow2","file":{"aio":"io_uring","cache":{"direct":true,"no-flush":false},"detect-zeroes":"unmap","discard":"unmap","driver":"file","filename":"/var/lib/vz/images/8006/base-8006-disk-1.qcow2","node-name":"e1085774206ae4a6b6bf8426ff08f16","read-only":true},"node-name":"f1085774206ae4a6b6bf8426ff08f16","read-only":true},"node-name":"drive-scsi0","throttle-group":"throttle-drive-scsi0"}' \
-  -device 'scsi-hd,bus=scsihw0.0,channel=0,scsi-id=0,lun=0,drive=drive-scsi0,id=scsi0,write-cache=on' \
-  -device 'ahci,id=ahci0,multifunction=on,bus=pci.0,addr=0x7' \
+  -device '{"bus":"scsihw0.0","channel":0,"drive":"drive-scsi0","driver":"scsi-hd","id":"scsi0","lun":0,"scsi-id":0,"write-cache":"on"}' \
+  -device '{"addr":"0x7","bus":"pci.0","driver":"ahci","id":"ahci0","multifunction":"on"}' \
   -blockdev '{"driver":"throttle","file":{"cache":{"direct":true,"no-flush":false},"driver":"qcow2","file":{"aio":"io_uring","cache":{"direct":true,"no-flush":false},"detect-zeroes":"unmap","discard":"unmap","driver":"file","filename":"/var/lib/vz/images/8006/base-8006-disk-0.qcow2","node-name":"eab334c2e07734480f33dd80d89871b","read-only":false},"node-name":"fab334c2e07734480f33dd80d89871b","read-only":false},"node-name":"drive-sata0","throttle-group":"throttle-drive-sata0"}' \
-  -device 'ide-hd,bus=ahci0.0,drive=drive-sata0,id=sata0,write-cache=on' \
+  -device '{"bus":"ahci0.0","drive":"drive-sata0","driver":"ide-hd","write-cache":"on"}' \
   -machine 'accel=tcg,smm=off,type=pc+pve0' \
   -snapshot
diff --git a/src/test/cfg2cmd/simple1.conf.cmd b/src/test/cfg2cmd/simple1.conf.cmd
index 677b0527..d9041167 100644
--- a/src/test/cfg2cmd/simple1.conf.cmd
+++ b/src/test/cfg2cmd/simple1.conf.cmd
@@ -27,10 +27,10 @@
   -device 'VGA,id=vga,bus=pci.0,addr=0x2' \
   -device 'virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3,free-page-reporting=on' \
   -iscsi 'initiator-name=iqn.1993-08.org.debian:01:aabbccddeeff' \
-  -device 'ide-cd,bus=ide.1,unit=0,id=ide2,bootindex=200' \
-  -device 'virtio-scsi-pci,id=scsihw0,bus=pci.0,addr=0x5' \
+  -device '{"bootindex":200,"bus":"ide.1","driver":"ide-cd","unit":0}' \
+  -device '{"addr":"0x5","bus":"pci.0","driver":"virtio-scsi-pci","id":"scsihw0"}' \
   -blockdev '{"driver":"throttle","file":{"cache":{"direct":true,"no-flush":false},"driver":"qcow2","file":{"aio":"io_uring","cache":{"direct":true,"no-flush":false},"detect-zeroes":"unmap","discard":"unmap","driver":"file","filename":"/var/lib/vz/images/8006/vm-8006-disk-0.qcow2","node-name":"ecd04be4259153b8293415fefa2a84c","read-only":false},"node-name":"fcd04be4259153b8293415fefa2a84c","read-only":false},"node-name":"drive-scsi0","throttle-group":"throttle-drive-scsi0"}' \
-  -device 'scsi-hd,bus=scsihw0.0,channel=0,scsi-id=0,lun=0,drive=drive-scsi0,id=scsi0,bootindex=100,write-cache=on' \
+  -device '{"bootindex":100,"bus":"scsihw0.0","channel":0,"drive":"drive-scsi0","driver":"scsi-hd","id":"scsi0","lun":0,"scsi-id":0,"write-cache":"on"}' \
   -netdev 'type=tap,id=net0,ifname=tap8006i0,script=/usr/libexec/qemu-server/pve-bridge,downscript=/usr/libexec/qemu-server/pve-bridgedown,vhost=on' \
   -device 'virtio-net-pci,mac=A2:C0:43:77:08:A0,netdev=net0,bus=pci.0,addr=0x12,id=net0,rx_queue_size=1024,tx_queue_size=256,bootindex=300' \
   -machine 'type=pc+pve0'
-- 
2.39.5



[-- Attachment #2: Type: text/plain, Size: 160 bytes --]

_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2025-06-27 12:42 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <20250627124228.1542397-1-alexandre.derumier@groupe-cyllene.com>
2025-06-27 12:42 ` [pve-devel] [PATCH qemu-server 1/6] pci: add get_pci_addr Alexandre Derumier via pve-devel
2025-06-27 12:42 ` [pve-devel] [PATCH qemu-server 2/6] qmphelpers: add qmp_deviceadd && qmp_devicedel Alexandre Derumier via pve-devel
2025-06-27 12:42 ` [pve-devel] [PATCH qemu-server 3/6] convert drive device to json format Alexandre Derumier via pve-devel
2025-06-27 12:42 ` [pve-devel] [PATCH qemu-server 4/6] convert iothread to json Alexandre Derumier via pve-devel
2025-06-27 12:42 ` [pve-devel] [PATCH qemu-server 5/6] convert disk controller device to json format Alexandre Derumier via pve-devel
2025-06-27 12:42 ` [pve-devel] [PATCH qemu-server 6/6] tests: cfg2cmd: convert drive devices " Alexandre Derumier via pve-devel

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal