ó
è?F[c           @   s¬   d  d l  Z  d  d l Z d  d l m Z m Z d  d l m Z m Z d  d l m	 Z	 d  d l
 Z
 d e	 f d „  ƒ  YZ e d k r¨ e j d d	 ƒ e ƒ  Z e j ƒ  n  d S(
   iÿÿÿÿN(   t   get_instance_metadatat   get_instance_userdata(   t   Configt   BotoConfigPath(   t
   ScriptBaset	   Bootstrapc           B   sM   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  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.
    c         C   s*   d |  _  |  j ƒ  t t |  ƒ j ƒ  d  S(   Ns
   /mnt/pyami(   t   working_dirt   write_metadatat   superR   t   __init__(   t   self(    (    s3   lib/python2.7/site-packages/boto/pyami/bootstrap.pyR	   (   s    	
c         C   s¼   t  t j j t ƒ d ƒ } | j d ƒ t ƒ  } x) | D]! } | j d | | | f ƒ q8 Wt ƒ  } | j d | ƒ | j d ƒ | j d |  j ƒ | j	 ƒ  t
 ƒ  t _ t j ƒ  d  S(   Nt   ws   [Instance]
s   %s = %s
s   
%s
s   [Pyami]
s   working_dir = %s
(   t   opent   ost   patht
   expanduserR   t   writeR    R   R   t   closeR   t   botot   configt   init_logging(   R
   t   fpt	   inst_datat   keyt	   user_data(    (    s3   lib/python2.7/site-packages/boto/pyami/bootstrap.pyR   -   s    		
c         C   sC   t  j j d |  j ƒ t j j |  j ƒ s? t j |  j ƒ n  d  S(   Ns   Working directory: %s(   R   t   logt   infoR   R   R   t   existst   mkdir(   R
   (    (    s3   lib/python2.7/site-packages/boto/pyami/bootstrap.pyt   create_working_dir>   s    c         C   s¢  t  j j d d d ƒ } | j d ƒ r– | j d ƒ d k r^ | j d ƒ \ } } d | } n d } t  j j d d	 d
 ƒ } |  j d | | f ƒ n| j d ƒ r€t  j j d d	 d ƒ } d } xm | d k r2| d 8} y |  j d d | ƒd } WqÆ t k
 r.} t  j j	 d | ƒ t
 j d ƒ qÆ XqÆ W| j d ƒ d k r`| j d ƒ \ } } n d } |  j d | d | ƒn |  j d ƒ |  j d | ƒ d  S(   Nt   Botot   boto_updates   svn:HEADt   svnt   :i    s   -r%ss   -rHEADt   boto_locations   /usr/local/botos   svn update %s %st   gits*   /usr/share/python-support/python-boto/botoi
   i   s   git pullt   cwdsO   git pull attempt failed with the following exception. Trying again in a bit. %si   t   masters   git checkout %ss.   rm /usr/local/lib/python2.5/site-packages/botos   easy_install %s(   R   R   t   gett
   startswitht   findt   splitt   runt	   ExceptionR   R   t   timet   sleep(   R
   t   updatet   methodt   versiont   locationt   num_remaining_attemptst   e(    (    s3   lib/python2.7/site-packages/boto/pyami/bootstrap.pyt	   load_botoC   s2    

c         C   s‰   ya d d l  m } | | ƒ } t j j |  j | j d ƒ d ƒ } t | d ƒ j | j	 ƒ  ƒ Wn! t
 j j d | ƒ d  } n X| S(   Niÿÿÿÿ(   t
   fetch_filet   /R   s   Problem Retrieving file: %s(   t
   boto.utilsR5   R   R   t   joinR   R)   R   R   t   readR   R   t	   exceptiont   None(   R
   t   s3_fileR5   t   fR   (    (    s3   lib/python2.7/site-packages/boto/pyami/bootstrap.pyt   fetch_s3_fileb   s    % 
c         C   s¡   t  j j d d ƒ } | r | j d ƒ } xp | D]e } | j ƒ  } | j d ƒ rd |  j | ƒ } n  | r1 | j d ƒ s– |  j d | d t	 ƒq– q1 q1 Wn  d  S(   Nt   Pyamit   packagest   ,s   s3:s   .pys   easy_install -Z %st   exit_on_error(
   R   R   R&   R)   t   stripR'   R>   t   endswithR*   t   False(   R
   t   package_strR@   t   package(    (    s3   lib/python2.7/site-packages/boto/pyami/bootstrap.pyt   load_packagesm   s    c         C   s?   |  j  ƒ  |  j ƒ  |  j ƒ  |  j d t j j d ƒ ƒ d  S(   Ns   Bootstrap Completed for %ss   instance-id(   R   R4   RH   t   notifyR   R   t   get_instance(   R
   (    (    s3   lib/python2.7/site-packages/boto/pyami/bootstrap.pyt   main{   s    


(
   t   __name__t
   __module__t   __doc__R	   R   R   R4   R>   RH   RK   (    (    (    s3   lib/python2.7/site-packages/boto/pyami/bootstrap.pyR      s   							t   __main__t	   bootstraps   /var/log/boto.log(   R   R   R7   R    R   t   boto.pyami.configR   R   t   boto.pyami.scriptbaseR   R,   R   RL   t   set_file_loggert   bsRK   (    (    (    s3   lib/python2.7/site-packages/boto/pyami/bootstrap.pyt   <module>   s   d	