ó FRTc@säddlmZddlmZddlmZmZmZmZm Z ddl m Z ddl m Z ddlZddlZddlZddlZddlmZddlZdefd „ƒYZd efd „ƒYZdS( iÿÿÿÿ(tprint_function(tModel(tStringPropertytIntegerPropertyt ListPropertytReferencePropertytCalculatedProperty(tServer(tpropgetN(tclosingtCommandLineGettercBsGeZd„Zd„Zd„Zd„Zd„Zd„Zd„ZRS(cCsJ|jddƒsF|jjdƒ}tj|dtjjƒ|d|jddƒs:|jjdƒ}tj|ƒ|d|jddƒs:|jjdƒ}tj|ƒ|d|jddƒs:|jjdƒ}tj|ƒ|dÅs(RFtget_all_snapshotsR4tpast_volume_idstprogressRtutilstparse_tst start_timeRTtTruetkeeptappendtsort(RRR?tall_volstsnapsRC((s?/opt/freeware/lib/python2.7/site-packages/boto/manage/volume.pyRA·s    cCsh|jdkrtdƒdS|r9||_|jƒn|jƒ}|j|j|jj|j ƒdS(Ntattachedsalready attached( RLtprintRRHR6RFt attach_volumeR4t instance_idR#(RRHR((s?/opt/freeware/lib/python2.7/site-packages/boto/manage/volume.pytattachÈs    cCs€|j}|dks-|dks-|dkr;tdƒdS|jƒ}|j|j|jj|j|ƒd|_|j ƒdS(Nt availablet detachingsalready detached( RLRReRFt detach_volumeR4RHRgR#R6(RtforcetstateR((s?/opt/freeware/lib/python2.7/site-packages/boto/manage/volume.pytdetachÒs $  " cCs€|jdkrtdƒ‚n|r-|}n|jjƒ}|jd|jƒ}|se|jƒn|djdƒr|tSt S(Ns0server attribute must be set to run this commands xfs_check %sisbad superblock magic number 0( RHRt ValueErrort get_cmdshelltrunR#tcloset startswithtFalseR^(Rtuse_cmdtcmdtstatus((s?/opt/freeware/lib/python2.7/site-packages/boto/manage/volume.pytcheckfsÜs  cCsŒ|jdkrtdƒ‚nt|jjƒƒS}|jjƒ}x:|j|jƒstjj d|jƒt j dƒqHWWdQXdS(Ns0server attribute must be set to run this commands+%s still does not exist, waiting 10 secondsi ( RHRRoR RptexistsR#Rtlogtinfottimetsleep(RRv((s?/opt/freeware/lib/python2.7/site-packages/boto/manage/volume.pytwaitëscCs~|jdkrtdƒ‚nd}t|jjƒƒ?}|j|ƒsttjjdƒ|j d|j ƒ}nWdQX|S(Ns0server attribute must be set to run this commands make_fs...smkfs -t xfs %s( RHRRoR RpRxRRzR{RqR#(RRwRv((s?/opt/freeware/lib/python2.7/site-packages/boto/manage/volume.pytformatõsc Cs|jdkrtdƒ‚ntjjdƒt|jjƒƒ8}|jjƒ}|j|j ƒsŽtjjdƒ|j d|j ƒn¸tjjdƒ|j dƒ}|dj dƒ}xƒ|D]{}|j ƒ}|rÇ|d |j krÇ|d |j krB|j d |j ƒ|j d |d ƒ|j d ƒPqBqÇqÇW|j d|j |j fƒ|j d|j ƒWdQXdS(Ns0server attribute must be set to run this commandthandle_mount_pointsmaking directorysmkdir %ssdirectory exists alreadysmount -lis iis umount %ss mount %s /tmpschmod 777 /tmps mount %s %ss xfs_growfs %s( RHRRoRRzR{R RptisdirR!RqtsplitR#(RRvRwtlinestlinett((s?/opt/freeware/lib/python2.7/site-packages/boto/manage/volume.pytmountÿs*    cCsI||_|jƒ|jƒ|jƒ|jƒ|jƒ|jƒdS(N(RHR6RRRhR~RR†(RRH((s?/opt/freeware/lib/python2.7/site-packages/boto/manage/volume.pyt make_readys      cCs$|jr |jjd|jƒSdS(Ns/usr/sbin/xfs_freeze -f %s(RHRqR!(R((s?/opt/freeware/lib/python2.7/site-packages/boto/manage/volume.pytfreeze$s cCs$|jr |jjd|jƒSdS(Ns/usr/sbin/xfs_freeze -u %s(RHRqR!(R((s?/opt/freeware/lib/python2.7/site-packages/boto/manage/volume.pytunfreeze(s cCs¿z«ym|jƒ|jtkr:|jƒj|jƒ}n|jjj|jƒ}tjj d|j |fƒWn7t k r©tjj dƒtjj t j ƒƒnXWd|jƒ}|SX(Ns!Snapshot of Volume %s created: %ssSnapshot error(RˆRHRRFtcreate_snapshotR4RRRzR{Rt Exceptiont tracebackt format_excR‰(RRCRw((s?/opt/freeware/lib/python2.7/site-packages/boto/manage/volume.pyRC,s !  cCsµg}x¨|D] }|rP|rP|j|kr­|j|kr­|j|ƒq­q |rx|j|kr­|j|ƒq­q |r |j|kr­|j|ƒq­q |j|ƒq W|S(N(RTR`(RRct start_datetend_datetltsnap((s?/opt/freeware/lib/python2.7/site-packages/boto/manage/volume.pytget_snapshot_range=s  c Cs×|jƒ}t|ƒdkr"|S|dd!}tjj|djjƒ}tjd|jd|jd|jd|jƒ}tj d d d dƒ}t |||ƒ|j ||||ƒ}t |ƒ|sÑ|Sd}x>|D]6}|r||jjkrt |_qÞ|jj}qÞW|re|dj} | jƒdkretj d | jƒƒ} | | } qen|j || |djƒ} t| ƒdkr´x| dD]}t |_qžWnxmtdd ƒD]\} |j || || ƒ} t| ƒdkrx| dD]}t |_qWn| |} qÄW|j |d| ƒ}d}x>|D]6}|rp||jjkrpt |_qF|jj}qFW|rÓxJ|D]?}|jstjjd||j|jfƒ|jƒqqWn|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. iiiÿÿÿÿityeartmonthtdayttzinfotdaysitsecondsi<iRsDeleting %s(%s) for %siN(RAR=tdatetimetnowRTR–R“R”R•t timedeltaReR’RRtR_tweekdaytrangeRRzR{Rtdelete(RRžRcRštmidnighttone_weekt previous_weekt current_dayR‘t week_boundarytdeltat partial_weektit weeks_wortht remaindert current_month((s?/opt/freeware/lib/python2.7/site-packages/boto/manage/volume.pyttrim_snapshotsMsZ          #cCsdS(N((RR((s?/opt/freeware/lib/python2.7/site-packages/boto/manage/volume.pytgrowscCsdS(N((RRC((s?/opt/freeware/lib/python2.7/site-packages/boto/manage/volume.pytcopy“scCsdS(N((RRT((s?/opt/freeware/lib/python2.7/site-packages/boto/manage/volume.pytget_snapshot_from_date–scCsF|r/|jƒ|jƒ}|j|jƒntt|ƒjƒdS(N(RnRFt delete_volumeR4tsuperR(Rž(Rtdelete_ebs_volumeR((s?/opt/freeware/lib/python2.7/site-packages/boto/manage/volume.pyRž™s   cCsdS(N((R((s?/opt/freeware/lib/python2.7/site-packages/boto/manage/volume.pytarchive sN(3R&R'RR^RR R5R!R#R4RtstrRYRRRHRRJRLtintRt classmethodR:R@RRDRBRFRKRMRPRRRARhRtRnRxR~RR†R‡RˆR‰RCR’RªR«R¬R­RžR±(((s?/opt/freeware/lib/python2.7/site-packages/boto/manage/volume.pyR(NsT                  C    (t __future__Rtboto.sdb.db.modelRtboto.sdb.db.propertyRRRRRtboto.manage.serverRt boto.manageRt boto.utilsRtboto.ec2R|RŒt contextlibR R™tobjectR R((((s?/opt/freeware/lib/python2.7/site-packages/boto/manage/volume.pyts(     +