3434import libxml2
3535import logging
3636import subprocess
37- import urlgrabber .progress as progress
3837import _util
3938import libvirt
4039import Guest
@@ -475,14 +474,14 @@ def _change_disk_type(self, org_type, cln_type, idxs, ctx):
475474# start duplicate
476475# this function clones the virtual machine according to the ClonDesign object
477476#
478- def start_duplicate (design ):
477+ def start_duplicate (design , meter = None ):
479478
480479 logging .debug ("start_duplicate in" )
481480
482481 # do dupulicate
483482 # at this point, handling the cloning way.
484483 if design .preserve == True :
485- _do_duplicate (design )
484+ _do_duplicate (design , meter )
486485
487486 # define clone xml
488487 design .original_conn .defineXML (design .clone_xml )
@@ -502,7 +501,7 @@ def _vdisk_clone(path, clone):
502501# Now this Cloning method is reading and writing devices.
503502# For future, there are many cloning methods (e.g. fork snapshot cmd).
504503#
505- def _do_duplicate (design ):
504+ def _do_duplicate (design , meter ):
506505
507506 src_fd = None
508507 dst_fd = None
@@ -513,26 +512,26 @@ def _do_duplicate(design):
513512 sparse_copy_mode = False
514513
515514 try :
516- for src_dev in design .original_devices :
515+ for src_dev in design .original_devices :
517516 dst_dev = dst_dev_iter .next ()
518517 dst_siz = dst_siz_iter .next ()
519518
520- size = dst_siz
521- meter = progress .TextMeter ()
522- print _ ("Cloning from %(src)s to %(dst)s" ) % {'src' : src_dev , \
523- 'dst' : dst_dev }
524- meter .start (size = size , text = _ ("Cloning domain..." ))
519+ meter .start (size = dst_siz ,
520+ text = _ ("Cloning from %(src)s to %(dst)s..." ) % \
521+ {'src' : src_dev , 'dst' : dst_dev })
525522
526- # skip
527523 if src_dev == "/dev/null" or src_dev == dst_dev :
528- meter .end (size )
524+ meter .end (dst_siz )
529525 continue
530526
531- if _util .is_vdisk (src_dev ) or (os .path .exists (dst_dev ) and _util .is_vdisk (dst_dev )):
527+ # vdisk specific handlings
528+ if _util .is_vdisk (src_dev ) or (os .path .exists (dst_dev ) and
529+ _util .is_vdisk (dst_dev )):
532530 if not _util .is_vdisk (src_dev ) or os .path .exists (dst_dev ):
533531 raise RuntimeError , _ ("copying to an existing vdisk is not supported" )
534532 if not _vdisk_clone (src_dev , dst_dev ):
535533 raise RuntimeError , _ ("failed to clone disk" )
534+ meter .end (dst_siz )
536535 continue
537536
538537 #
@@ -559,7 +558,7 @@ def _do_duplicate(design):
559558 l = os .read (src_fd , design .clone_bs )
560559 s = len (l )
561560 if s == 0 :
562- meter .end (size )
561+ meter .end (dst_siz )
563562 break
564563 # check sequence of zeros
565564 if sparse_copy_mode == True and zeros == l :
@@ -570,7 +569,7 @@ def _do_duplicate(design):
570569 meter .end (i )
571570 break
572571 i += s
573- if i < size :
572+ if i < dst_siz :
574573 meter .update (i )
575574
576575 os .close (src_fd )
0 commit comments