Signed-off-by: Tim Marx <t.m...@proxmox.com>
---
 PVE/API2/Qemu.pm | 45 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 45 insertions(+)

diff --git a/PVE/API2/Qemu.pm b/PVE/API2/Qemu.pm
index a771a1a..fa4ff63 100644
--- a/PVE/API2/Qemu.pm
+++ b/PVE/API2/Qemu.pm
@@ -3141,6 +3141,51 @@ __PACKAGE__->register_method({
        return PVE::QemuConfig->lock_config($vmid, $updatefn);
     }});
 
+my $check_vm_disks_local = sub {
+    my ($storecfg, $vmconf, $vmid) = @_;
+
+    my $local_disks = {};
+
+    my @sids = PVE::Storage::storage_ids($storecfg);
+
+    # check each storage for disks, even if they aren't referenced in VM config
+    foreach my $storeid (@sids) {
+       my $scfg = PVE::Storage::storage_config($storecfg, $storeid);
+       next if $scfg->{shared};
+       next if !PVE::Storage::storage_check_enabled($storecfg, $storeid, 
undef, 1);
+
+       # get list from PVE::Storage (for unused volumes)
+       my $dl = PVE::Storage::vdisk_list($storecfg, $storeid, $vmid);
+       next if @{$dl->{$storeid}} == 0;
+
+       PVE::Storage::foreach_volid($dl, sub {
+           my ($volid, $sid, $volname) = @_;
+           $local_disks->{$volid} = $volname;
+       });
+    }
+
+    # add some more information to the disks e.g. cdrom
+    PVE::QemuServer::foreach_volid($vmconf, sub {
+       my ($volid, $attr) = @_;
+
+       my ($storeid, $volname) = PVE::Storage::parse_volume_id($volid, 1);
+       if ($storeid) {
+           my $scfg = PVE::Storage::storage_config($storecfg, $storeid);
+           return if $scfg->{shared};
+       }
+       # The shared attr here is just a special case where the vdisk
+       # is marked as shared manually
+       return if $attr->{shared};
+       return if $attr->{cdrom} and $volid eq "none";
+
+       if (exists $local_disks->{$volid}) {
+           @{$local_disks->{$volid}}{keys %$attr} = values %$attr
+       } else {
+           $local_disks->{$volid} = $attr;
+           # ensure volid is present in case it's needed
+           $local_disks->{$volid}->{volid} = $volid;
+       }
+    });
 __PACKAGE__->register_method({
     name => 'migrate_vm',
     path => '{vmid}/migrate',
-- 
2.11.0

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

Reply via email to