fUddlZddlZddlZddlZddlmZddlmZddlm Z ddlm Z ddl m Z eed< ddlmZdd lmZd ZeZej0eZej6d ej8Zej6d ZdZGddeZ GddeZ!dZ"dZ#dZ$ddZ%dZ&ddZ'y#eef$rd ZeZY{wxYw)N)Any)TemplateSyntaxError) type_utils)util) write_file JUndefined)DebugUndefined)TemplateTFz##\s*template:(.*)z)\$\{([A-Za-z0-9_.]+)\}|\$([A-Za-z0-9_.]+)zCI_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__0sA  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)  rrr r!cX|rd|nd}tjj|||S)rz: r)r message_templateformatrs rr"z0JinjaSyntaxParsingException.format_error_messageDs</;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)r/replacer5 TypeErrorr*r6)rr9s r__sub__zUndefinedJinjaVariable.__sub__`sIE ""#7< @@F))AGA  rN)r+r,r-__doc__r&r<rrr2r2ZsHE rr2c:fd}tj||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_namer/)matchrpathselected_paramskeyparamss rreplacerzbasic_render..replacerrs{{1~ <;;q>D <MN N  C1 $i!m,,.Cot4' O(DcK .c2O$i!mlln/40_)EG ?3'((r) BASIC_MATCHERsub)contentrSrTs ` r basic_renderrXjs)6   Xw //rcd}|jddk7r|jdd\}}n|}d}tj|}|s dt|fS|j dj j}|dvrtd|z|d k(r$tstjd dt|fS|d k(r trd ||fSdt|fS) Nc|jdrdnd} t|tddgjdi||zS#t$r'}|xj dz c_t ||d}~wt$r}||d}~wwxYw) N r(Tz jinja2.ext.do) undefined trim_blocks extensionsrA)r r>)endswith JTemplater2renderrrr Exception)rWrSaddtemplate_syntax_error unknown_errors r jinja_renderz%detect_template..jinja_renders&&t,d" 3 4 $ /0  & # " #   # ) ! ( (A - (-+( ) 3] 2 3s!&> A="A)) A=5A88A=r[rAr(basic)jinjarhz.Unknown template rendering type '%s' requestedrizcJinja not available as the selected renderer for desired template, reverting to the basic renderer.) findrH TYPE_MATCHERrOrXrDlowerr$ ValueErrorJINJA_AVAILABLELOGwarning)textrfidentrest type_match template_types rdetect_templatervs3* yy"jjq) t##E*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)rvrload_text_filerodebug)fnrSrurendererrWs rrender_from_filer|sD '6t7J7J27N'O$M8WII;RO GV $$rcLt||}tj|||y)N)mode)r|rr)rzoutfnrSr~contentss rrender_to_filersF+HOOE8$/rc:|si}t|\}}}|||S)z Render string)rv)rWrS_template_typer{s r render_stringrs( (7(@%NHg GV $$rcbt|d5}|j}ddd||d}t|jdz}|r't j |d}|st d|z|dk(r tjj|yt||d y#1swYxYw) Nr)variantprefixr[T)defaultz.Cannot render template file %s - invalid yaml.-w)omode) openreadrrstripr load_yamlrEsysstdoutwriter) rtemplateoutputis_yamlrfhr tpl_paramsouts rrender_templaters h 779$7Jh 3;;=DHnnXt4@8K } "683/s B%%B.)ir4)(rFloggingrertypingrjinja2r cloudinitrrMrcloudinit.atomic_helperr__annotations__r _DebugUndefinedr r`rnr ImportErrorAttributeErrorobject getLoggerr+rocompileIrkrUr5r r2rXrvr|rrrr>rrrs &&. 8,O J g!rzz/6  GH .&"5&V  Z  #0L.-b%0 %0c ^$OJsB44 CC