This function is intened to be used after doing a migration where some of the volume IDs changed.
Signed-off-by: Fabian Ebner <f.eb...@proxmox.com> --- PVE/AbstractConfig.pm | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/PVE/AbstractConfig.pm b/PVE/AbstractConfig.pm index 9ce3d12..aa10101 100644 --- a/PVE/AbstractConfig.pm +++ b/PVE/AbstractConfig.pm @@ -366,6 +366,35 @@ sub add_unused_volume { return $key; } +# $volume_map is a hash of 'old_volid' => 'new_volid' pairs. +# This method replaces 'old_volid' by 'new_volid' throughout +# the config including snapshots and unused and vmstate volumes +sub update_volume_ids { + my ($class, $conf, $volume_map) = @_; + + my $opts = { + 'include_unused' => 1, + 'include_vmstate' => 1, + }; + + my $do_replace = sub { + my ($key, $volume, $conf) = @_; + + my $old_volid = $volume->{$class->volid_key()}; + if (my $new_volid = $volume_map->{$old_volid}) { + $volume->{$class->volid_key()} = $new_volid; + $conf->{$key} = $class->print_volume($key, $volume); + } + }; + + $class->snapshot_foreach_volume($conf, $opts, $do_replace, $conf); + + foreach my $snap (keys %{$conf->{snapshots}}) { + my $snap_conf = $conf->{snapshots}->{$snap}; + $class->snapshot_foreach_volume($snap_conf, $opts, $do_replace, $snap_conf); + } +} + # Returns whether the template parameter is set in $conf. sub is_template { my ($class, $conf) = @_; -- 2.20.1 _______________________________________________ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel