In preparation to introduce an allow_rename parameter. Signed-off-by: Fabian Ebner <f.eb...@proxmox.com> --- PVE/CLI/pvesm.pm | 2 +- PVE/Storage.pm | 41 ++++++++++++++++++++++++++++++++--------- 2 files changed, 33 insertions(+), 10 deletions(-)
diff --git a/PVE/CLI/pvesm.pm b/PVE/CLI/pvesm.pm index 7b83ec8..c55cdd0 100755 --- a/PVE/CLI/pvesm.pm +++ b/PVE/CLI/pvesm.pm @@ -779,7 +779,7 @@ our $cmddef = { export => [ __PACKAGE__, 'export', ['volume', 'format', 'filename']], import => [ __PACKAGE__, 'import', ['volume', 'format', 'filename'], {}, sub { my $volid = shift; - print "successfully imported '$volid'\n"; + print PVE::Storage::volume_imported_message($volid); }], }; diff --git a/PVE/Storage.pm b/PVE/Storage.pm index 38341f6..cb07066 100755 --- a/PVE/Storage.pm +++ b/PVE/Storage.pm @@ -571,7 +571,7 @@ sub storage_migrate { my $scfg = storage_config($cfg, $storeid); # no need to migrate shared content - return if $storeid eq $target_storeid && $scfg->{shared}; + return $volid if $storeid eq $target_storeid && $scfg->{shared}; my $tcfg = storage_config($cfg, $target_storeid); @@ -620,6 +620,19 @@ sub storage_migrate { push @$recv, '-base', $base_snapshot; } + my $new_volid; + my $pattern = volume_imported_message(undef, 1); + my $match_volid_and_log = sub { + my $line = shift; + + $new_volid = $1 if ($line =~ m!$pattern!); + + if ($logfunc) { + chomp($line); + $logfunc->($line); + } + }; + volume_snapshot($cfg, $volid, $snapshot) if $migration_snapshot; eval { if ($insecure) { @@ -637,13 +650,8 @@ sub storage_migrate { shutdown($socket, 1); # wait for the remote process to finish - if ($logfunc) { - while (my $line = <$info>) { - chomp($line); - $logfunc->("[$target_sshinfo->{name}] $line"); - } - } else { - 1 while <$info>; + while (my $line = <$info>) { + $match_volid_and_log->("[$target_sshinfo->{name}] $line"); } # now close the socket @@ -653,8 +661,11 @@ sub storage_migrate { die "import failed: exit code ".($?>>8)."\n"; } } else { - run_command([$send, @cstream, $recv], logfunc => $logfunc); + run_command([$send, @cstream, $recv], logfunc => $match_volid_and_log); } + + die "unable to get ID of the migrated volume\n" + if !defined($new_volid); }; my $err = $@; warn "send/receive failed, cleaning up snapshot(s)..\n" if $err; @@ -663,6 +674,8 @@ sub storage_migrate { warn "could not remove source snapshot: $@\n" if $@; } die $err if $err; + + return $new_volid; } sub vdisk_clone { @@ -1461,6 +1474,16 @@ sub volume_transfer_formats { return @common; } +sub volume_imported_message { + my ($volid, $want_pattern) = @_; + + if ($want_pattern) { + return "successfully imported '([^']*)'\$"; + } else { + return "successfully imported '$volid'\n"; + } +} + # bash completion helper sub complete_storage { -- 2.20.1 _______________________________________________ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel