ó
è?F[c           @  sä   d  d l  m Z d  d l m Z d  d l m Z m Z m Z m Z m	 Z	 d  d l
 m Z d  d l m Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l m Z d  d l Z d e f d	 „  ƒ  YZ d
 e f d „  ƒ  YZ d S(   iÿÿÿÿ(   t   print_function(   t   Model(   t   StringPropertyt   IntegerPropertyt   ListPropertyt   ReferencePropertyt   CalculatedProperty(   t   Server(   t   propgetN(   t   closingt   CommandLineGetterc           B  sG   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C  sJ   | j  d d  ƒ sF |  j j d ƒ } t j  | d t j j ƒ| d <n  d  S(   Nt   regiont   region_namet   choices(   t   gett   Nonet   clst   find_propertyR   t   botot   ec2t   regions(   t   selft   paramst   prop(    (    s1   lib/python2.7/site-packages/boto/manage/volume.pyt
   get_region%   s    c         C  sM   | j  d d  ƒ sI t d d d d d |  j j ƒ } t j  | ƒ | d <n  d  S(   Nt   zonet   namet   verbose_names   EC2 Availability ZoneR   (   R   R   R   R   t   get_all_zonesR   (   R   R   R   (    (    s1   lib/python2.7/site-packages/boto/manage/volume.pyt   get_zone*   s    c         C  s>   | j  d d  ƒ s: |  j j d ƒ } t j  | ƒ | d <n  d  S(   NR   (   R   R   R   R   R   (   R   R   R   (    (    s1   lib/python2.7/site-packages/boto/manage/volume.pyt   get_name0   s    c         C  sA   | j  d d  ƒ s= t d d d d ƒ } t j  | ƒ | d <n  d  S(   Nt   sizeR   R   s	   Size (GB)(   R   R   R   R   (   R   R   R   (    (    s1   lib/python2.7/site-packages/boto/manage/volume.pyt   get_size5   s    c         C  s>   | j  d d  ƒ s: |  j j d ƒ } t j  | ƒ | d <n  d  S(   Nt   mount_point(   R   R   R   R   R   (   R   R   R   (    (    s1   lib/python2.7/site-packages/boto/manage/volume.pyt   get_mount_point:   s    c         C  s>   | j  d d  ƒ s: |  j j d ƒ } t j  | ƒ | d <n  d  S(   Nt   device(   R   R   R   R   R   (   R   R   R   (    (    s1   lib/python2.7/site-packages/boto/manage/volume.pyt
   get_device?   s    c         C  sn   | |  _  |  j | ƒ | d j ƒ  |  _ |  j | ƒ |  j | ƒ |  j | ƒ |  j | ƒ |  j | ƒ d  S(   NR   (	   R   R   t   connectR   R   R   R    R"   R$   (   R   R   R   (    (    s1   lib/python2.7/site-packages/boto/manage/volume.pyR   D   s    	(	   t   __name__t
   __module__R   R   R   R    R"   R$   R   (    (    (    s1   lib/python2.7/site-packages/boto/manage/volume.pyR
   #   s   						t   Volumec           B  s  e  Z e d  e d e d d ƒ Z e d  e d d ƒ Z e d  e d d ƒ Z e d d ƒ Z e d d d d	 ƒ Z e d  e ƒ Z	 e
 d
 e ƒ Z e e d d d d ƒZ e d d d e d e ƒ Z e d d d e d e ƒ Z e d d d e d e ƒ Z e d „  ƒ Z e d „  ƒ Z d. d „ Z d. d „ Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z  d. d „ Z! e" d „ Z# d. d „ Z$ d  „  Z% d! „  Z& d" „  Z' d# „  Z( d$ „  Z) d% „  Z* d& „  Z+ d. d. d' „ Z, e" d( „ Z- d) „  Z. d* „  Z/ d+ „  Z0 e" d, „ Z1 d- „  Z2 RS(/   t   requiredt   uniqueR   t   Names
   EC2 Regions   EC2 Zones   Mount Points   Device Namet   defaults   /dev/sdpt	   item_typet   collection_namet   volumess   Server Attached Tos   Volume Statet   calculated_typet
   use_methods   Attachment States	   Size (GB)c   	      K  sá   t  ƒ  } | j |  | ƒ | j d ƒ } | j ƒ  } | j d ƒ } | j d ƒ } | j | | j ƒ } |  ƒ  } | | _ | j | _ | j d ƒ | _ | j d ƒ | _ | j d ƒ | _	 | j | _
 | j | _ | j ƒ  | S(   NR   R   R   R   R!   R#   (   R
   R   R%   t   create_volumeR   R   t   idt	   volume_idR!   R#   R   t	   zone_namet   put(	   R   R   t   getterR   R   R   R   t
   ebs_volumet   v(    (    s1   lib/python2.7/site-packages/boto/manage/volume.pyt   create`   s"    			
c         C  s   d  } t j j | ƒ } | j | g ƒ } t | ƒ d k rŒ | d } |  ƒ  } | j | _ | | _ | j	 j | _
 | j | _ | j ƒ  n  | S(   Ni   i    (   R   R   R   t   connect_to_regiont   get_all_volumest   lenR3   R4   R   R   R   R   R5   R6   (   R   R   R4   R   t   volR   t   rsR9   (    (    s1   lib/python2.7/site-packages/boto/manage/volume.pyt   create_from_volume_idt   s    
		c         C  s#   |  j  ƒ  d } |  j | | | ƒ S(   Niÿÿÿÿ(   t   get_snapshotst   create_from_snapshot(   R   R   R   t   snapshot(    (    s1   lib/python2.7/site-packages/boto/manage/volume.pyt   create_from_latest_snapshotƒ   s    c         C  sí   | |  j  k  r |  j  } n  |  j ƒ  } |  j d  k sE |  j d k rm | j |  j g ƒ d } | j |  _ n  | j | |  j | ƒ } t ƒ  } |  j	 | _	 | j
 | _ | | _ |  j | _ |  j | _ |  j | _ |  j | _ | j ƒ  | S(   Nt    i    (   R   t   get_ec2_connectionR5   R   R<   R4   R   R2   R(   R   R3   R   R!   R#   R   R6   (   R   R   RC   R   R   t   current_volumeR8   R9   (    (    s1   lib/python2.7/site-packages/boto/manage/volume.pyRB   ‡   s"    		
c         C  sT   |  j  r |  j  j St |  d ƒ s2 |  j d  k rM t j j |  j ƒ |  _ n  |  j S(   NR   (   t   serverR   t   hasattrR   R   R;   R   (   R   (    (    s1   lib/python2.7/site-packages/boto/manage/volume.pyRF   ›   s
    	
c         C  s/   |  j  ƒ  } | j |  j g ƒ } | d j ƒ  S(   Ni    (   RF   R<   R4   t   volume_state(   R   R   R?   (    (    s1   lib/python2.7/site-packages/boto/manage/volume.pyt   _volume_state¢   s    c         C  s/   |  j  ƒ  } | j |  j g ƒ } | d j ƒ  S(   Ni    (   RF   R<   R4   t   attachment_state(   R   R   R?   (    (    s1   lib/python2.7/site-packages/boto/manage/volume.pyt   _attachment_state§   s    c         C  sJ   t  |  d ƒ sC |  j ƒ  } | j |  j g ƒ } | d j |  _ n  |  j S(   Nt   __sizei    (   RI   RF   R<   R4   R   t   _Volume__size(   R   R   R?   (    (    s1   lib/python2.7/site-packages/boto/manage/volume.pyt   _size¬   s
    c         C  s    |  j  r |  j  j d ƒ n  d  S(   Ns   xfsprogs xfsdump(   RH   t   install(   R   (    (    s1   lib/python2.7/site-packages/boto/manage/volume.pyt   install_xfs³   s    	c         C  s«   |  j  ƒ  } | j ƒ  } |  j g |  j } g  } x` | D]X } | j | k r8 | j d k r t j j | j ƒ | _	 t
 | _ | j | ƒ q q8 q8 W| j d d „  ƒ | S(   sO   
        Returns a list of all completed snapshots for this volume ID.
        s   100%t   cmpc         S  s   t  |  j | j ƒ S(   N(   RS   t   date(   t   xt   y(    (    s1   lib/python2.7/site-packages/boto/manage/volume.pyt   <lambda>Å   s    (   RF   t   get_all_snapshotsR4   t   past_volume_idst   progressR   t   utilst   parse_tst
   start_timeRT   t   Truet   keept   appendt   sort(   R   R   R?   t   all_volst   snapsRC   (    (    s1   lib/python2.7/site-packages/boto/manage/volume.pyRA   ·   s    	c         C  sh   |  j  d k r t d ƒ d  S| r9 | |  _ |  j ƒ  n  |  j ƒ  } | j |  j |  j j |  j	 ƒ d  S(   Nt   attacheds   already attached(
   RL   t   printR   RH   R6   RF   t   attach_volumeR4   t   instance_idR#   (   R   RH   R   (    (    s1   lib/python2.7/site-packages/boto/manage/volume.pyt   attachÈ   s    
	c         C  s€   |  j  } | d k s- | d  k s- | d k r; t d ƒ d  S|  j ƒ  } | j |  j |  j j |  j | ƒ d  |  _ |  j	 ƒ  d  S(   Nt	   availablet	   detachings   already detached(
   RL   R   Re   RF   t   detach_volumeR4   RH   Rg   R#   R6   (   R   t   forcet   stateR   (    (    s1   lib/python2.7/site-packages/boto/manage/volume.pyt   detachÒ   s    	$
"	c         C  s€   |  j  d  k r t d ƒ ‚ n  | r- | } n |  j  j ƒ  } | j d |  j ƒ } | se | j ƒ  n  | d j d ƒ r| t St	 S(   Ns0   server attribute must be set to run this commands   xfs_check %si   s   bad superblock magic number 0(
   RH   R   t
   ValueErrort   get_cmdshellt   runR#   t   closet
   startswitht   FalseR^   (   R   t   use_cmdt   cmdt   status(    (    s1   lib/python2.7/site-packages/boto/manage/volume.pyt   checkfsÜ   s    	c         C  sŒ   |  j  d  k r t d ƒ ‚ n  t |  j  j ƒ  ƒ S } |  j  j ƒ  } x: | j |  j ƒ s t j j	 d |  j ƒ t
 j d ƒ qH WWd  QXd  S(   Ns0   server attribute must be set to run this commands+   %s still does not exist, waiting 10 secondsi
   (   RH   R   Ro   R	   Rp   t   existsR#   R   t   logt   infot   timet   sleep(   R   Rv   (    (    s1   lib/python2.7/site-packages/boto/manage/volume.pyt   waitë   s    c         C  s~   |  j  d  k r t d ƒ ‚ n  d  } t |  j  j ƒ  ƒ ? } |  j | ƒ st t j j d ƒ | j	 d |  j
 ƒ } n  Wd  QX| S(   Ns0   server attribute must be set to run this commands
   make_fs...s   mkfs -t xfs %s(   RH   R   Ro   R	   Rp   Rx   R   Rz   R{   Rq   R#   (   R   Rw   Rv   (    (    s1   lib/python2.7/site-packages/boto/manage/volume.pyt   formatõ   s    c      	   C  s  |  j  d  k r t d ƒ ‚ n  t j j d ƒ t |  j  j ƒ  ƒ 8} |  j  j ƒ  } | j |  j	 ƒ sŽ t j j d ƒ | j
 d |  j	 ƒ n¸ t j j d ƒ | j
 d ƒ } | d j d ƒ } xƒ | D]{ } | j ƒ  } | rÇ | d	 |  j	 k rÇ | d
 |  j k rB| j
 d |  j	 ƒ | j
 d | d
 ƒ | j
 d ƒ PqBqÇ qÇ W| j
 d |  j |  j	 f ƒ | j
 d |  j	 ƒ Wd  QXd  S(   Ns0   server attribute must be set to run this commandt   handle_mount_points   making directorys   mkdir %ss   directory exists alreadys   mount -li   s   
i   i    s	   umount %ss   mount %s /tmps   chmod 777 /tmps   mount %s %ss   xfs_growfs %s(   RH   R   Ro   R   Rz   R{   R	   Rp   t   isdirR!   Rq   t   splitR#   (   R   Rv   Rw   t   linest   linet   t(    (    s1   lib/python2.7/site-packages/boto/manage/volume.pyt   mountÿ   s*    c         C  sI   | |  _  |  j ƒ  |  j ƒ  |  j ƒ  |  j ƒ  |  j ƒ  |  j ƒ  d  S(   N(   RH   R6   RR   Rh   R~   R   R†   (   R   RH   (    (    s1   lib/python2.7/site-packages/boto/manage/volume.pyt
   make_ready  s    	




c         C  s$   |  j  r  |  j  j d |  j ƒ Sd  S(   Ns   /usr/sbin/xfs_freeze -f %s(   RH   Rq   R!   (   R   (    (    s1   lib/python2.7/site-packages/boto/manage/volume.pyt   freeze$  s    	c         C  s$   |  j  r  |  j  j d |  j ƒ Sd  S(   Ns   /usr/sbin/xfs_freeze -u %s(   RH   Rq   R!   (   R   (    (    s1   lib/python2.7/site-packages/boto/manage/volume.pyt   unfreeze(  s    	c         C  s¿   z« ym |  j  ƒ  |  j t k r: |  j ƒ  j |  j ƒ } n |  j j j |  j ƒ } t j j	 d |  j
 | f ƒ Wn7 t k
 r© t j j	 d ƒ t j j	 t j ƒ  ƒ n XWd  |  j ƒ  } | SX(   Ns!   Snapshot of Volume %s created: %ss   Snapshot error(   Rˆ   RH   R   RF   t   create_snapshotR4   R   R   Rz   R{   R   t	   Exceptiont	   tracebackt
   format_excR‰   (   R   RC   Rw   (    (    s1   lib/python2.7/site-packages/boto/manage/volume.pyRC   ,  s     
!c         C  sµ   g  } x¨ | D]  } | rP | rP | j  | k r­ | j  | k r­ | j | ƒ q­ q | rx | j  | k r­ | j | ƒ q­ q | r  | j  | k r­ | j | ƒ q­ q | j | ƒ q W| S(   N(   RT   R`   (   R   Rc   t
   start_datet   end_datet   lt   snap(    (    s1   lib/python2.7/site-packages/boto/manage/volume.pyt   get_snapshot_range=  s    c      	   C  s×  |  j  ƒ  } t | ƒ d k r" | S| d d !} t j j | d j j ƒ } t j d | j d | j d | j d | j ƒ } t j	 d	 d
 d d ƒ } t
 | | | ƒ |  j | | | | ƒ } t
 | ƒ | sÑ | Sd } x> | D]6 } | r| | j j k rt | _ qÞ | j j } qÞ W| re| d j }	 |	 j ƒ  d k ret j	 d	 |	 j ƒ  ƒ }
 |	 |
 }	 qen  |  j | |	 | d j ƒ } t | ƒ d k r´x | d D] } t | _ qžWn  xm t d d ƒ D]\ } |  j | |	 | |	 ƒ } t | ƒ d k rx | d D] } t | _ q Wn  |	 | }	 qÄW|  j | d |	 ƒ} d } x> | D]6 } | rp| | j j k rpt | _ qF| j j } qFW| rÓxJ | D]? } | j st j j d | | j |  j f ƒ | j ƒ  qqWn  | S(   s1  
        Trim the number of snapshots for this volume.  This method always
        keeps the oldest snapshot.  It then uses the parameters passed in
        to determine how many others should be kept.

        The algorithm is to keep all snapshots from the current day.  Then
        it will keep the first snapshot of the day for the previous seven days.
        Then, it will keep the first snapshot of the week for the previous
        four weeks.  After than, it will keep the first snapshot of the month
        for as many months as there are.

        i   i   iÿÿÿÿi    t   yeart   montht   dayt   tzinfot   daysi   t   secondsi<   i   R   s   Deleting %s(%s) for %si  N(   RA   R=   t   datetimet   nowRT   R–   R“   R”   R•   t	   timedeltaRe   R’   R   Rt   R_   t   weekdayt   rangeR   Rz   R{   R   t   delete(   R   Rž   Rc   Rš   t   midnightt   one_weekt   previous_weekt   current_dayR‘   t   week_boundaryt   deltat   partial_weekt   it   weeks_wortht	   remaindert   current_month(    (    s1   lib/python2.7/site-packages/boto/manage/volume.pyt   trim_snapshotsM  sZ    
	#c         C  s   d  S(   N(    (   R   R   (    (    s1   lib/python2.7/site-packages/boto/manage/volume.pyt   grow  s    c         C  s   d  S(   N(    (   R   RC   (    (    s1   lib/python2.7/site-packages/boto/manage/volume.pyt   copy“  s    c         C  s   d  S(   N(    (   R   RT   (    (    s1   lib/python2.7/site-packages/boto/manage/volume.pyt   get_snapshot_from_date–  s    c         C  sF   | r/ |  j  ƒ  |  j ƒ  } | j |  j ƒ n  t t |  ƒ j ƒ  d  S(   N(   Rn   RF   t   delete_volumeR4   t   superR(   Rž   (   R   t   delete_ebs_volumeR   (    (    s1   lib/python2.7/site-packages/boto/manage/volume.pyRž   ™  s
    
c         C  s   d  S(   N(    (   R   (    (    s1   lib/python2.7/site-packages/boto/manage/volume.pyt   archive   s    N(3   R&   R'   R   R^   R   R   R5   R!   R#   R4   R   t   strRY   R   R   RH   R   RJ   RL   t   intR   t   classmethodR:   R@   R   RD   RB   RF   RK   RM   RP   RR   RA   Rh   Rt   Rn   Rx   R~   R   R†   R‡   Rˆ   R‰   RC   R’   Rª   R«   R¬   R­   Rž   R±   (    (    (    s1   lib/python2.7/site-packages/boto/manage/volume.pyR(   N   sT   							

	
	
						C			(   t
   __future__R    t   boto.sdb.db.modelR   t   boto.sdb.db.propertyR   R   R   R   R   t   boto.manage.serverR   t   boto.manageR   t
   boto.utilsR   t   boto.ec2R|   RŒ   t
   contextlibR	   R™   t   objectR
   R(   (    (    (    s1   lib/python2.7/site-packages/boto/manage/volume.pyt   <module>   s   (+