On Mon, Feb 15, 2016 at 02:33:48PM +0100, Timo Grodzinski wrote: > Signed-off-by: Timo Grodzinski <t.grodzin...@profihost.ag> > --- > PVE/QemuServer.pm | 61 > ++++++++++++++++++++++++++++++++++++++++++++++++++++++- > 1 file changed, 60 insertions(+), 1 deletion(-) > > diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm > index 6fafa59..6c777d5 100644 > --- a/PVE/QemuServer.pm > +++ b/PVE/QemuServer.pm > @@ -6368,7 +6368,7 @@ sub is_template { > } > > sub qemu_img_convert { > - my ($src_volid, $dst_volid, $size, $snapname, $dont_create_target) = @_; > + my ($src_volid, $dst_volid, $size, $snapname, %params) = @_;
As mentioned in my reply to patch 1 this looks like it should be part of patch 1. > > my $storecfg = PVE::Storage::config(); > my ($src_storeid, $src_volname) = > PVE::Storage::parse_volume_id($src_volid, 1); > @@ -6547,6 +6547,65 @@ sub clone_disk { > return $disk; > } > > +sub import_disk { > + my ( $storecfg, $vmid, $img_volid, $drive ) = @_; > + > + print "\nimport disk $img_volid\n"; > + > + my $old_volid = $drive->{file}; > + > + my $size_existing = $drive->{size}; > + my $size_new = get_image_size( $storecfg, $img_volid ); > + > + die "cannot determine of existing drive\n" if > !$size_existing; + size ;-) > + die "cannot determine virtual image size of uploaded image\n" if > !$size_new; > + > + print "\n"; > + print "size of uploaded image: $size_new bytes\n"; > + print "size of drive: $size_existing bytes\n"; > + > + die "virtual image size ($size_new bytes) is bigger than existing drive > ($size_existing bytes)\n" > + if $size_new > $size_existing; > + > + my ( $size ) = PVE::Storage::volume_size_info( $storecfg, $img_volid, 3 > ); > + > + PVE::Storage::activate_volumes( $storecfg, [$old_volid] ); > + > + my ( $dst_storeid, $dst_volname ) = PVE::Storage::parse_volume_id( > $old_volid ); > + my $dst_scfg = PVE::Storage::storage_config( $storecfg, $dst_storeid ); > + my $dst_format = qemu_img_format( $dst_scfg, $dst_volname ); > + > + print "\nremove existing disk '$old_volid'...\n"; > + PVE::Storage::vdisk_free( $storecfg, $old_volid ); > + > + print "\n"; > + print "create new disk on storage '$dst_storeid'...\n"; > + my $new_volid = PVE::Storage::vdisk_alloc( $storecfg, $dst_storeid, > $vmid, $dst_format, undef, ( $size / 1024 ) ); > + print "new disk '$new_volid' created\n"; > + > + print "\nconverting image..."; > + eval { > + qemu_img_convert( > + $img_volid, $old_volid, $size, undef, > + dont_create_target => 1, Is there any place where you need this 0 currently? Since this was the default anyhow. > + auto_src_format => 1, > + verbose => 1 > + ); > + }; > + die "converting image failed: '$@'\n" if $@; > + > + ( $size ) = PVE::Storage::volume_size_info( $storecfg, $old_volid, 3 ); > + > + if ( $size_new != $size_existing ) { > + print "\nstarting resize of image...\n"; > + PVE::Storage::volume_resize( $storecfg, $old_volid, $size_existing, > check_running( $vmid ) ); > + } > + > + print "\nimport of disk $img_volid complete\n"; > + > + return $drive; > +} > + > sub get_image_size { > my ( $storecfg, $volid ) = @_; _______________________________________________ pve-devel mailing list pve-devel@pve.proxmox.com http://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel