Volume names are allowed to contain underscores, so it is impossible to determine the snapshot name from just the volume name, e.g: snap_vm-100-disk_with_underscore_here_s_some_more.qcow2
Therefore, pass along the short volume name too and match against it. Note that none of the variables from the result of parse_volname() were actually used previously. Signed-off-by: Fiona Ebner <f.eb...@proxmox.com> --- src/PVE/Storage/LVMPlugin.pm | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/PVE/Storage/LVMPlugin.pm b/src/PVE/Storage/LVMPlugin.pm index 705585f..2026450 100644 --- a/src/PVE/Storage/LVMPlugin.pm +++ b/src/PVE/Storage/LVMPlugin.pm @@ -470,9 +470,11 @@ my sub get_snap_name { } my sub parse_snap_name { - my ($name) = @_; + my ($name, $short_volname) = @_; - if ($name =~ m/^snap_\S+_(.*)\.qcow2$/) { + $short_volname =~ s/\.(qcow2)$//; + + if ($name =~ m/^snap_\Q$short_volname\E_(.*)\.qcow2$/) { return $1; } } @@ -799,11 +801,13 @@ sub status { sub volume_snapshot_info { my ($class, $scfg, $storeid, $volname) = @_; + my $short_volname = ($class->parse_volname($volname))[1]; + my $get_snapname_from_path = sub { my ($path) = @_; my $name = basename($path); - if (my $snapname = parse_snap_name($name)) { + if (my $snapname = parse_snap_name($name, $short_volname)) { return $snapname; } elsif ($name eq $volname) { return 'current'; @@ -812,8 +816,6 @@ sub volume_snapshot_info { }; my $path = $class->filesystem_path($scfg, $volname); - my ($vtype, $name, $vmid, $basename, $basevmid, $isBase, $format) = - $class->parse_volname($volname); my $json = PVE::Storage::Common::qemu_img_info($path, undef, 10, 1); die "failed to query file information with qemu-img\n" if !$json; -- 2.47.2 _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel