܍~cMfUddlZddlZddlZddlmZddlmZddlmZ ddlm Z ddl m Z ee d< ddlmZdd lmZd ZeZn#eef$rd ZeZYnwxYwejeZejd ejZejd ZdZGddeZ dZ!dZ"dZ#ddZ$ddZ%dZ&dZ'dS)N)Type)log) type_utils)util) write_file JUndefined)DebugUndefined)TemplateTFz##\s*template:(.*)z)\$\{([A-Za-z0-9_.]+)\}|\$([A-Za-z0-9_.]+)zCI_MISSING_JINJA_VAR/ceZdZdZdZdZdS)UndefinedJinjaVariablez>Class used to represent any undefined jinja template variable.c"t|jS)N)MISSING_JINJA_PREFIX_undefined_name)selfs 5/usr/lib/python3/dist-packages/cloudinit/templater.py__str__zUndefinedJinjaVariable.__str__/s--t/C/CDDct|td}td|j|)NzhUndefined jinja variable: "{this}-{other}". Jinja tried subtraction. Perhaps you meant "{this}_{other}"?)thisother)strreplacer TypeErrorformatr)rrs r__sub__zUndefinedJinjaVariable.__sub__2sVE ""#7<< @@F)AGAA   rN)__name__ __module__ __qualname____doc__rrrrr r ,s;HHEEE     rr cDfd}t||S)zThis does simple replacement of bash variable like templates. It identifies patterns like ${a} or $a and can also identify patterns like ${a.b} or $a.b which will look for a key 'b' in the dictionary rooted by key 'a'. c |d}||d}|tdtj|d}}t |dkro|}t|ts+td|dtj |d|d||}t |dko|}t|ts*td |d |dtj |t||S) Nz,Match encountered but no valid group present.z&Can not traverse into non-dictionary 'z ' of type z while looking for subkey ''zCan not extract key 'z' from non-dictionary ') group RuntimeError collectionsdequesplitlenpopleft isinstancedictrtuobj_namer)matchnamepathselected_paramskeyparamss rreplacerzbasic_render..replacerDsK{{1~~ <;;q>>D <MNN N C11 $ii!mm,,..Cot44 i' O(D(D(D(DcccK .c2O$ii!mmllnn/400 )33_)E)E)EG ?3'(((r) BASIC_MATCHERsub)contentr8r9s ` r basic_renderr=<s4)))))6   Xw / //rcd}|ddkr|dd\}}n|}d}t|}|s dt|fS|d}|dvrtd|z|d kr+ts$t d dt|fS|d kr trd ||fSdt|fS) Nc|drdnd}t|tddgjdi||zS)N rTz jinja2.ext.do) undefined trim_blocks extensionsr!)endswith JTemplater render)r<r8adds r jinja_renderz%detect_template..jinja_rendercsp&&t,,4dd" I0 +,                rr@r$rbasic)jinjarJz.Unknown template rendering type '%s' requestedrKzcJinja not available as the selected renderer for desired template, reverting to the basic renderer.) findr, TYPE_MATCHERr3r=r(lowerstrip ValueErrorJINJA_AVAILABLELOGwarning)textrHidentrest type_match template_types rdetect_templaterYbs.     yy"jjq)) tt##E**J -t,,"((++113399;;  2 2 2@   G # #O # KKF   \40 0 g % %/ %\40 0t,,rc|si}ttj|\}}}td|||||S)Nz+Rendering content of '%s' using renderer %s)rYr load_filerRdebug)fnr8rXrendererr<s rrender_from_filer_sV '6t~b7I7I'J'J$M8WII;ROOO 8GV $ $$rcTt||}tj|||dS)Nmode)r_rr)r]outfnr8rccontentss rrender_to_filerfs.F++HOE8$//////rcTt||}tj|||dS) Render stringrbN) render_stringrr)r<rdr8rcres rrender_string_to_filerjs.Wf--HOE8$//////rcH|si}t|\}}}|||S)rh)rY)r<r8_template_typer^s rriris5 (7(@(@%NHg 8GV $ $$rcjt|d5}|}dddn #1swxYwYd|i}t||dz}t j||dkr!t j|dSt||ddS)Nrvariantr@-w)omode) openreadrirstripr load_yamlsysstdoutwriter)rotemplateoutputfhre tpl_paramss rrender_cloudcfgr~s h  7799W%Jh 33;;==DHN8 }} """""683//////s 266)r`)(r*rerwtypingr cloudinitrloggingrr1rcloudinit.atomic_helperr__annotations__jinja2r _DebugUndefinedr rErQr ImportErrorAttributeErrorobject getLoggerrrRcompileIrMr:rr r=rYr_rfrjrir~r!rrrs $$$$$$&&&&&&...... 888888,,,,,,O JJ^$OJJJg!!rz/66  GHH .      Z    #0#0#0L&-&-&-R%%%0000 0000 %%% 0 0 0 0 0sA AA