x[hbUddlZddlZddlZddlZddlmZddlmZddlm Z ddlm Z ddlm Z ddl mZeed< dd lmZdd lmZd ZeZej2eZd ZGddeZGddeZe j>ddZ dZ!dZ"ddZ#dZ$ddZ%y#eef$rd ZeZYawxYw)N)Any)TemplateSyntaxError) performance) type_utils)util) write_file JUndefined)DebugUndefined)TemplateTFzCI_MISSING_JINJA_VAR/c XeZdZdeddffd ZdZe d dedededefd Zd Z xZ S) JinjaSyntaxParsingExceptionerrorreturnNct||jxsd|j|j|j |j |_y)Nzunknown syntax error)super__init__messagelinenonamefilenamesource)selfr __class__s 5/usr/lib/python3/dist-packages/cloudinit/templater.pyrz$JinjaSyntaxParsingException.__init__/sA  MM 33 LL JJ NN  ll c|j|j|j|jj |jdz j S);Avoid jinja2.TemplateSyntaxError multi-line __str__ format. syntax_error line_number line_content)format_error_messagerrr splitlinesstriprs r__str__z#JinjaSyntaxParsingException.__str__;sN(( //1$++/BHHJ)  rr r!r"cX|rd|nd}tjj|||S)rz: r)r message_templateformatrs rr#z0JinjaSyntaxParsingException.format_error_messageCs</;L>* *;;BB%#%C  rzfUnable to parse Jinja template due to syntax error: {syntax_error} on line {line_number}{line_content})r)) __name__ __module__ __qualname__rrr' staticmethodstrr#r* __classcell__)rs@rr r .sf #" #  #              =rr ceZdZdZdZdZy)UndefinedJinjaVariablez>Class used to represent any undefined jinja template variable.c*t|jSN)MISSING_JINJA_PREFIX_undefined_namer&s rr'zUndefinedJinjaVariable.__str__\s-t/C/CDDrct|jtd}tdj |j |)Nr)zhUndefined jinja variable: "{this}-{other}". Jinja tried subtraction. Perhaps you meant "{this}_{other}"?)thisother)r0replacer6 TypeErrorr+r7)rr:s r__sub__zUndefinedJinjaVariable.__sub___sIE ""#7< @@F))AGA  rN)r,r-r.__doc__r'r=rrr3r3YsHE rr3zRendering basic templatec<fd}tjd||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 0|jd}||jd}| tdtj|j d}}t |dkDr\|j }t|ts(td|dtj|d|d||}t |dkDr\|j }t|ts'td |d |dtj|t||S) Nrz,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 isinstancedictr<tuobj_namer0)matchrpathselected_paramskeyparamss rreplacerzbasic_render..replacerrs{{1~ <;;q>D <MN N  C1 $i!m,,.Cot4' O(DcK .c2O$i!mlln/40_)EG ?3'((rz)\$\{([A-Za-z0-9_.]+)\}|\$([A-Za-z0-9_.]+))resub)contentrTrUs ` r basic_renderrYis")6 664h rcd}|jddk7r|jdd\}}n|}d}tjd|tj}|s dt |fS|j djj}|dvrtd |z|d k(r$tstjd dt |fS|d k(r trd ||fSdt |fS) NcX|jdrdnd} tjd5t|tddgj d i||z cdddS#1swYyxYw#t $r'}|xjdz c_t||d}~wt$r}||d}~wwxYw) N r)zRendering jinja2 templateTz jinja2.ext.do) undefined trim_blocks extensionsrB)rr?) endswithrTimed JTemplater3renderrrr Exception)rXrTaddtemplate_syntax_error unknown_errors r jinja_renderz%detect_template..jinja_renders&&t,d" 3""#>? I"8$($3#4  f ' & '     # ) ! ( (A - (-+( ) 3] 2 3s@A*(A A*A'#A*'A** B)3"B B)!B$$B)r\rBr)z##\s*template:(.*)basic)jinjarjz.Unknown template rendering type '%s' requestedrkzcJinja not available as the selected renderer for desired template, reverting to the basic renderer.) findrIrVrPIrYrElowerr% ValueErrorJINJA_AVAILABLELOGwarning)textrhidentrest type_match template_types rdetect_templaterxs3, yy"jjq) t/=J t,,"((+11399;  2 2@   G #O KKF \40 0 g %/\40 0t,,rc|si}ttj|\}}}tj d|||||S)Nz+Rendering content of '%s' using renderer %s)rxrload_text_filerqdebug)fnrTrwrendererrXs rrender_from_filer~sD '6t7J7J27N'O$M8WII;RO GV $$rcLt||}tj|||y)N)mode)r~rr)r|outfnrTrcontentss rrender_to_filersF+HOOE8$/rc:|si}t|\}}}|||S)z Render string)rx)rXrT_template_typer}s r render_stringrs( (7(@%NHg GV $$rc*tj|}||d}t||jdz}|r'tj|d}|st d|z|dk(r t jj|yt||dy) N)variantprefixr\T)defaultz.Cannot render template file %s - invalid yaml.-w)omode) rrzrrstrip load_yamlrFsysstdoutwriter)rtemplateoutputis_yamlrr tpl_paramsouts rrender_templaters""8,H$7Jh 3;;=DHnnXt4@8K } "683/r)ir5)&rGloggingrVrtypingrjinja2r cloudinitrrrNrcloudinit.atomic_helperr__annotations__r _DebugUndefinedr rbrpr ImportErrorAttributeErrorobject getLoggerr,rqr6r r3timedrYrxr~rrrr?rrrs &!&. 8,O J g!.&"5&V  Z  -.%/%P/-d%0 % 0g ^$OJsB B.-B.