Xc@sddlZddlZddlZddlZddlZddlZddlZddl Z de fdYZ dZ dZdZdS(iNtBundleManifestcBsPeZddZeddZeddZedZedZ RS(cCstj|jj|_|dk r3||j_nd|_d|_d|_ i|_ g|_ d|_ d|_ d|_d|_d|_d|_d|_d|_d|_d|_g|_dS(N(tloggingt getLoggert __class__t__name__tlogtNonetlevelt image_archt kernel_idt ramdisk_idtblock_device_mappingst product_codest image_namet account_idt image_typet image_digesttimage_digest_algorithmt image_sizetbundled_image_sizetenc_keytenc_ivt enc_algorithmt image_parts(tselftloglevel((s=/usr/lib/python2.7/site-packages/euca2ools/bundle/manifest.pyt__init__'s&                cCs)t|}|j||SWdQXdS(N(topentread_from_fileobj(tclstmanifest_filenametprivkey_filenametmanifest_fileobj((s=/usr/lib/python2.7/site-packages/euca2ools/bundle/manifest.pytread_from_file<sc Cstjj|j}|}|j}|jjj|_t |drf|j jj|_ nt |dr|j jj|_ nt |drxQ|j j ddD]7}|jjj}|jjj}||j |t/|j||j"_4n d|j"_4d|j"_5|j"j5j)dt6t7|j8xt9|j8D]\} }|dkrtdj:| nt j j d}|j)dt6| t;j<j=|j>|_>|j?|_(|j(j)d|j@|j"j5j|qWt j jA|dtBt jCjD||rt jCjE|jt jCjE|j"}tF||}nd}||_G|jj d|t j jA|dtBt jCjD||jj dditBd6t jCjE|dtBjH}|jj d|ditBd6|jj dt jCjE|dtBd|jHS(Nsenc_key must not be Nonesenc_iv must not be Nones5creating manifest for EC2 service with fingerprint %ssEC2 certificate: %ssuser certificate: %ssuser private key: %sROs 2007-10-10RHitmachinetmappingR%iR&R'spart {0} must not be NoneR(R)txsi_niltUNSIGNEDshex-encoded signature: %ss-- manifest content -- textraR6t pretty_prints%ss-- end of manifest content --txml_declaration(IRRRCRRHRItutiltget_cert_fingerprintRtinfotdebugR*R+tElementtversiontbundlerR8t __version__treleaseR.RR/RR R#tsortedtitemsR5R4R6R R%R R R7R RR9R:RR;tsetRRR>RR?t_public_encryptRDRRARFRERGtstrtlenRRLRMtostpathtbasenameRKt hexdigesttdigest_algorithmt deannotatetTruetetreetcleanup_namespacesttostringt_rsa_sha1_signt signatureR1(RRtuser_cert_filenametec2_cert_filenameRYtec2_fpRNRPR5R4RQtcodetxml_codeR)R(t part_elemtto_signRutpretty_manifest((s=/usr/lib/python2.7/site-packages/euca2ools/bundle/manifest.pyt dump_to_strws                        %    cCs&|j|j|||d|dS(NRY(twriteR~(Rt manifest_fileRRvRwRY((s=/usr/lib/python2.7/site-packages/euca2ools/bundle/manifest.pyt dump_to_files  N( Rt __module__RRt classmethodR!RtFalseR~R(((s=/usr/lib/python2.7/site-packages/euca2ools/bundle/manifest.pyR&s 6 cCstjddddd|gdtjdtj}tj|}|j|\}}yt|d|SWntk rnXtd dS( Ntopenssltrsautls-decrypts-pkcss-inkeytstdintstdoutisjFailed to decrypt the bundle's encryption key. Ensure the key supplied matches the one used for bundling.(t subprocesstPopentPIPEtbinasciit unhexlifyt communicateR=RC(thex_encrypted_keyRtpopentbinary_encrypted_keyt decrypted_keyt_((s=/usr/lib/python2.7/site-packages/euca2ools/bundle/manifest.pyR@s   cCsXtjddddd|dgdtjdtj}|j|\}}tj|S( NRRs-encrypts-pkcss-inkeys-certinRR(RRRRRthexlify(tcontentt cert_filenameRRR((s=/usr/lib/python2.7/site-packages/euca2ools/bundle/manifest.pyRgs cCswtj}|j|tjdddd|ddgdtjdtj}|j|j\}}tj |S( NRtpkeyutls-signs-inkeys-pkeyopts digest:sha1RR( thashlibtsha1tupdateRRRRR;RR(RRR;RRR((s=/usr/lib/python2.7/site-packages/euca2ools/bundle/manifest.pyRt"s  (RRRtos.pathRjRt lxml.etreeR*tlxml.objectifyteuca2ools.bundleRHtobjectRR@RgRt(((s=/usr/lib/python2.7/site-packages/euca2ools/bundle/manifest.pyts