ó 'KXc@sšddlmZddlZddlZddlZddlmZmZmZddlm Z m Z m Z m Z ddl mZddl mZddl mZejeƒZdefd „ƒYZd efd „ƒYZd efd „ƒYZdefd„ƒYZd„Zdefd„ƒYZdefd„ƒYZdefd„ƒYZdefd„ƒYZdefd„ƒYZ defd„ƒYZ!dS(iÿÿÿÿ(ttimeN(tNoSectionErrort NoOptionErrortRawConfigParser(t PER_INSTANCEt PER_ALWAYStPER_ONCEt CFG_ENV_NAME(tlog(t type_utils(tutilt LockFailurecBseZRS((t__name__t __module__(((s>/opt/freeware/lib/python2.7/site-packages/cloudinit/helpers.pyR )st DummyLockcBseZRS((R R (((s>/opt/freeware/lib/python2.7/site-packages/cloudinit/helpers.pyR-stDummySemaphorescBsAeZd„Zejed„ƒZd„Zd„Zd„Z RS(cCsdS(N((tself((s>/opt/freeware/lib/python2.7/site-packages/cloudinit/helpers.pyt__init__2sccs tƒVdS(N(R(Rt_namet_freqt_clear_on_fail((s>/opt/freeware/lib/python2.7/site-packages/cloudinit/helpers.pytlock5scCstS(N(tFalse(RRR((s>/opt/freeware/lib/python2.7/site-packages/cloudinit/helpers.pythas_run9scCstS(N(tTrue(RRR((s>/opt/freeware/lib/python2.7/site-packages/cloudinit/helpers.pytclear<scCsdS(N((R((s>/opt/freeware/lib/python2.7/site-packages/cloudinit/helpers.pyt clear_all?s( R R Rt contextlibtcontextmanagerRRRRR(((s>/opt/freeware/lib/python2.7/site-packages/cloudinit/helpers.pyR1s    tFileLockcBseZd„Zd„ZRS(cCs ||_dS(N(tfn(RR((s>/opt/freeware/lib/python2.7/site-packages/cloudinit/helpers.pyRDscCsdtj|ƒ|jfS(Ns<%s using file %r>(R tobj_nameR(R((s>/opt/freeware/lib/python2.7/site-packages/cloudinit/helpers.pyt__str__Gs(R R RR (((s>/opt/freeware/lib/python2.7/site-packages/cloudinit/helpers.pyRCs cCs|jddƒS(Nt-t_(treplace(tname((s>/opt/freeware/lib/python2.7/site-packages/cloudinit/helpers.pytcanon_sem_nameKstFileSemaphorescBsSeZd„Zejed„ƒZd„Zd„Zd„Z d„Z d„Z RS(cCs ||_dS(N(tsem_path(RR'((s>/opt/freeware/lib/python2.7/site-packages/cloudinit/helpers.pyRPsccsKt|ƒ}y|j||ƒVWn#|r@|j||ƒn‚nXdS(N(R%t_acquireR(RR$tfreqt clear_on_fail((s>/opt/freeware/lib/python2.7/site-packages/cloudinit/helpers.pyRSs cCsat|ƒ}|j||ƒ}ytj|ƒWn+ttfk r\tjtd|ƒtSXt S(NsFailed deleting semaphore %s( R%t _get_pathR tdel_filetIOErrortOSErrortlogexctLOGRR(RR$R)tsem_file((s>/opt/freeware/lib/python2.7/site-packages/cloudinit/helpers.pyR]s cCsHytj|jƒWn-ttfk rCtjtd|jƒnXdS(Ns&Failed deleting semaphore directory %s(R tdel_dirR'R-R.R/R0(R((s>/opt/freeware/lib/python2.7/site-packages/cloudinit/helpers.pyRgs  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-R.R/R0R(RR$R)R1tcontents((s>/opt/freeware/lib/python2.7/site-packages/cloudinit/helpers.pyR(nscCs”| s|tkrtSt|ƒ}|j||ƒ}tjj|ƒrKtS||krtjj|j||ƒƒrtj d||fƒ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+R4tpathtexistsRR0twarn(RR$R)tcnameR1((s>/opt/freeware/lib/python2.7/site-packages/cloudinit/helpers.pyR~s * cCsP|j}| s|tkr/tjj||ƒStjj|d||fƒSdS(Ns%s.%s(R'RR4R8tjoin(RR$R)R'((s>/opt/freeware/lib/python2.7/site-packages/cloudinit/helpers.pyR+”s ( R R RRRRRRRR(RR+(((s>/opt/freeware/lib/python2.7/site-packages/cloudinit/helpers.pyR&Os    tRunnerscBs)eZd„Zd„Zded„ZRS(cCs||_i|_dS(N(tpathstsems(RR>((s>/opt/freeware/lib/python2.7/site-packages/cloudinit/helpers.pyRs cCs™|tks| rdSd}|tkr>|jjdƒ}n!|tkr_|jjdƒ}n|sidS||jkrŽt|ƒ|j|t get_ipathRt get_cpathR?R&(RR)R'((s>/opt/freeware/lib/python2.7/site-packages/cloudinit/helpers.pyt_get_sem¡s  c Csá|j|ƒ}|s!tƒ}n|s0g}n|j||ƒr_tjd||ƒtdfS|j|||ƒg}|std|ƒ‚nGtjd||ƒt |t ƒrÁ||}n ||Œ}t |fSWdQXdS(Ns%s already ran (freq=%s)sFailed to acquire lock for %ssRunning %s using lock (%s)( RCRRR0tdebugRR3RR t isinstancetdictR( RR$tfunctortargsR)R*R@tlktresults((s>/opt/freeware/lib/python2.7/site-packages/cloudinit/helpers.pytrun´s     N(R R RRCR3RRK(((s>/opt/freeware/lib/python2.7/site-packages/cloudinit/helpers.pyR=œs  t ConfigMergercBsSeZdddded„Zd„Zd„Zd„Zd„Ze d„ƒZ RS(cCs:||_||_||_||_||_d|_dS(N(t_pathst_dst_fnst _base_cfgt_include_vendorR3t_cfg(RR>t datasourcetadditional_fnstbase_cfgtinclude_vendor((s>/opt/freeware/lib/python2.7/site-packages/cloudinit/helpers.pyRÊs      cCsng}|jrjy8|jjƒ}|rFt|tƒrF|j|ƒnWqjtjtd|jƒqjXn|S(Ns2Failed loading of datasource config object from %s(RNtget_config_objRERFtappendR R/R0(Rtd_cfgstds_cfg((s>/opt/freeware/lib/python2.7/site-packages/cloudinit/helpers.pyt_get_datasource_configsÕs  cCs`g}ttjkr\tjt}y|jtj|ƒƒWq\tjtd|ƒq\Xn|S(Ns%Failed loading of env. config from %s(RR4tenvironRXR t read_confR/R0(Rte_cfgste_fn((s>/opt/freeware/lib/python2.7/site-packages/cloudinit/helpers.pyt_get_env_configsás  cCs®g}|js|Sdg}|jr5|jdƒnxr|D]j}|jj|ƒ}|r<tjj|ƒr<y|jtj|ƒƒWq¦tj t d|ƒq¦Xq<q<W|S(Nt cloud_configtvendor_cloud_configs&Failed loading of cloud-config from %s( RMRQRXt get_ipath_curR4R8tisfileR R]R/R0(Rti_cfgstcc_pathstcc_ptcc_fn((s>/opt/freeware/lib/python2.7/site-packages/cloudinit/helpers.pyt_get_instance_configsìs     cCs¿g}|jr]xK|jD]=}y|jtj|ƒƒWqtjtd|ƒqXqWn|j|jƒƒ|j|jƒƒ|j|j ƒƒ|j r²|j|j ƒntj |ƒS(Ns'Failed loading of configuration from %s( RORXR R]R/R0textendR`RiR[RPt mergemanydict(Rtcfgstc_fn((s>/opt/freeware/lib/python2.7/site-packages/cloudinit/helpers.pyt _read_cfgs   cCs(|jdkr!|jƒ|_n|jS(N(RRR3Rn(R((s>/opt/freeware/lib/python2.7/site-packages/cloudinit/helpers.pytcfgsN( R R R3RRR[R`RiRntpropertyRo(((s>/opt/freeware/lib/python2.7/site-packages/cloudinit/helpers.pyRLÉs  tContentHandlerscBsVeZd„Zd„Zd„Zd„Zeed„Zd„Z d„Z d„Z RS(cCsi|_g|_dS(N(t registeredt initialized(R((s>/opt/freeware/lib/python2.7/site-packages/cloudinit/helpers.pyR"s cCs |j|ƒS(N(t is_registered(Rtitem((s>/opt/freeware/lib/python2.7/site-packages/cloudinit/helpers.pyt __contains__&scCs |j|ƒS(N(t _get_handler(Rtkey((s>/opt/freeware/lib/python2.7/site-packages/cloudinit/helpers.pyt __getitem__)scCs ||jkS(N(Rr(Rt content_type((s>/opt/freeware/lib/python2.7/site-packages/cloudinit/helpers.pyRt,scCsŸtƒ}xI|jƒD];}|r2|j|ƒq|j|ƒs|j|ƒqqWx|D]}||j|/opt/freeware/lib/python2.7/site-packages/cloudinit/helpers.pytregister/s  cCs |j|S(N(Rr(RRz((s>/opt/freeware/lib/python2.7/site-packages/cloudinit/helpers.pyRw=scCs |jjƒS(N(Rrtitems(R((s>/opt/freeware/lib/python2.7/site-packages/cloudinit/helpers.pyRƒ@scCs |jjƒS(N(Rrt iteritems(R((s>/opt/freeware/lib/python2.7/site-packages/cloudinit/helpers.pyR„Cs( R R RRvRyRtRRR‚RwRƒR„(((s>/opt/freeware/lib/python2.7/site-packages/cloudinit/helpers.pyRq s      tPathscBsDeZdd„Zdd„Zdd„Zdd„Zdd„ZRS(cCs||_|jddƒ|_tjj|jdƒ|_tjj|jdƒ|_|jdƒ|_tjj|jdƒ|_ |jddƒ}tjj|d ƒ|_ i d d 6d d 6d d 6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6|_ ||_ dS(Nt cloud_dirs/opt/freeware/var/lib/cloudtinstances boot-finishedt upstart_dirtseedt templates_dirs"/opt/freeware/etc/cloud/templates/s%s.tmplthandlerstscriptssscripts/vendortvendor_scriptsR@t boothookss user-data.txtt userdata_rawsuser-data.txt.ituserdatasobj.pkltobj_pklscloud-config.txtRasvendor-cloud-config.txtRbtdatasvendor-data.txttvendordata_rawsvendor-data.txt.it vendordata( RltgetR†R4R8R<t instance_linkt boot_finishedtupstart_conf_dtseed_dirt template_tpltlookupsRS(Rt path_cfgstdst template_dir((s>/opt/freeware/lib/python2.7/site-packages/cloudinit/helpers.pyRHs.  cCs=|j}|jj|ƒ}|r9tjj||ƒ}n|S(N(R–R›R•R4R8R<(RR$tipathtadd_on((s>/opt/freeware/lib/python2.7/site-packages/cloudinit/helpers.pyRcfs  cCs=|j}|jj|ƒ}|r9tjj||ƒ}n|S(N(R†R›R•R4R8R<(RR$tcpathR ((s>/opt/freeware/lib/python2.7/site-packages/cloudinit/helpers.pyRBos  cCs|js dS|jjƒ}|dkr,dStjj|jdt|ƒƒ}|jj |ƒ}|r}tjj||ƒ}n|S(Nt instances( RSR3tget_instance_idR4R8R<R†tstrR›R•(RR$tiidRŸR ((s>/opt/freeware/lib/python2.7/site-packages/cloudinit/helpers.pyt _get_ipathxs  !cCs.|j|ƒ}|s&tjdƒdS|SdS(Ns?No per instance data available, is there an datasource/iid set?(R¦R0R:R3(RR$RŸ((s>/opt/freeware/lib/python2.7/site-packages/cloudinit/helpers.pyRA‡s  N(R R R3RRcRBR¦RA(((s>/opt/freeware/lib/python2.7/site-packages/cloudinit/helpers.pyR…Gs   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((s>/opt/freeware/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«((s>/opt/freeware/lib/python2.7/site-packages/cloudinit/helpers.pyR{ªs"cCs,|j||ƒr(tj|||ƒndS(N(t has_optionRt remove_option(RR©Rª((s>/opt/freeware/lib/python2.7/site-packages/cloudinit/helpers.pyR±¯scCs,|j||ƒs|jStj|||ƒS(N(R°t DEF_BOOLEANRt getboolean(RR©Rª((s>/opt/freeware/lib/python2.7/site-packages/cloudinit/helpers.pyR³³scCs,|j||ƒs|jStj|||ƒS(N(R°t DEF_FLOATRtgetfloat(RR©Rª((s>/opt/freeware/lib/python2.7/site-packages/cloudinit/helpers.pyRµ¸scCs,|j||ƒs|jStj|||ƒS(N(R°tDEF_INTRtgetint(RR©Rª((s>/opt/freeware/lib/python2.7/site-packages/cloudinit/helpers.pyR·½scCs`d}tjƒH}|j|ƒ|jƒ|jƒ}|rVdj||gƒ}nWdQX|S(Nts (tiotBytesIOtwritetflushtgetvalueR<(RtheaderR7t outputstream((s>/opt/freeware/lib/python2.7/site-packages/cloudinit/helpers.pyt stringifyÂs   N(R R R¶R´RR²R3R¨R•R{R±R³RµR·RÀ(((s>/opt/freeware/lib/python2.7/site-packages/cloudinit/helpers.pyR§šs     ("RRR¹R4t ConfigParserRRRtcloudinit.settingsRRRRt cloudinitRtloggingR R t getLoggerR R0t ExceptionR tobjectRRRR%R&R=RLRqR…R§(((s>/opt/freeware/lib/python2.7/site-packages/cloudinit/helpers.pyts(   " M-W'S