ó oBú]c@s§ddlmZddlZddlZddlmZddlmZmZmZddl m Z m Z m Z m Z ddlmZddlmZddlmZejeƒZd efd „ƒYZd efd „ƒYZd efd„ƒYZdefd„ƒYZd„Zdefd„ƒYZdefd„ƒYZdefd„ƒYZdefd„ƒYZ defd„ƒYZ!defd„ƒYZ"d„Z#dS(iÿÿÿÿ(ttimeN(tStringIO(tNoSectionErrort NoOptionErrortRawConfigParser(t PER_INSTANCEt PER_ALWAYStPER_ONCEt CFG_ENV_NAME(tlog(t type_utils(tutilt LockFailurecBseZRS((t__name__t __module__(((s5/usr/lib/python2.7/site-packages/cloudinit/helpers.pyR st DummyLockcBseZRS((R R(((s5/usr/lib/python2.7/site-packages/cloudinit/helpers.pyR"stDummySemaphorescBsAeZd„Zejed„ƒZd„Zd„Zd„Z RS(cCsdS(N((tself((s5/usr/lib/python2.7/site-packages/cloudinit/helpers.pyt__init__'sccs tƒVdS(N(R(Rt_namet_freqt_clear_on_fail((s5/usr/lib/python2.7/site-packages/cloudinit/helpers.pytlock*scCstS(N(tFalse(RRR((s5/usr/lib/python2.7/site-packages/cloudinit/helpers.pythas_run.scCstS(N(tTrue(RRR((s5/usr/lib/python2.7/site-packages/cloudinit/helpers.pytclear1scCsdS(N((R((s5/usr/lib/python2.7/site-packages/cloudinit/helpers.pyt clear_all4s( R RRt contextlibtcontextmanagerRRRRR(((s5/usr/lib/python2.7/site-packages/cloudinit/helpers.pyR&s    tFileLockcBseZd„Zd„ZRS(cCs ||_dS(N(tfn(RR((s5/usr/lib/python2.7/site-packages/cloudinit/helpers.pyR9scCsdtj|ƒ|jfS(Ns<%s using file %r>(R tobj_nameR(R((s5/usr/lib/python2.7/site-packages/cloudinit/helpers.pyt__str__<s(R RRR!(((s5/usr/lib/python2.7/site-packages/cloudinit/helpers.pyR8s cCs|jddƒS(Nt-t_(treplace(tname((s5/usr/lib/python2.7/site-packages/cloudinit/helpers.pytcanon_sem_name@stFileSemaphorescBsSeZd„Zejed„ƒZd„Zd„Zd„Z d„Z d„Z RS(cCs ||_dS(N(tsem_path(RR(((s5/usr/lib/python2.7/site-packages/cloudinit/helpers.pyREsccsUt|ƒ}y|j||ƒVWn-tk rP|rJ|j||ƒn‚nXdS(N(R&t_acquiret ExceptionR(RR%tfreqt clear_on_fail((s5/usr/lib/python2.7/site-packages/cloudinit/helpers.pyRHs  cCsat|ƒ}|j||ƒ}ytj|ƒWn+ttfk r\tjtd|ƒtSXt S(NsFailed deleting semaphore %s( R&t _get_pathR tdel_filetIOErrortOSErrortlogexctLOGRR(RR%R+tsem_file((s5/usr/lib/python2.7/site-packages/cloudinit/helpers.pyRRs cCsHytj|jƒWn-ttfk rCtjtd|jƒnXdS(Ns&Failed deleting semaphore directory %s(R tdel_dirR(R/R0R1R2(R((s5/usr/lib/python2.7/site-packages/cloudinit/helpers.pyR\s  cCs|j||ƒrdS|j||ƒ}dtjƒtƒf}ytj||ƒWn+tt fk r‚tj t d|ƒdSXt |ƒS(Ns%s: %s s Failed writing semaphore file %s( RtNoneR-tostgetpidRR t write_fileR/R0R1R2R(RR%R+R3tcontents((s5/usr/lib/python2.7/site-packages/cloudinit/helpers.pyR)cscCs| s|tkrtSt|ƒ}|j||ƒ}tjj|ƒrKtS||krŒtjj|j||ƒƒrŒtj d||ƒtStS(Nsœ%s has run without canonicalized name [%s]. likely the migrator has not yet run. It will run next boot. run manually with: cloud-init single --name=migrator( RRR&R-R6tpathtexistsRR2twarning(RR%R+tcnameR3((s5/usr/lib/python2.7/site-packages/cloudinit/helpers.pyRss *  cCsP|j}| s|tkr/tjj||ƒStjj|d||fƒSdS(Ns%s.%s(R(RR6R:tjoin(RR%R+R(((s5/usr/lib/python2.7/site-packages/cloudinit/helpers.pyR-Šs ( R RRRRRRRRR)RR-(((s5/usr/lib/python2.7/site-packages/cloudinit/helpers.pyR'Ds    tRunnerscBs)eZd„Zd„Zded„ZRS(cCs||_i|_dS(N(tpathstsems(RR@((s5/usr/lib/python2.7/site-packages/cloudinit/helpers.pyR“s cCs™|tks| rdSd}|tkr>|jjdƒ}n!|tkr_|jjdƒ}n|sidS||jkrŽt|ƒ|j|t instance_linkt boot_finishedtupstart_conf_dtseed_dirt template_tpltlookupsRU(Rt path_cfgstdst template_dir((s5/usr/lib/python2.7/site-packages/cloudinit/helpers.pyR?s6  cCs|j|j|ƒS(N(R-R(RR%((s5/usr/lib/python2.7/site-packages/cloudinit/helpers.pyReascCs|j|j|ƒS(N(R-R‰(RR%((s5/usr/lib/python2.7/site-packages/cloudinit/helpers.pyRDfscCs–|js dS|jjƒ}|dkr,dSt|ƒjtjdƒ}tjj|j d|ƒ}|j j |ƒ}|r’tjj||ƒ}n|S(NR#t instances( RUR5tget_instance_idtstrR$R6tsepR:R>R‰R¢Rœ(RR%tiidt path_safe_iidtipathtadd_on((s5/usr/lib/python2.7/site-packages/cloudinit/helpers.pyt _get_ipathks  cCs.|j|ƒ}|s&tjdƒdS|SdS(Ns?No per instance data available, is there an datasource/iid set?(R®R2R<R5(RR%R¬((s5/usr/lib/python2.7/site-packages/cloudinit/helpers.pyRC{s  cCs*|dkr|Stjj||j|ƒS(N(R5R6R:R>R¢(RtbaseR%((s5/usr/lib/python2.7/site-packages/cloudinit/helpers.pyR-„s cCs|j|j|ƒS(N(R-RŠ(RR%((s5/usr/lib/python2.7/site-packages/cloudinit/helpers.pyt get_runpath‰sN( R RR5RReRDR®RCR-R°(((s5/usr/lib/python2.7/site-packages/cloudinit/helpers.pyRˆ>s "    tDefaultingConfigParsercBseeZdZdZeZd Zd„Zd d„Z d„Z d„Z d„Z d„Z d d„ZRS( igcCsJ|j}ytj|||ƒ}Wn!tk r5ntk rEnX|S(N(tDEF_BASERRœRR(Rtsectiontoptiontvalue((s5/usr/lib/python2.7/site-packages/cloudinit/helpers.pyRœœs   cCsL|j|ƒ r2|jƒdkr2|j|ƒntj||||ƒdS(Ntdefault(t has_sectiontlowert add_sectionRR~(RR³R´Rµ((s5/usr/lib/python2.7/site-packages/cloudinit/helpers.pyR~¦s"cCs,|j||ƒr(tj|||ƒndS(N(t has_optionRt remove_option(RR³R´((s5/usr/lib/python2.7/site-packages/cloudinit/helpers.pyR»«scCs,|j||ƒs|jStj|||ƒS(N(Rºt DEF_BOOLEANRt getboolean(RR³R´((s5/usr/lib/python2.7/site-packages/cloudinit/helpers.pyR½¯scCs,|j||ƒs|jStj|||ƒS(N(Rºt DEF_FLOATRtgetfloat(RR³R´((s5/usr/lib/python2.7/site-packages/cloudinit/helpers.pyR¿´scCs,|j||ƒs|jStj|||ƒS(N(RºtDEF_INTRtgetint(RR³R´((s5/usr/lib/python2.7/site-packages/cloudinit/helpers.pyRÁ¹scCsWd}tƒ}|j|ƒ|jƒ|jƒ}|rSdj||dgƒ}n|S(Nts (RtwritetflushtgetvalueR>(RtheaderR9t outputstream((s5/usr/lib/python2.7/site-packages/cloudinit/helpers.pyt stringify¾s    N(R RRÀR¾RR¼R5R²RœR~R»R½R¿RÁRÈ(((s5/usr/lib/python2.7/site-packages/cloudinit/helpers.pyR±–s     cCs|S(N((tobject((s5/usr/lib/python2.7/site-packages/cloudinit/helpers.pytidentityÉs($RRR6tsixRtsix.moves.configparserRRRtcloudinit.settingsRRRRt cloudinitR tloggingR R t getLoggerR R2R*R RÉRRRR&R'R?RNRtRˆR±RÊ(((s5/usr/lib/python2.7/site-packages/cloudinit/helpers.pyt s*  " N-[$X3