[pve-devel] [RFC storage 5/16] storage_migrate: return volume ID of migrated volume
Fabian Ebner
f.ebner at proxmox.com
Wed Jan 29 14:30:03 CET 2020
Since 'pvesm import' uses a new volume ID if the requested one is already
present, callers should have a way to get the new volume ID.
Signed-off-by: Fabian Ebner <f.ebner at proxmox.com>
---
PVE/CLI/pvesm.pm | 2 +-
PVE/Storage.pm | 41 +++++++++++++++++++++++++++++++++--------
2 files changed, 34 insertions(+), 9 deletions(-)
diff --git a/PVE/CLI/pvesm.pm b/PVE/CLI/pvesm.pm
index 7d8547b..74294b4 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 2b292f6..57d723d 100755
--- a/PVE/Storage.pm
+++ b/PVE/Storage.pm
@@ -615,6 +615,21 @@ sub storage_migrate {
push @$recv, '-base', $base_snapshot;
}
+ my $new_volid;
+ my $match_volid_and_log = sub {
+ my $line = shift;
+ my $pattern = volume_imported_message(undef, 1);
+
+ if ($line =~ m!$pattern!) {
+ $new_volid = $1;
+ }
+
+ if ($logfunc) {
+ chomp($line);
+ $logfunc->($line);
+ }
+ };
+
volume_snapshot($cfg, $volid, $snapshot) if $migration_snapshot;
eval {
if ($insecure) {
@@ -632,13 +647,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
@@ -648,8 +658,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;
@@ -658,6 +671,8 @@ sub storage_migrate {
warn "could not remove source snapshot: $@\n" if $@;
}
die $err if $err;
+
+ return $new_volid;
}
sub vdisk_clone {
@@ -1447,6 +1462,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
More information about the pve-devel
mailing list