܍~cAddlZddlZddlmZmZmZddlmZddlmZddl m Z ddl m Z m Z mZddlmZmZmZmZe jeZGdd eZGd d ZGd d ZGddZdZGddZGddZGddZGddZ Gdde j!Z"GddeZ#dS)N) NoOptionErrorNoSectionErrorRawConfigParser)StringIO)time)log) persistence type_utilsutil) CFG_ENV_NAME PER_ALWAYS PER_INSTANCEPER_ONCEceZdZdS) LockFailureN__name__ __module__ __qualname__3/usr/lib/python3/dist-packages/cloudinit/helpers.pyrrDrrceZdZdS) DummyLockNrrrrrrrrrcHeZdZdZejddZdZdZdZ dS) DummySemaphorescdSNrselfs r__init__zDummySemaphores.__init__! rFc#*KtVdSr)r)r!_name_freq_clear_on_fails rlockzDummySemaphores.lock$skkrcdSNFrr!r%r&s rhas_runzDummySemaphores.has_run(surcdS)NTrr+s rclearzDummySemaphores.clear+strcdSrrr s r clear_allzDummySemaphores.clear_all.r#rNF) rrrr" contextlibcontextmanagerr(r,r.r0rrrrr st        rrceZdZdZdZdS)FileLockc||_dSr)fn)r!r7s rr"zFileLock.__init__3s rcBdtj|d|jdS)N)r obj_namer7r s r__str__zFileLock.__str__6s&'1':4'@'@'@'@$'''JJrN)rrrr"r<rrrr5r52s7KKKKKrr5c.|ddS)N-_)replace)names rcanon_sem_namerB:s <<S ! !!rcTeZdZdZejd dZdZdZdZ dZ dZ d S) FileSemaphoresc||_dSr)sem_path)r!rFs rr"zFileSemaphores.__init__?s   rFc#Kt|} |||VdS#t$r|r|||wxYwr)rB_acquire Exceptionr.)r!rAfreq clear_on_fails rr(zFileSemaphores.lockBsrd## --d++ + + + + +    ' 4&&&  s -$Act|}|||} tj|n3#tt f$rtjtd|YdSwxYwdS)NzFailed deleting semaphore %sFT)rB _get_pathr del_fileIOErrorOSErrorlogexcLOG)r!rArJsem_files rr.zFileSemaphores.clearLs}d##>>$--  M( # # # #!    K;X F F F55 ts<,A,+A,c tj|jdS#ttf$r$tjt d|jYdSwxYw)Nz&Failed deleting semaphore directory %s)r del_dirrFrOrPrQrRr s rr0zFileSemaphores.clear_allVsl  L ' ' ' ' '!    K=t}       s1AAcZ|||rdS|||}tjdt d} t j||n3#ttf$rt j td|YdSwxYwt|S)Nz:  z Failed writing semaphore file %s) r,rMosgetpidrr write_filerOrPrQrRr5)r!rArJrScontentss rrHzFileSemaphores._acquire^s <<d # # 4>>$--!#dffff5  OHh / / / /!    K? J J J44 !!!sA++,BBc^|r |tkrdSt|}|||}tj|rdS||krQtj|||rt d||dSdS)NFTz%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)r rBrMrXpathexistsrRwarning)r!rArJcnamerSs rr,zFileSemaphores.has_runns tz))5t$$>>%.. 7>>( # # 4 D==RW^^DNN4,F,FGG= KKG    4urc|j}|r |tkr tj||Stj||d|S)N.)rFrrXr]join)r!rArJrFs rrMzFileSemaphores._get_pathsS= Bt|++7<<$// /7<<TTT44*@AA ArNr1) rrrr"r2r3r(r.r0rHr,rMrrrrDrD>s!!!""" 4BBBBBrrDc"eZdZdZdZddZdS)Runnersc"||_i|_dSr)pathssems)r!rgs rr"zRunners.__init__s  rc|tks|sdSd}|tkr|jd}n%|tkr|jd}|sdS||jvrt||j|<|j|S)Nsem)r rrg get_ipathr get_cpathrhrD)r!rJrFs r_get_semzRunners._get_sems :  T 4 <   z++E22HH X  z++E22H 4 49 $ $"0":":DIh y""rNFc||}|st}|sg}|||rtd||dS||||5}|st d|ztd||t|tr |di|}n||}d|fcdddS#1swxYwYdS)Nz%s already ran (freq=%s))FNzFailed to acquire lock for %szRunning %s using lock (%s)Tr) rmrr,rRdebugr(r isinstancedict) r!rAfunctorargsrJrKrjlkresultss rrunz Runners.runsFmmD!! $!##C D ;;tT " " ! II0$ = = = = XXdD- 0 0 'B '!"AD"HIII 6bAAAdT++-%gooooGG%gtnGg ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 's5ACC Cr*)rrrr"rmrvrrrreresF###&''''''rrecTeZdZ d dZdZdZdZdefdZe d Z dS) ConfigMergerNTcZ||_||_||_||_||_d|_dSr)_paths_ds_fns _base_cfg_include_vendor_cfg)r!rg datasourceadditional_fnsbase_cfginclude_vendors rr"zConfigMerger.__init__s3 " !- rcg}|jrw |j}|r*t|tr||n0#t $r#t jtd|jYnwxYw|S)Nz2Failed loading of datasource config object from %s) r{get_config_objrprqappendrIr rQrR)r!d_cfgsds_cfgs r_get_datasource_configsz$ConfigMerger._get_datasource_configss 8  0022*j$88*MM&)))    HH   sAA*A>=A>cg}ttjvrktjt} |t j|n+#t $rt jtd|YnwxYw|S)Nz%Failed loading of env. config from %s) r rXenvironrr read_confrIrQrR)r!e_cfgse_fns r_get_env_configszConfigMerger._get_env_configss 2: % %:l+D P dnT223333 P P P C!H$OOOOO P s'A%A>=A>cg}|js|Sdg}|jr*|d|d|D]}|j|}|rtj|rz |tj|f#t$rt d|Yt$rtj td|YwxYw|S)N cloud_configvendor2_cloud_configvendor_cloud_configz5Skipped loading cloud-config from %s due to non-root.z&Failed loading of cloud-config from %s)rzr~r get_ipath_currXr]isfiler rPermissionErrorrRrorIrQ)r!i_cfgscc_pathscc_pcc_fns r_get_instance_configsz"ConfigMerger._get_instance_configss={ M"#   3 OO2 3 3 3 OO1 2 2 2  DK--d33E ..  MM$."7"78888&II% !KEu s'B((%C6$C65C6returnc"g}|jr]|jD]U} |tj|+#t$rtjt d|YRwxYw|||| || |j r||j tj |S)Nz'Failed loading of configuration from %s) r|rr rrIrQrRextendrrrr} mergemanydict)r!cfgsc_fns r _read_cfgzConfigMerger._read_cfgs 9    KKt 4 45555 KF D))++,,, D..00111 D0022333 > ( KK ' ' '!$'''s'<%A$#A$cP|j||_|jSr)rrr s rcfgzConfigMerger.cfgs% 9 ((DIyr)NNNNT) rrrr"rrrrqrpropertyrrrrrxrxs    @(4((((0Xrrxc:eZdZdZdZdZdZd dZdZd Z d S) ContentHandlersc"i|_g|_dSr) registered initializedr s rr"zContentHandlers.__init__(src,||Sr) is_registered)r!items r __contains__zContentHandlers.__contains__,s!!$'''rc,||Sr) _get_handler)r!keys r __getitem__zContentHandlers.__getitem__/s  %%%rc||jvSrrr! content_types rrzContentHandlers.is_registered2st..rFTc<t}|D]D}|r||||s||E|D] }||j|< |r#||jvr|j||Sr)set list_typesaddrrrr)r!modr overwritetypests rregisterzContentHandlers.register5s!! ! !A ! ! ))!,,!IIaLLL % %A!$DOA    )3d&666   # #C ( ( ( rc|j|Srrrs rrzContentHandlers._get_handlerCs|,,rcNt|jSr)listritemsr s rrzContentHandlers.itemsFsDO))++,,,rN)FT) rrrr"rrrrrrrrrrr's(((&&&///    --------rrcfeZdZdZddefdZdeddfdZddZdd Z dd Z dd Z dd e fd Z ddZdS)PathsN path_cfgsc||_|dd|_|dd|_tj|jd|_tj|jd|_tj|jd|_ |dd }tj|d |_ id d d d ddddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,|_ ||_ dS)-N 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.json instance_idz .instance-idmanual_clean_markerz manual-cleanobj_pklzobj.pklscriptsrjuserdatazuser-data.txt.i userdata_rawz user-data.txt vendordatazvendor-data.txt.i vendordata2zvendor-data2.txt.ivendordata2_rawzvendor-data2.txtvendordata_rawzvendor-data.txtzvendor2-cloud-config.txtzvendor-cloud-config.txtzscripts/vendorwarnings)rrvendor_scriptsr) rgetrrrXr]rc instance_link boot_finishedseed_dir template_tpllookupsr)r!rds template_dirs rr"zPaths.__init__Ms 'mmK9IJJ%MM)5FGG "$',,t~z"J"J"$',,  # #  W\\$.&AA %MM 4  "$lI!F!F  .  F     1  &'E  >  ">  y  y 5! " )# $ O% & -' ( /) * 1+ , /- .%?#<."5    :rci_pkl_versionrct|ds%t|j|jj|_d|jvr d|jd<d|jvr d|jd<dSdS)z(Perform deserialization fixes for Paths.r)rrrrrrN)hasattrrrrrr)r!rs r _unpicklezPaths._unpickle{stY''  !) L $, . .,@DL ) $DL 8 8/ L)    9 8rc8||j|Sr)rMrr!rAs rrzPaths.get_ipath_curs~~d0$777rc8||j|Sr)rMrrs rrlzPaths.get_cpaths~~dnd333rcp|jsdS|j}|dSt|tjd}tj|jd|}|j |}|r tj||}|S)Nr? instances) rget_instance_idstrr@rXsepr]rcrrr)r!rAiid path_safe_iidipathadd_ons r _get_ipathzPaths._get_ipaths 4o--// ;4C((55  T^[-HH!!$''  0GLL//E rcl||}|stddS|S)Nz?No per instance data available, is there an datasource/iid set?)rrRr_)r!rArs rrkzPaths.get_ipathsB%%  KK2   4Lrbasec`||Stj||j|Sr)rXr]rcr)r!rrAs rrMzPaths._get_paths) <Kw||D$,t"4555rc8||j|Sr)rMrrs r get_runpathzPaths.get_runpaths~~dlD111rr)rrr_ci_pkl_versionrqr"intrrrlrrkrrMrrrrrrJsO,,$,,,,\//////&8888 4444        66c6666 222222rrcLeZdZdZdZdZdZdZd dZdZ dZ d Z d Z d d Z dS) DefaultingConfigParserrgFNcz|j} tj|||}n#t$rYnt$rYnwxYw|Sr)DEF_BASErrrrr!sectionoptionvalues rrzDefaultingConfigParser.gets`  #'gv>>EE    D    D  s 8 88c||s-|dkr||tj||||dS)Ndefault) has_sectionlower add_sectionrrrs rrzDefaultingConfigParser.sets[(( &W]]__ -I-I   W % % %D'6599999rcb|||rtj|||dSdSr) has_optionr remove_optionr!rrs rrz$DefaultingConfigParser.remove_options@ ??7F + + A  )$ @ @ @ @ @ A Arch|||s|jStj|||Sr)r DEF_BOOLEANr getbooleanrs rrz!DefaultingConfigParser.getbooleans6w// $# #)$@@@rch|||s|jStj|||Sr)r DEF_FLOATrgetfloatrs rrzDefaultingConfigParser.getfloats5w// "> !'gv>>>rch|||s|jStj|||Sr)rDEF_INTrgetintrs rrzDefaultingConfigParser.getints5w// < %dGV<<r*s GGGGGGGGGG$$$$$$3333333333OOOOOOOOOOOOg!!     )                   $KKKKKKKK"""OBOBOBOBOBOBOBOBd*'*'*'*'*'*'*'*'ZggggggggT - - - - - - - -Fo2o2o2o2o2K ,o2o2o2x00000_00000r