܍~cDUddlZddlZddlZddlmZddlmZmZddlm Z ddlm Z ddl m Z ddlmZddlmZmZmZdd lmZmZmZmZeeed < dd lmZdd lmZn#e $reZej!d ZYnwxYwe j"e#Z$GddeZ%GddeZ&Gdde j'Z( ddZ)ddZ*de+dee+fdZ, ddZ-dS) N)EACCES)OptionalType)handlers)log)Paths) PER_ALWAYS)MISSING_JINJA_PREFIXdetect_template render_string)b64d json_dumps load_file load_jsonJUndefinedError)UndefinedError) operator_rez[-.]ceZdZdS)JinjaLoadErrorN__name__ __module__ __qualname__C/usr/lib/python3/dist-packages/cloudinit/handlers/jinja_template.pyrr DrrceZdZdS) NotJinjaErrorNrrrrrr$rrrc&eZdZdgZdefdZdZdS)JinjaTemplatePartHandlerz## template: jinjapathsc tj|td||_i|_|dgD]#}|D] }||j|< $dS)N)version sub_handlers)rHandler__init__r r"r&get list_types)selfr"_kwargshandlerctypes rr(z!JinjaTemplatePartHandler.__init__,s!!$ A!>>> {{>266 3 3G ++-- 3 3+2!%(( 3 3 3rc|tjvrdS|jd}t |||}|sdStj|} |j| } | st d|| dS| j dkr| ||||||dS| j dkr| |||||dSdS)Ninstance_data_sensitivezPIgnoring jinja template for %s. Could not find supported sub-handler for type %sr$) rCONTENT_SIGNALSr" get_runpathrender_jinja_payload_from_filetype_from_starts_withr&r)LOGwarninghandler_version handle_part) r+datar.filenamepayload frequencyheadersjinja_json_filerendered_payloadsubtype sub_handlers rr9z$JinjaTemplatePartHandler.handle_part4s, H, , , F*001JKK9 X     F01ABB'++G44   KK+     F  &! + +  # #eX'7G      (A - -  # #eX'7     . -rN)rrrprefixesrr(r9rrrr!r!(sF$%H3e3333rr!Fct|ddkrtdi}d}tj|st d|z t t|}nU#t$rH}d}t|ttfr|j tkrd|z}t ||d}~wwxYwt||||}|sdS|S)aRRender a jinja template payload sourcing variables from jinja_vars_path. @param payload: String of jinja template content. Should begin with ## template: jinja . @param payload_fn: String representing the filename from which the payload was read used in error reporting. Generally in part-handling this is 'part-##'. @param instance_data_file: A path to a json file containing variables that will be used as jinja template variables. @return: A string of jinja-rendered content with the jinja header removed. Returns None on error. rjinjazPayload is not a jinja templateNzFCannot render jinja template vars. Instance data not yet present at %sz"Loading Jinja instance data failedzGCannot render jinja template vars. No read permission on '%s'. Try sudo)r rospathexistsrrr Exception isinstanceIOErrorOSErrorerrnorrender_jinja_payload)r< payload_fninstance_data_filedebug instance_datar@emsgs rr4r4Qs% w"g--=>>>M 7>>, - -  1 2    )!),>"?"?@@ )))2 a'7+ , , w&  &(:;S!!q(),]E t sA<< CAC  Cc t||dgd}|r(tdt | t ||}nH#t tf$r4}td|t|Yd}~dSd}~wwxYwdtj dtz|D}|r/td|d ||S) Nzbase64-encoded-keysT) decode_pathsinclude_key_aliaseszConverted jinja variables %sz"Ignoring jinja template for %s: %scJg|] }d|tdz!S)z'%s')replacer ).0vars r z(render_jinja_payload..s<  12666rz%s[^\s]+z:Could not render jinja template variables in file '%s': %sz, )convert_jinja_instance_datar)r6rQrr TypeErrorrr7strrefindallr join)r<rOrRrQinstance_jinja_varsr@rSwarningss rrNrN~s95"&&'.s&DDDtDLLc**DDDrz {0}{1}{2})seprVrWzv\d+$) sorteditemsformatr rJdictr^ramatchcopydeepcopyrl) r:prefixrqrVrWresultkeyvaluekey_pathsubkeysubvaluerks rr^r^sGFDD|DDDLTZZ\\**@@ U;AJ;%%fc3777s | # #KKE eT " " 5)$7 F3Kx#&& =(.s (9(9(;(;==$FH%)]8%<%rso !!!!!!!!$$$$$$######)))))) BAAAAAAAAAAAi &CCCCCC(((((((&&&O"*W%%KKK& g!!     Y        I   &&&&&x/&&&T49****Z< ,DI      s A##A=<A=