Xc@s(ddlZddlZddlZddlmZddlmZmZddl m Z ddl Z ddl m Z ddlmZddlmZddlmZmZdd lmZdd lmZdd lmZdd lmZdd lmZddlZ de ee fdYZ!dS(iN(tArg(t ArgumentErrort ServerError(tFileTransferProgressBarMixin(t EC2Request(tDescribeConversionTasks(t S3AccessMixin(tImportManifesttImportImagePart(t DeleteObject(t HeadObject(t GetObject(t PutObject(tAWSErrort ResumeImportc BseZdZedddddedddedd ed d dd d eddddedddd edddejedd edejeddddejeddddejgZdZ dZ dZ dZ dZ RS(s)Perform the upload step of an import tasktsourcetmetavartFILEthelps3file containing the disk image to import (required)s-ts--tasktrequireds.the ID of the import task to resume (required)s-xs --expirestDAYSttypetdefaultis\how long the import manifest should remain valid, in days (default: 30 days)s --part-sizetMiBi s--user-threadss--dont-verify-formattactiont store_trues --dry-runcCs_tj||j|jjds9d|jddG|jdGHntj|d|jdg}|jdd}|d|jdkst|jd r|d }n|d d d}tjj |jd }|j ||}|j d j d}||kr,t dj|jd ||n|jdj|dd\}}}tjjg|j D]} tjj| j^qf} x|j D]} dj|| jf} tj|d|jdd|jdd| } y| jWqtk r,} | jdkr&|j| | | q-qXqWdS(Ntdry_runt show_progresssUploading image for taskttasktConversionTaskIdtconversionTasksitconversionTaskIdt importVolumetimportInstancetvolumesRiis`file "{0}" is not the same size as the file the import started with (expected: {1}, actual: {2})t s3_servicetimagetimportManifestUrlt/tservicetauthts3_authtpathi(RRtFalseRt from_othertmaintAssertionErrort euca2oolstutilt get_filesizet%_ResumeImport__get_or_create_manifestt image_partstendRtformattresolve_url_to_locationt build_progressbar_label_templatetosR0tbasenametkeytjoinR R t status_codet_ResumeImport__upload_part(Rt desc_convR"t vol_containert file_sizetmanifesttfile_size_from_manifestt_tbuckettparttpbar_label_templatet part_s3paththead_reqterr((sG/usr/lib/python2.7/site-packages/euca2ools/commands/ec2/resumeimport.pyR3LsD     .cCs|jdj|dd\}}}dj||f}ytjddx}tj|d|jdd|jd d |d |d t}|j|j j d |j dt j |} WdQXWntk r} | jdkr|j j d|j||} tj} tjj| tjj|} t| d} | j| dtWdQXtj|d | d |d t}|jtj| tj| qnX| S(NR)R*R+R,tmax_sizeiR-R.R/RtdestR!s.using existing import manifest from the serveriiscreating new import manifesttwt pretty_print(RR<RAttempfiletSpooledTemporaryFileR R2R1R3tlogtinfotseekRtread_from_fileobjRRBt _ResumeImport__generate_manifesttmkdtempR>R0R?topentdump_to_fileobjtTrueR tremovetrmdir(RRERFRIRJR@tmanifest_s3pathtmanifest_destfiletget_reqRGROttempdirtmanifest_filenamet manifest_filetput_req((sG/usr/lib/python2.7/site-packages/euca2ools/commands/ec2/resumeimport.pyt__get_or_create_manifestzs@        c CsO|jjdpd}|d}|jdj|dd\}}}|jddd }td |jj} |dd | _tj |d |jdd |jdddj ||f} | j || _ t |dd| _t |dd| _|jjdpdd} x)ttjjd || D] \} } t}| |_| |_t| | |d|_dj|tjj|jd| |_dj ||jf}tj | d|}tj | d|}tj | d|} |j ||_ |j ||_!| j ||_"| j#j$|q>W| S(NRiiQR)R*R+R,iitloglevelR;R-R.R/R0tsizetvolumet part_sizei iis{0}/{1}.part.{2}Ri(%RRR<trsplitRRVtlevelt file_formatR R2RAtget_presigned_url2tself_destruct_urltintt image_sizet volume_sizet enumeratetsixtmovestrangeRtindextstarttminR:R;R>R0R?R@R R thead_urltget_urlt delete_urlR9tappend(RRERFtdaysttimeoutRIRJR@t key_prefixRGt delete_reqRlRyt part_startRKt part_pathRNRc((sG/usr/lib/python2.7/site-packages/euca2ools/commands/ec2/resumeimport.pyt__generate_manifests>      %cCs|jjd||j|j|jdtjj|jd|j d}t |j d}|j |jt j|d|j dd|j d d|d |d |j|jdd |j jd td |}|jSWdQXdS(NsUploading part %s (bytes %i-%i)tfnameRyiRR-R)R.R/RQRjR!tprogressbar_label(RVRWRzR:R;R>R0R?R@RyR\RRXR R2RR1R3(RRKRMRLtpart_pbar_labelRRg((sG/usr/lib/python2.7/site-packages/euca2ools/commands/ec2/resumeimport.pyt __upload_parts % (t__name__t __module__t DESCRIPTIONRR^RrtargparsetSUPPRESStARGSRR3R8RZRC(((sG/usr/lib/python2.7/site-packages/euca2ools/commands/ec2/resumeimport.pyR0s$   . # !("Rtos.pathR>RTtrequestbuilderRtrequestbuilder.exceptionsRRtrequestbuilder.mixinsRRvteuca2ools.commands.ec2Rt.euca2ools.commands.ec2.describeconversiontasksRteuca2ools.commands.ec2.mixinsRt!euca2ools.commands.ec2.structuresRRt"euca2ools.commands.s3.deleteobjectR t euca2ools.commands.s3.headobjectR teuca2ools.commands.s3.getobjectR teuca2ools.commands.s3.putobjectR teuca2ools.exceptionsR teuca2ools.utilR5R(((sG/usr/lib/python2.7/site-packages/euca2ools/commands/ec2/resumeimport.pyts"