File handle_existing_storage.patch of Package virt-v2v

Index: virt-v2v-0.9.1/v2v/virt-v2v.pl
===================================================================
--- virt-v2v-0.9.1.orig/v2v/virt-v2v.pl
+++ virt-v2v-0.9.1/v2v/virt-v2v.pl
@@ -304,6 +304,22 @@ drivers have been manually copied to the
 
 =cut
 
+my $storage_conflict_action = "abort";
+
+=item B<--storage_conflict_action=abort>
+
+=item B<--storage_conflict_action=overwrite>
+
+=item B<--storage_conflict_action=use>
+
+Specifies the action to take when the storage volume already exists in the
+target storage pool. The default setting is "abort", which causes the virt-v2v
+process to abort the copy. The "overwrite" option causes the existing volume
+to be overwritten. The "use" option causes the existing volume to be used in
+place (and the storage copy skipped).
+
+=cut
+
 my $verbose;
 
 =item B<-v | --verbose>
@@ -347,6 +363,7 @@ GetOptions ("help|?"      => sub {
                 print "$Sys::VirtConvert::VERSION\n";
                 exit(0);
             },
+            "storage_conflict_action=s" => \$storage_conflict_action,
             "v|verbose+"  => \$verbose,
             "vv"          => sub {
                 $verbose  += 2;
@@ -580,7 +597,7 @@ if (defined($verbose)) {
     logmsg NOTICE, __x('Copying virtual machine storage to target '.
                        '({output})', output => $output_method)
 }
-$source->copy_storage($target, $output_format, $output_sparse);
+$source->copy_storage($target, $output_format, $output_sparse, $storage_conflict_action);
 
 # Open a libguestfs handle on the guest's storage devices
 if (defined($verbose)) { logmsg NOTICE, __x('Starting guestfs') }
Index: virt-v2v-0.9.1/lib/Sys/VirtConvert/Connection/Source.pm
===================================================================
--- virt-v2v-0.9.1.orig/lib/Sys/VirtConvert/Connection/Source.pm
+++ virt-v2v-0.9.1/lib/Sys/VirtConvert/Connection/Source.pm
@@ -157,7 +157,7 @@ reflect their new locations and properti
 sub copy_storage
 {
     my $self = shift;
-    my ($target, $output_format, $output_sparse) = @_;
+    my ($target, $output_format, $output_sparse, $storage_conflict_action) = @_;
 
     my $meta = $self->get_meta();
 
@@ -165,11 +165,23 @@ sub copy_storage
         my $src = $disk->{src};
         my $dst;
         if ($target->volume_exists($src->get_name())) {
-            logmsg WARN, __x('Storage volume {name} already exists on the '.
-                             'target. NOT copying it again. Delete the volume '.
-                             'and retry to copy again.',
+            if ($storage_conflict_action eq "use") {
+                logmsg WARN, __x('Using existing storage volume {name}',
+                                 name => $src->get_name());
+                $dst = $target->get_volume($src->get_name());
+            } elsif ($storage_conflict_action eq "overwrite") {
+                logmsg WARN, __x('Overwriting existing storage volume {name}',
+                                 name => $src->get_name());
+                $dst = $target->get_volume($src->get_name());
+                $dst->get_local_path();
+                _volume_copy($src, $dst);
+            } else {
+                v2vdie  __x('Storage volume {name} already exists on the '.
+                            'target. Set --storage_conflict_action option to '.
+                            '"overwrite" or "use", or manually delete the '.
+                            'target and retry the operation.',
                              name => $src->get_name());
-            $dst = $target->get_volume($src->get_name());
+            }
         } else {
             my $disk_format = defined($output_format) ? $output_format :
                                                         $src->get_format();