all lists on lists.proxmox.com
 help / color / mirror / Atom feed
From: Fiona Ebner <f.ebner@proxmox.com>
To: Proxmox VE development discussion <pve-devel@lists.proxmox.com>,
	Hannes Duerr <h.duerr@proxmox.com>
Subject: Re: [pve-devel] [PATCH v3 qemu-server 2/2] fix #4957: add vendor and product information passthrough for SCSI-Disks
Date: Thu, 16 Nov 2023 11:37:03 +0100	[thread overview]
Message-ID: <fb0c3159-8e40-4de9-a244-1dfd1efa89ce@proxmox.com> (raw)
In-Reply-To: <20231110093358.62006-3-h.duerr@proxmox.com>

Am 10.11.23 um 10:33 schrieb Hannes Duerr:
> adds vendor and product information for SCSI devices to the json schema and
> checks in the VM create/update API call if it is possible to add these to QEMU as a device option
> 
> Signed-off-by: Hannes Duerr <h.duerr@proxmox.com>
> ---
>  PVE/API2/Qemu.pm        | 12 ++++++++++++
>  PVE/QemuServer.pm       | 28 ++++++++++++++++++++++++++++
>  PVE/QemuServer/Drive.pm | 24 ++++++++++++++++++++++++
>  3 files changed, 64 insertions(+)
> 
> diff --git a/PVE/API2/Qemu.pm b/PVE/API2/Qemu.pm
> index 38bdaab..9d8171a 100644
> --- a/PVE/API2/Qemu.pm
> +++ b/PVE/API2/Qemu.pm
> @@ -1013,6 +1013,13 @@ __PACKAGE__->register_method({
>  		my $conf = $param;
>  		my $arch = PVE::QemuServer::get_vm_arch($conf);
>  
> +		for my $opt (sort keys $param->%*) {
> +		    if ($opt =~ m/scsi/) {

Should be anchored and best to even match for the number too, i.e.
^scsi(\d)+$ to make it future-proof. E.g. there could be a
'scsi-defaults' option at some point

> +			PVE::QemuServer::assert_scsi_feature_compatibility(
> +			    $opt, $conf, $storecfg, $param->{$opt});
> +		    }
> +		}
> +
>  		$conf->{meta} = PVE::QemuServer::new_meta_info_string();
>  
>  		my $vollist = [];
> @@ -1828,6 +1835,11 @@ my $update_vm_api  = sub {
>  		    PVE::QemuServer::vmconfig_register_unused_drive($storecfg, $vmid, $conf, PVE::QemuServer::parse_drive($opt, $conf->{pending}->{$opt}))
>  			if defined($conf->{pending}->{$opt});
>  
> +		    if ($opt =~ m/scsi/) {
> +			PVE::QemuServer::assert_scsi_feature_compatibility(
> +			    $opt, $conf, $storecfg, $param->{$opt});
> +		    }
> +
>  		    my (undef, $created_opts) = $create_disks->(
>  			$rpcenv,
>  			$authuser,
> diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm
> index 9a83021..9c998d6 100644
> --- a/PVE/QemuServer.pm
> +++ b/PVE/QemuServer.pm
> @@ -1368,6 +1368,24 @@ my sub get_drive_id {
>      return "$drive->{interface}$drive->{index}";
>  }
>  
> +sub assert_scsi_feature_compatibility {
> +    my ($opt, $conf, $storecfg, $drive_attributes) = @_;
> +

Since it's only used in API2/Qemu.pm, should it live there?

> +    my $drive = parse_drive($opt, $drive_attributes);
> +
> +    my $machine_type = get_vm_machine($conf, undef, $conf->{arch});
> +    my $machine_version = extract_version($machine_type, kvm_user_version());
> +    my $drivetype = PVE::QemuServer::Drive::get_scsi_devicetype(
> +	$drive, $storecfg, $machine_version);
> +
> +    if ($drivetype ne 'hd' && $drivetype ne 'cd') {
> +	if ($drive_attributes =~ m/vendor/ || $drive_attributes =~ m/product/) {

Please check $drive->{vendor} and $drive->{product} here. These regexes
are brittle and not future-proof.

> +	    die "only 'scsi-hd' and 'scsi-cd' devices".
> +		"support passing vendor and product information\n";

Could be a raise_param_exc and maybe give a hint about pass-through? For
example:

only 'scsi-hd' and 'scsi-cd' devices (e.g. not pass-through)

Like that users will know in most situations what the issue is.




      reply	other threads:[~2023-11-16 10:37 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-11-10  9:33 [pve-devel] [PATCH v3 qemu-server 0/2] " Hannes Duerr
2023-11-10  9:33 ` [pve-devel] [PATCH v3 qemu-server 1/2] Create get_scsi_devicetype and move it and its dependencies to QemuServer/Drive.pm Hannes Duerr
2023-11-16 10:15   ` Fiona Ebner
2023-11-10  9:33 ` [pve-devel] [PATCH v3 qemu-server 2/2] fix #4957: add vendor and product information passthrough for SCSI-Disks Hannes Duerr
2023-11-16 10:37   ` Fiona Ebner [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=fb0c3159-8e40-4de9-a244-1dfd1efa89ce@proxmox.com \
    --to=f.ebner@proxmox.com \
    --cc=h.duerr@proxmox.com \
    --cc=pve-devel@lists.proxmox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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