f?ddlZddlZddlZddlmZmZmZddlmZddl m Z ddl m Z m Z m Z ddlmZmZmZmZej&eZGddeZGd d ZGd d ZGd dZdZGddZGddZGddZGddZGdde j@Z!GddeZ"y)N) NoOptionErrorNoSectionErrorRawConfigParser)StringIO)time) persistence type_utilsutil) CFG_ENV_NAME PER_ALWAYS PER_INSTANCEPER_ONCEc eZdZy) LockFailureN__name__ __module__ __qualname__3/usr/lib/python3/dist-packages/cloudinit/helpers.pyrrrrc eZdZy) DummyLockNrrrrrrrrrcDeZdZdZej ddZdZdZy)DummySemaphorescyNrselfs r__init__zDummySemaphores.__init__!s rc#$Ktywr)r)r _name_freq_clear_on_fails rlockzDummySemaphores.lock$skscyNFrr r#r$s rhas_runzDummySemaphores.has_run(srcy)NTrr)s rclearzDummySemaphores.clear+srNF) rrrr! contextlibcontextmanagerr&r*r,rrrrr s+ rrceZdZdZdZy)FileLockc||_yr)fn)r r3s rr!zFileLock.__init__0s rcNdtj|d|jdS)N)r obj_namer3rs r__str__zFileLock.__str__3s'1':':4'@$''JJrN)rrrr!r8rrrr1r1/s Krr1c&|jddS)N-_)replace)names rcanon_sem_namer>7s <<S !!rcPeZdZdZej ddZdZdZdZ dZ y) FileSemaphoresc||_yr)sem_path)r rBs rr!zFileSemaphores.__init__<s   rc#Kt|} |j||y#t$r|r|j||wxYwwr)r>_acquire Exceptionr,)r r=freq clear_on_fails rr&zFileSemaphores.lock?sHd# --d+ +  4&  s A$AAAct|}|j||} tj|y#tt f$rtj td|YywxYw)NzFailed deleting semaphore %sFT)r> _get_pathr del_fileIOErrorOSErrorlogexcLOG)r r=rFsem_files rr,zFileSemaphores.clearIs\d#>>$-  MM( #!  KK;X F s5*A"!A"c4|j||ry|j||}tjdt d} t j ||t|S#ttf$rt jtd|YywxYw)Nz:  z Failed writing semaphore file %s) r*rIosgetpidrr write_filerKrLrMrNr1)r r=rFrOcontentss rrDzFileSemaphores._acquireSs <<d #>>$-!#df5  OOHh /!!!  KK? J s A***BBc|r |tk(ryt|}|j||}tjj |Sr()r r>rIrRpathexists)r r=rFcnamerOs rr*zFileSemaphores.has_runcs>tz)t$>>%.ww~~h''rc|j}|r |tk(r tjj ||Stjj ||d|S)N.)rBr rRrWjoin)r r=rFrBs rrIzFileSemaphores._get_pathmsD==t|+77<<$/ /77<<T4*@A ArNr-) rrrr!r.r/r&r,rDr*rIrrrr@r@;s6!" (Brr@c eZdZdZdZddZy)Runnersc ||_i|_yr)pathssems)r r`s rr!zRunners.__init__vs  rc |tk(s|syd}|tk(r|jjd}n$|tk(r|jj d}|sy||j vrt||j |<|j |S)Nsem)r r r` get_ipathr get_cpathrar@)r rFrBs r_get_semzRunners._get_semzs : T <  zz++E2H X zz++E2H 499 $"0":DIIh yy""rNc||j|}|s t}|sg}|j||rtj d||y|j |||5}|st d|ztj d||t|tr |di|}n||}d|fcdddS#1swYyxYw)Nz%s already ran (freq=%s))FNzFailed to acquire lock for %szRunning %s using lock (%s)Tr) rfrr*rNdebugr&r isinstancedict) r r=functorargsrFrGrclkresultss rrunz Runners.runsmmD!!#CD ;;tT " II0$ = XXdD- 0 'B!"AD"HII 6bAdT+%ooG%tnGg ' ' 's A B22B;r()rrrr!rfrorrrr^r^us#&'rr^cLeZdZ d dZdZdZdZdefdZe dZ y) ConfigMergerNcX||_||_||_||_||_d|_yr)_paths_ds_fns _base_cfg_include_vendor_cfg)r r` datasourceadditional_fnsbase_cfginclude_vendors rr!zConfigMerger.__init__s/ " !- rc g}|jr@ |jj}|r!t|tr|j ||S|S#t $r)t jtd|jY|SwxYw)Nz2Failed loading of datasource config object from %s) rtget_config_objrirjappendrEr rMrN)r d_cfgsds_cfgs r_get_datasource_configsz$ConfigMerger._get_datasource_configssy 88 002j$8MM&) v   HHH   s=A.BBcg}ttjvr>tjt} |jt j ||S|S#t $rt jtd|Y|SwxYw)Nz%Failed loading of env. config from %s) r rRenvironrr read_confrErMrN)r e_cfgse_fns r_get_env_configszConfigMerger._get_env_configssp 2:: %::l+D P dnnT23 v  P C!H$O  Ps$A$BBcg}|js|Sdg}|jr"|jd|jd|D]e}|jj|}|s!tj j |sA |jtj|g|S#t$rtjd|Yt$rtjtd|YwxYw)N cloud_configvendor2_cloud_configvendor_cloud_configz5Skipped loading cloud-config from %s due to non-root.z&Failed loading of cloud-config from %s)rsrwr get_ipath_currRrWisfiler rPermissionErrorrNrhrErM)r i_cfgscc_pathscc_pcc_fns r_get_instance_configsz"ConfigMerger._get_instance_configss{{M"#    OO2 3 OO1 2 DKK--d3E. MM$.."78   'II% !KKEus$B..C5#C54C5returncg}|jr6|jD]'} |jtj|)|j|j|j|j|j|j|jr|j|jtj|S#t$rtj t d|YwxYw)Nz'Failed loading of configuration from %s) rurr rrErMrNextendrrrrv mergemanydict)r cfgsc_fns r _read_cfgzConfigMerger._read_cfgs 99  KKt 45  D))+, D..01 D0023 >> KK '!!$''!KKFs$C$DDc\|j|j|_|jSr)rxrrs rcfgzConfigMerger.cfgs& 99 (DIyyr)NNNNT) rrrr!rrrrjrpropertyrrrrrqrqsH  @(4(0rrqc8eZdZdZdZdZdZd dZdZdZ y) ContentHandlersc i|_g|_yr) registered initializedrs rr!zContentHandlers.__init__ src$|j|Sr) is_registered)r items r __contains__zContentHandlers.__contains__s!!$''rc$|j|Sr) _get_handler)r keys r __getitem__zContentHandlers.__getitem__s  %%rc||jvSrrr content_types rrzContentHandlers.is_registeredst..rc4t}|jD]9}|r|j||j|r)|j|;|D]}||j|<|r)||j vr|j j ||Sr)set list_typesaddrrrr)r modr overwritetypests rregisterzContentHandlers.registers! !A ! ))!,IIaL  !  %A!$DOOA  % 3d&6&66    # #C ( rc |j|Srrrs rrzContentHandlers._get_handler(s|,,rcHt|jjSr)listritemsrs rrzContentHandlers.items+sDOO))+,,rN)FT) rrrr!rrrrrrrrrrr s%(&/ --rrcdeZdZdZddefdZdeddfdZddZdd Z dd Z dd Z dd e fd Z ddZy)PathsN path_cfgsc ||_|jdd|_|jdd|_tj j |jd|_tj j |jd|_tj j |jd|_ |jdd }tj j |d |_ id d d d ddddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/|_ ||_ y)0N cloud_dirz/var/lib/cloudrun_dirz/run/cloud-initinstancez boot-finishedseed templates_dirz/etc/cloud/templates/z%s.tmpl boothooksrzcloud-config.txtdatahandlers instance_datainstance-data.jsoninstance_data_sensitiveinstance-data-sensitive.jsoncombined_cloud_configcombined-cloud-config.jsonnetwork_configznetwork-config.json instance_idz .instance-idmanual_clean_markerz manual-cleanobj_pklzobj.pklscriptsrcuserdatazuser-data.txt.i userdata_rawz user-data.txt vendordatazvendor-data.txt.i vendordata2zvendor-data2.txt.izvendor-data2.txtzvendor-data.txtzvendor2-cloud-config.txtzvendor-cloud-config.txtzscripts/vendorwarningshotplug.enabled)vendordata2_rawvendordata_rawrrvendor_scriptsrr) rgetrrrRrWr\ instance_link boot_finishedseed_dir template_tpllookupsry)r rds template_dirs rr!zPaths.__init__2s 'mmK9IJ%MM)5FG "$'',,t~~z"J"$'',,   #  WW\\$..&A %MM 4 "$lI!F  .  F     1  &'E  $%A  3  >  "> y! " y# $ 5% & )' ( O) * -+ , /- . 2/$>#<."0;  @rci_pkl_versionrcft|ds0t|j|jj|_d|j vrd|j d<d|j vrd|j d<d|j vrd|j d<d |j vrd |j d <y y ) z(Perform deserialization fixes for Paths.r)rrrrrrrrrN)hasattrrrryrr)r rs r _unpicklezPaths._unpicklecstY' !))g L $,, .,@DLL ) $DLL 8/ LL)  #$,, 6- LL'  DLL 0.?DLL* + 1rc:|j|j|Sr)rIrr r=s rrzPaths.get_ipath_cur|s~~d00$77rc:|j|j|Sr)rIrrs rrezPaths.get_cpaths~~dnnd33rc||jsy|jj}|yt|jtj d}tj j|jd|}|jj|}|r tj j||}|S)Nr; instances) ryget_instance_idstrr<rRseprWr\rrr)r r=iid path_safe_iidipathadd_ons r _get_ipathzPaths._get_ipathsoo--/ ;C((5  T^^[-H!!$' GGLL/E rcX|j|}|stjdy|S)Nz?No per instance data available, is there an datasource/iid set?)rrNwarning)r r=rs rrdzPaths.get_ipaths.% KK2 Lrbasecd||Stjj||j|Sr)rRrWr\r)r rr=s rrIzPaths._get_paths* <Kww||D$,,t"455rc:|j|j|Sr)rIrrs r get_runpathzPaths.get_runpaths~~dllD11rr)rrr_ci_pkl_versionrjr!intrrrerrdrrIrrrrrr/sOO/$/b@@@28 4  6c6 2rrcJeZdZdZdZdZdZdZd dZdZ dZ d Z d Z d d Z y) DefaultingConfigParserrgFNc|j} tj|||}|S#t$rY|St$rY|SwxYwr)DEF_BASErrrrr sectionoptionvalues rrzDefaultingConfigParser.getsX  #''gv>E         s' ???c|j|s$|jdk7r|j|tj||||y)Ndefault) has_sectionlower add_sectionrrrs rrzDefaultingConfigParser.sets?(W]]_ -I   W %D'659rcX|j||rtj|||yyr) has_optionr remove_optionr rrs rrz$DefaultingConfigParser.remove_options' ??7F +  ) )$ @ ,rcl|j||s |jStj|||Sr)r  DEF_BOOLEANr getbooleanrs rrz!DefaultingConfigParser.getbooleans1w/## #))$@@rcl|j||s |jStj|||Sr)r  DEF_FLOATrgetfloatrs rrzDefaultingConfigParser.getfloats/w/>> !''gv>>rcl|j||s |jStj|||Sr)r DEF_INTrgetintrs rrzDefaultingConfigParser.getints/w/<< %%dGV<r@r^rqrCloudInitPickleMixinrrrrrr(s GG33OOg! )     KK"7B7Bt*'*'ZggT - -Fx2K , ,x2J0_0r