Current File : //lib/python2.7/site-packages/cloudinit/handlers/jinja_template.pyc
�
oB�]c@s$ddlmZddlZddlZyddlmZWnek
rUeZnXddl	m
Z
ddl	mZddl
mZddlmZmZddlmZmZmZmZdd	lmZeje�Zd
e
jfd��YZed�Zed
�Z dddd�Z!dS(i����(tEACCESN(tUndefinedError(thandlers(tlog(tINSTANCE_JSON_FILE(t
render_stringtMISSING_JINJA_PREFIX(tb64dt	load_filet	load_jsont
json_dumps(t
PER_ALWAYStJinjaTemplatePartHandlercBs#eZdgZd�Zd�ZRS(s## template: jinjacKsptjj|tdd�||_i|_x>|jdg�D]*}x!|j�D]}||j|<qQWq>WdS(Ntversionitsub_handlers(RtHandlert__init__RtpathsRtgett
list_types(tselfRt_kwargsthandlertctype((sE/usr/lib/python2.7/site-packages/cloudinit/handlers/jinja_template.pyRs		cCs�|tjkrdStjj|jjt�}t|||�}|sJdStj	|�}	|j
j|	�}
|
s�tj
d||	�dS|
jdkr�|
j||||||�n+|
jdkr�|
j|||||�ndS(NsPIgnoring jinja template for %s. Could not find supported sub-handler for type %sii(RtCONTENT_SIGNALStostpathtjoinRtrun_dirRtrender_jinja_payload_from_filettype_from_starts_withRRtLOGtwarningthandler_versionthandle_part(RtdataRtfilenametpayloadt	frequencytheaderstjinja_json_filetrendered_payloadtsubtypetsub_handler((sE/usr/lib/python2.7/site-packages/cloudinit/handlers/jinja_template.pyR"$s(
(t__name__t
__module__tprefixesRR"(((sE/usr/lib/python2.7/site-packages/cloudinit/handlers/jinja_template.pyRs		cCs�i}d}tjj|�s1td|��nytt|��}Wn;ttfk
r�}|j	t
kr�td|��q�nXt||||�}|s�dS|S(sRRender 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.
    sFCannot render jinja template vars. Instance data not yet present at %ssGCannot render jinja template vars. No read permission on '%s'. Try sudoN(tNoneRRtexiststRuntimeErrorR	RtIOErrortOSErrorterrnoRtrender_jinja_payload(R%t
payload_fntinstance_data_filetdebugt
instance_dataR)te((sE/usr/lib/python2.7/site-packages/cloudinit/handlers/jinja_template.pyR;s$
c	Cs�t|d|jdg��}|r=tjdt|��nyt||�}Wn3ttfk
r�}tjd|t	|��dSXgtjdt
|�D]}d|jt
d�^q�}|r�tjd|d	j|��n|S(
Ntdecode_pathssbase64-encoded-keyssConverted jinja variables
%ss"Ignoring jinja template for %s: %ss%s[^\s]+s'%s'ts:Could not render jinja template variables in file '%s': %ss, (tconvert_jinja_instance_dataRRR8R
Rt	TypeErrortJUndefinedErrorR tstrR/tretfindallRtreplaceR(	R%R6R9R8tinstance_jinja_varsR)R:tvartwarnings((sE/usr/lib/python2.7/site-packages/cloudinit/handlers/jinja_template.pyR5_s(	0R<t/cCs*i}g|D]}|jdd�^q
}x�t|j��D]�\}}d|krk|jdd�}n|r�dj|||�n|}||kr�t|�}nt|t�rt||d|d|�||<tj	d|�r"x+||j�D]\}	}
|
||	<q�Wq"q>|||<q>W|S(s�Process instance-data.json dict for use in jinja templates.

    Replace hyphens with underscores for jinja templates and decode any
    base64_encoded_keys.
    t-t_s	{0}{1}{2}tsepR;sv\d+(
RCtsortedtitemstformatRt
isinstancetdictR=RAtmatch(R#tprefixRJR;tresultRtkeytvaluetkey_pathtsubkeytsubvalue((sE/usr/lib/python2.7/site-packages/cloudinit/handlers/jinja_template.pyR=ws %!(("R4RRRAtjinja2.exceptionsRR?tImportErrort	Exceptiont	cloudinitRRtloggingtcloudinit.sourcesRtcloudinit.templaterRRtcloudinit.utilRRR	R
tcloudinit.settingsRt	getLoggerR,RRRtFalseRR5R=(((sE/usr/lib/python2.7/site-packages/cloudinit/handlers/jinja_template.pyt<module>s"

"$#