ó ¡ôXc@sXddlZddlZddlZdd„Zd„Zd„Zd„Zd„ZdS(iÿÿÿÿNcCs2ddg}|dk ršx|D]t}|dkr4qt|tƒrS|j|ƒqt|dƒrx|j|jƒƒqtdjt|ƒƒƒ‚qWng}d}xIt |ƒD];}||krÛ|j||fƒnt ||dƒ}q³W|j|dfƒx&|D]}t j |d|dƒq WdS(Niitfilenos*{0} must be an int or have a fileno methodii( tNonet isinstancetinttappendthasattrRt ValueErrortformattreprtsortedtmaxtost closerange(t except_fdstexcept_filenost except_fdt fileno_rangestnext_range_mint except_filenot fileno_range((s9/usr/lib/python2.7/site-packages/euca2ools/bundle/util.pyt close_all_fdss(       cCsktjddd|dddfdtjƒ}|jƒ\}}|jƒjdd ƒd jd d ƒjƒS( Ntopenssltx509s-ins -fingerprints-sha1s-noouttstdoutt=iiÿÿÿÿt:t(t subprocesstPopentPIPEt communicatetstriptrsplittreplacetlower(t cert_filenameRt fingerprintt_((s9/usr/lib/python2.7/site-packages/euca2ools/bundle/util.pytget_cert_fingerprint9s  cCs1tjƒ\}}tj|ƒtj|dƒfS(Ntw(R tpipetfdopen(tpipe_rtpipe_w((s9/usr/lib/python2.7/site-packages/euca2ools/bundle/util.pytopen_pipe_fileobjsAscCs2tjdtd|fƒ}t|_|jƒdS(s Start a thread that calls os.waitpid on a particular PID to prevent zombie processes from hanging around after they have finished. ttargettargsN(t threadingtThreadt _wait_for_pidtTruetdaemontstart(tpidt pid_thread((s9/usr/lib/python2.7/site-packages/euca2ools/bundle/util.pytwaitpid_in_threadFs cCs5|r1ytj|dƒWq1tk r-q1XndS(Ni(R twaitpidtOSError(R5((s9/usr/lib/python2.7/site-packages/euca2ools/bundle/util.pyR1Ps  ( R RR/RRR&R,R7R1(((s9/usr/lib/python2.7/site-packages/euca2ools/bundle/util.pyts