like discussed off-list, this would break replication and migration from new to old. one possible solution is to add a call to a new 'pvesm apiinfo' that returns APIVER and APIAGE to determine whether we can expect a volid and support for renaming, or the old behaviour.
On February 24, 2020 1:44 pm, Fabian Ebner wrote: > 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 > > _______________________________________________ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel