
    W'FgR                     f    S SK r SSKJr  SSKJr  SSKJr  SSKJrJ	r	  S r
 " S S	5      rS
 rS rg)    N   )progress)
DeviceDisk)log)StoragePoolStorageVolumec                    [         R                  " X5      nU(       a=  [        R                  " SUR	                  5       U5        [         R
                  " USS9  U$ [         R                  " U S5      n[        R                  " SX$5        [        U 5      nUR                  Ul        XEl        X%l	        UR                  USSSS9nU$ )zf
Helper function for building a pool on demand. Used for building
a scratchdir pool for volume upload
zExisting pool '%s' found for %sT)refreshzboot-scratchz&Building storage pool: path=%s name=%sF)metercreatebuild	autostart)r   lookup_pool_by_pathr   debugnameensure_pool_is_runningfind_free_nameTYPE_DIRtypetarget_pathinstall)connr   pathpoolr   	poolbuildrets          8/usr/share/virt-manager/virtinst/install/volumeupload.py_build_poolr      s    
 **46D		3TYY[$G**4>%%dN;DII6CD!I''INN  

%E&*  ,CJ    c                   $    \ rS rSrSrS rS rSrg)_MockStream(   Nc                     U R                   c  [        U5      U l         Sn[        U R                   U5      n[        SU R                   U-
  5      U l         U$ )N   r   )
_data_sizelenminmax)selfdata
block_sizer   s       r   send_MockStream.send+   sH    ??"!$iDO
$//:.a:!=>
r   c                     g )N )r)   s    r   finish_MockStream.finish4   s    r   )r%   )__name__
__module____qualname____firstlineno__r%   r,   r0   __static_attributes__r/   r   r   r!   r!   (   s    Jr   r!   c                   ^ U R                  5       (       a  [        5       mOU R                  S5      mU4S jn[        R                  " U5      n[
        R                  R                  U5      n[
        R                  R                  U5      n[        R                  " XU5      n[        R                  " SU5        [        R                  " XU[        U5      S-  S-  S-  S5      n[        U 5      n	U	R!                  U5        U	R#                  5         U	R%                  U5        U	R'                  5       n
U
(       d  [)        S5      e SnUnSnU R                  5       (       d  U
R+                  TXU5        [-        US5      nSn[/        S5      S	[
        R                  R                  U5      0-  nUR1                  UU5         S
nUR3                  U5      nU(       d  O)U" U5        U[5        U5      -  nUR7                  U5        MD  TR9                  5         UR;                  5         U
$ ! [<         a    U
R?                  S5        e f = f)z~
Helper for uploading a file to a pool, via libvirt. Used for
kernel/initrd upload when we can't access the system scratchdir
r   c                 `   >  TR                  U 5      nUS:X  d  U[        U 5      :X  a  g XS  n M-  )Nr   )r,   r&   )r*   r   streams     r   	safe_send_upload_file.<locals>.safe_sendC   s7    ++d#Cax3#d)+:D	 r   zGenerated volume name %sg      @Tz%Failed to lookup scratch media volumerbzTransferring '%(filename)s'filenamei   ) in_testsuiter!   	newStreamr   ensure_meterosr   getsizebasenamer   r   r   r   r   build_vol_installfloatset_vol_installvalidatebuild_storageget_vol_objectRuntimeErroruploadopen_startreadr&   updater0   end	Exceptiondelete)r   r   destpoolsrcr:   sizerC   r   vol_installdiskvoloffsetlengthflagsfileobjtotalmsg	blocksizer*   r9   s                      @r   _upload_filera   8   s    " !!%(E 77??3Dww$H''ADII($/..t84[6)F2V;dDK dD%MMOu



C79 	9  ""JJvvu5 sD/ -.BGG,,S123 3C#I<<	*DdOSYELL  			
 J	  

1s   C H( (Ic                 2   [         R                  " S5        [        XU5      n/ n/ n U H?  n[        XXG5      nUR	                  UR                  5       5        UR	                  U5        MA     Xe4$ ! [         a    U H  nUR                  S5        M     e f = f)z2
Upload passed paths to the connection scratchdir
zUploading kernel/initrd mediar   )r   r   r   ra   appendr   rR   rS   )	r   system_scratchdirr   pathlistr   tmpvolsnewpathsr   rY   s	            r   upload_pathsrh      s    
 II-.t$56DGHDtD7COOCHHJ'NN3    CJJqM s   AA0 0&B)rA    r   devicesr   loggerr   storager   r   r   r!   ra   rh   r/   r   r   <module>rm      s1    
     02  HVr   