x[h@ddlZddlZddlZddlmZmZmZddlmZddl m Z ddl m Z m Z m Z mZddlmZmZmZmZej(eZGddeZGd d ZGd d ZGd dZdZGddZGddZGddZGddZ Gdde jBZ"GddeZ#y)N) NoOptionErrorNoSectionErrorRawConfigParser)StringIO)time) persistencesettings 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!r4s rr"zFileLock.__init__0s rcNdtj|d|jdS)N)r obj_namer4r s r__str__zFileLock.__str__3s'1':':4'@$''JJrN)rrrr"r9rrrr2r2/s Krr2c&|jddS)N-_)replace)names rcanon_sem_namer?7s <<S !!rcPeZdZdZej ddZdZdZdZ dZ y) FileSemaphoresc||_yr)sem_path)r!rCs 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>rGsem_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+rJosgetpidrr write_filerLrMrNrOr2)r!r>rGrPcontentss rrEzFileSemaphores._acquireSs <<d #>>$-!#df5  OOHh /!!!  KK? J s A***BBc|r |tk(ryt|}|j||}tjj |Sr))r r?rJrSpathexists)r!r>rGcnamerPs rr+zFileSemaphores.has_runcs>tz)t$>>%.ww~~h''rc|j}|r |tk(r tjj ||Stjj ||d|S)N.)rCrrSrXjoin)r!r>rGrCs rrJzFileSemaphores._get_pathmsD==t|+77<<$/ /77<<T4*@A ArNr.) rrrr"r/r0r'r-rEr+rJrrrrArA;s6!" (BrrAc eZdZdZdZddZy)Runnersc ||_i|_yr)pathssems)r!ras rr"zRunners.__init__vs  rc |tk(s|syd}|tk(r|jjd}n$|tk(r|jj d}|sy||j vrt||j |<|j |S)Nsem)r rra get_ipathr get_cpathrbrA)r!rGrCs 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) rgrr+rOdebugr'r isinstancedict) r!r>functorargsrGrHrdlkresultss rrunz Runners.runsmmD!!#CD ;;tT " II0$ = XXdD- 0 'B!"AD"HII 6bAdT+%ooG%tnGg ' ' 's A B22B;r))rrrr"rgrprrrr_r_us#&'rr_cLeZdZ d dZdZdZdZdefdZe dZ y) ConfigMergerNcX||_||_||_||_||_d|_yr)_paths_ds_fns _base_cfg_include_vendor_cfg)r!ra 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) ruget_config_objrjrkappendrFr rNrO)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 rSenvironrr read_confrFrNrO)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)rtrxr get_ipath_currSrXisfiler rPermissionErrorrOrirFrN)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) rvrr rrFrNrOextendrrrrw mergemanydict)r!cfgsc_fns r _read_cfgzConfigMerger._read_cfgs 99  KKt 45  D))+, D..01 D0023 >> KK '!!$''!KKFs$C$DDc\|j|j|_|jSr)ryrr s rcfgzConfigMerger.cfgs& 99 (DIyyr)NNNNT) rrrr"rrrrkrpropertyrrrrrrrrsH  @(4(0rrrc8eZdZdZdZdZdZd dZdZdZ y) ContentHandlersc i|_g|_yr) registered initializedr s 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)listritemsr s rrzContentHandlers.items+sDOO))+,,rN)FT) rrrr"rrrrrrrrrrr s%(&/ --rrcdeZdZdZddefdZdeddfdZddZdd Z dd Z dd Z dd e fd Z ddZy)PathsN path_cfgsc ||_|jdd|_|jdd|_|jdtj |_tjj|jd|_ tjj|jd|_ tjj|jd|_ |jd d }tjj|d |_ id d d dddddddddddddddddddddd d d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1|_||_y)2N cloud_dirz/var/lib/clouddocs_dirz/usr/share/doc/cloud-init/run_dirinstancez 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.pklscriptsrduserdatazuser-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 .skip-network)vendordata2_rawvendordata_rawrrvendor_scriptsrrr)rgetrrr DEFAULT_RUN_DIRrrSrXr] instance_link boot_finishedseed_dir template_tpllookupsrz)r!rds template_dirs rr"zPaths.__init__2s 'mmK9IJ&]] 4  &MM)X5M5MN "$'',,t~~z"J"$'',,   #  WW\\$..&A %MM 4 "$lI!F  .  F     1  &'E  $%A  3  >  "> y! " y# $ 5% & )' ( O) * -+ , /- . 2/$>#<."0,=  Brci_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)hasattrrrrzrr)r!rs r _unpicklezPaths._unpicklegstY' !))g L $,, .,@DLL ) $DLL 8. LL2 3 #$,, 6, LL0 1 DLL 0.?DLL* + 1rc:|j|j|Sr)rJrr!r>s rrzPaths.get_ipath_curs~~d00$77rc:|j|j|Sr)rJrrs rrfzPaths.get_cpaths~~dnnd33rc||jsy|jj}|yt|jtj d}tj j|jd|}|jj|}|r tj j||}|S)Nr< instances) rzget_instance_idstrr=rSseprXr]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?)rrOwarning)r!r>rs rrezPaths.get_ipaths.% KK2 Lrbasecd||Stjj||j|Sr)rSrXr]r)r!rr>s rrJzPaths._get_paths* <Kww||D$,,t"455rc:|j|j|Sr)rJrrs r get_runpathzPaths.get_runpaths~~dllD11rr)rrr_ci_pkl_versionrkr"intrrrfrrerrJrrrrrr/sOO3$3j@@@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!rr s 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)rDEF_INTrgetintrs rrzDefaultingConfigParser.getints/w/<< %%dGV<r,s GG==OOg! )     KK"7B7Bt*'*'ZggT - -F|2K , ,|2R0_0r