ó FRTc@s¬ddlZddlZddlmZmZddlmZmZddlm Z ddl Z de fd„ƒYZ e dkr¨ej dd ƒe ƒZejƒndS( iÿÿÿÿN(tget_instance_metadatatget_instance_userdata(tConfigtBotoConfigPath(t ScriptBaset BootstrapcBsMeZdZd„Zd„Zd„Zd„Zd„Zd„Zd„Z RS(s\ The Bootstrap class is instantiated and run as part of the PyAMI instance initialization process. The methods in this class will be run from the rc.local script of the instance and will be run as the root user. The main purpose of this class is to make sure the boto distribution on the instance is the one required. cCs*d|_|jƒtt|ƒjƒdS(Ns /mnt/pyami(t working_dirtwrite_metadatatsuperRt__init__(tself((sA/opt/freeware/lib/python2.7/site-packages/boto/pyami/bootstrap.pyR (s  cCs¼ttjjtƒdƒ}|jdƒtƒ}x)|D]!}|jd|||fƒq8Wtƒ}|jd|ƒ|jdƒ|jd|jƒ|j ƒt ƒt _ t j ƒdS(Ntws [Instance] s%s = %s s %s s[Pyami] sworking_dir = %s (topentostpatht expanduserRtwriteRRRtcloseRtbototconfigt init_logging(R tfpt inst_datatkeyt user_data((sA/opt/freeware/lib/python2.7/site-packages/boto/pyami/bootstrap.pyR-s       cCsCtjjd|jƒtjj|jƒs?tj|jƒndS(NsWorking directory: %s(RtlogtinfoRR Rtexiststmkdir(R ((sA/opt/freeware/lib/python2.7/site-packages/boto/pyami/bootstrap.pytcreate_working_dir>scCs¢tjjdddƒ}|jdƒr–|jdƒdkr^|jdƒ\}}d|}nd}tjjdd d ƒ}|jd ||fƒn|jd ƒr€tjjdd d ƒ}d}xm|dkr2|d8}y|jdd|ƒd}WqÆtk r.}tjj d|ƒt j dƒqÆXqÆW|jdƒdkr`|jdƒ\}}nd}|jd|d|ƒn|jdƒ|jd|ƒdS(NtBotot boto_updatessvn:HEADtsvnt:is-r%ss-rHEADt boto_locations/usr/local/botossvn update %s %stgits*/usr/share/python-support/python-boto/botoi isgit pulltcwdsOgit pull attempt failed with the following exception. Trying again in a bit. %sitmastersgit checkout %ss.rm /usr/local/lib/python2.5/site-packages/botoseasy_install %s( RRtgett startswithtfindtsplittrunt ExceptionRRttimetsleep(R tupdatetmethodtversiontlocationtnum_remaining_attemptste((sA/opt/freeware/lib/python2.7/site-packages/boto/pyami/bootstrap.pyt load_botoCs2    cCs‰yaddlm}||ƒ}tjj|j|jdƒdƒ}t|dƒj|j ƒƒWn!t j j d|ƒd}nX|S(Niÿÿÿÿ(t fetch_filet/R sProblem Retrieving file: %s(t boto.utilsR5R RtjoinRR)R RtreadRRt exceptiontNone(R ts3_fileR5tfR((sA/opt/freeware/lib/python2.7/site-packages/boto/pyami/bootstrap.pyt fetch_s3_filebs %  cCs¡tjjddƒ}|r|jdƒ}xp|D]e}|jƒ}|jdƒrd|j|ƒ}n|r1|jdƒs–|jd|dt ƒq–q1q1WndS(NtPyamitpackagest,ss3:s.pyseasy_install -Z %st exit_on_error( RRR&R)tstripR'R>tendswithR*tFalse(R t package_strR@tpackage((sA/opt/freeware/lib/python2.7/site-packages/boto/pyami/bootstrap.pyt load_packagesms  cCs?|jƒ|jƒ|jƒ|jdtjjdƒƒdS(NsBootstrap Completed for %ss instance-id(RR4RHtnotifyRRt get_instance(R ((sA/opt/freeware/lib/python2.7/site-packages/boto/pyami/bootstrap.pytmain{s   ( t__name__t __module__t__doc__R RRR4R>RHRK(((sA/opt/freeware/lib/python2.7/site-packages/boto/pyami/bootstrap.pyRs      t__main__t bootstraps/var/log/boto.log(R RR7RRtboto.pyami.configRRtboto.pyami.scriptbaseRR,RRLtset_file_loggertbsRK(((sA/opt/freeware/lib/python2.7/site-packages/boto/pyami/bootstrap.pyts   d