v_c@sddlZddlZddlZddlmZddlZddlmZyrddlZejZ e j dZ e j ddZ e e e e j dZ e dkrdZnWndZdZ nXedk r dd lmZd efd YZndZd Zd ZdZdZdZddZdZdZdZdZdefdYZdS(iN(tdatetime(t_it(t.iic(t LibLVMErrort _ResultErrorcBseZdZRS(s>Exception raised for LVM calls resulting in bad return values.(t__name__t __module__t__doc__(((s3/usr/lib/python2.7/site-packages/yum/fssnapshots.pyRscCs,|j}|dsdS|dddkS(NitotO(R R (tgetAttrtNone(tlvtsnap((s3/usr/lib/python2.7/site-packages/yum/fssnapshots.pyt _is_origin%s  cCs,|j}|dsdS|dddkS(NitstS(RR(R R (R R((s3/usr/lib/python2.7/site-packages/yum/fssnapshots.pyt_is_snap,s  cCs,|j}|dsdS|dddkS(Nitv(R R (R R((s3/usr/lib/python2.7/site-packages/yum/fssnapshots.pyt_is_virt3s  cCs y|j|SWndSXdS(N(t lvFromNameR (tvgtlvname((s3/usr/lib/python2.7/site-packages/yum/fssnapshots.pyt _vg_name2lv:scCs ytj}Wntk r)g}nX|stjddddgdtjdtj}|j}|rttdn|j d}|j d }|sgS|dj }|d krgSg}x2|d D]#}|sPn|j |j qWn|S( Ns /sbin/lvmtvgss-otvg_nametstdouttstderrs#Failed to obtain volume group namesis tVGi( tlvmt listVgNamesRt subprocesstPopentPIPEtwaitRRt communicatetsplittstriptappend(tnamestpterrtoutputtheadertname((s3/usr/lib/python2.7/site-packages/yum/fssnapshots.pyt_list_vg_names@s.    cCst|dkrt|dd!d}|t|dd!7}|d9}|ddkrg||8}n|ddkr||7}qn|S(Niiii<it+t-(tlentint(tztctimetoff((s3/usr/lib/python2.7/site-packages/yum/fssnapshots.pyt_z_off]s  cCsy|j\}}}tj|d|d}tj|}trtjd}||krt|}t|}|||7}qnWn d}nX|S(Nt s%Y-%m-%d %H:%M:%Ss%zi(R%ttimetstrptimetmktimetFalsetstrftimeR6(R4tdttR3tcur_z((s3/usr/lib/python2.7/site-packages/yum/fssnapshots.pyt _lv_ctime2utchs    c Cs|j}|j}|j}|jdd}|j}t|jdd}|jdd}t|}|d}id||fd6|d 6|d6d||fd 6|jd 6|d 6|d 6|d6} | S(Ntoriginitlv_timet snap_percentiis%s/%stdevR4t origin_devtfreettagstsizetusedii@B(tgetNametgetSizet getPropertytgetTagsR@tfloatt getFreeSize( RR tvgnameRRHRARGR4RItdata((s3/usr/lib/python2.7/site-packages/yum/fssnapshots.pyt_lv_data{s$        csfd}|S(s7Decorator for _FSSnap methods that logs LVM tracebacks.csSy|||SWn8tk rN}|jdk rH|jj|nnXdS(N(Rt_loggerR t exception(tselftargstkwargste(tfunc(s3/usr/lib/python2.7/site-packages/yum/fssnapshots.pytwraps ((RYRZ((RYs3/usr/lib/python2.7/site-packages/yum/fssnapshots.pyt_log_tracebackscCs@t|tkr2t|jdkr2|jdSt|SdS(s;Convert a LibLVMError instance to a readable error message.iiN(ttypeRR1RVtstr(texc((s3/usr/lib/python2.7/site-packages/yum/fssnapshots.pyt lvmerr2strs' t_FSSnapcBseZded d dZedZd dZeddZ eddd id Z ed Z egd Z RS(t/s!*/swaps !*/lv_swapcCst stjrg}nt|_tto=tjjd|_d|_ d|_ ||_ ||_ d|_||_|j sdSdS(Ns /sbin/lvmt_yum_(Rtostgeteuidt_vertversiontbooltpathtexistst availabletpostfix_staticR t_postfixt_roott_devst _vgname_listRS(RUtroott lookup_mountstdevicestlogger((s3/usr/lib/python2.7/site-packages/yum/fssnapshots.pyt__init__s  !       cCs4|jdkr-|jr!tng|_n|jS(N(RoR RjR.(RU((s3/usr/lib/python2.7/site-packages/yum/fssnapshots.pyt_vgnamessc Cs|dk r+t|s$t|r+tSnt}x|jD]}d|krSq;nt}|ddkrt}t}|d}n|jdd\}}d|krq;ntj||sq;n|dkr| S|dkrdS|j}tj||s q;n| SW|S(NRait!it*( R RRR;RntTrueR%tfnmatchRJ( RURPR t found_negRDtnegtvgntlvnR((s3/usr/lib/python2.7/site-packages/yum/fssnapshots.pyt_use_devs4       idc Cst}x|jD]}|j|}|dk r>| r>qntj|d}|sottd|n|j}d}x<|j D].}|j||sqn||j 7}qW|j |sqnt }||d|krtSqW|S(s0 See if we have enough space to try a snapshot. trs(Unknown error when opening volume group iidN( R;RuR~R RtvgOpenRRROtlistLVsRKtcloseRx( RUt percentagetretRPtuseRtvgfsizetlvssizeR ((s3/usr/lib/python2.7/site-packages/yum/fssnapshots.pyt has_spaces,  tcCs|d kr1d|jtjjdf}ng}x|jD]}|j|}|d k ro| roqAntj|d}|st t d|nxZ|j D]L} | j } |j|| sqnd|| |f} | j | | j|d} | s3|jt t d| nd|| f} d|| f}t}x|| d fD]v}xm|j|gD]Y}d |kr|jd d \}}||krqn|j|n| j|qWqlW|j| |fqW|jqAW|S( sc Attempt to take a snapshot, note that errors can happen after this function succeeds. s%s%ss%Y%m%d%H%M%S.%ftws(Unknown error when opening volume group s%s%s%sids%Unknown error when creating snapshot s%s/%sRwt=iN(R RkRtnowR<RuR~RRRRRRJtsnapshotRKRtsettgetR%taddtaddTagR'(RURtprefixtpostfixRGRRPRRR Rtnlvnametnlvtodevtndevteq_tagstvalttagt eq_tag_keyt eq_tag_val((s3/usr/lib/python2.7/site-packages/yum/fssnapshots.pyRsF %      cCsg}x|jD]}tj|d}|sGttd|nx<|jD].}t|slqTn|jt||qTW|j qW|S(s List data for old snapshots. Rs(Unknown error when opening volume group ( RuRRRRRRR'RRR(RURRPRR ((s3/usr/lib/python2.7/site-packages/yum/fssnapshots.pyt old_snapshotsFs c Cs!ts gSg}i}xV|D]N}|jd\}}||krZt|g||s>