HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux ip-10-0-8-47 6.8.0-1021-aws #23~22.04.1-Ubuntu SMP Tue Dec 10 16:31:58 UTC 2024 aarch64
User: ubuntu (1000)
PHP: 8.1.2-1ubuntu2.22
Disabled: NONE
Upload Files
File: //usr/lib/python3/dist-packages/cloudinit/__pycache__/templater.cpython-310.pyc
o

�AdM�	@sUddlZddlZddlZddlmZddlmZddlmZ	ddlm
Z
ddlmZee
d<zddlmZdd	lmZd
ZeZWneefyPdZeZYnwe�e�Ze�dej�Ze�d
�ZdZGdd�de�Z dd�Z!dd�Z"dd�Z#d dd�Z$d dd�Z%dd�Z&dd�Z'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/c@s eZdZdZdd�Zdd�ZdS)�UndefinedJinjaVariablez>Class used to represent any undefined jinja template variable.cCsdt|jfS)Nz%s%s)�MISSING_JINJA_PREFIX�_undefined_name)�self�r�5/usr/lib/python3/dist-packages/cloudinit/templater.py�__str__/szUndefinedJinjaVariable.__str__cCs$t|��td�}tdj|j|d���)N�zhUndefined jinja variable: "{this}-{other}". Jinja tried subtraction. Perhaps you meant "{this}_{other}"?)�this�other)�str�replacer�	TypeError�formatr)r
rrrr�__sub__2s��zUndefinedJinjaVariable.__sub__N)�__name__�
__module__�__qualname__�__doc__rrrrrrr
,sr
cs�fdd�}t�||�S)z�This 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'.
    cs�|�d�}|dur|�d�}|durtd��t�|�d��}�}t|�dkrE|��}t|t�s;t	d|t
�|�|f��||}t|�dks&|��}t|t�sZt	d||t
�|�f��t||�S)N��z,Match encountered but no valid group present�.zRCan not traverse into non-dictionary '%s' of type %s while looking for subkey '%s'z<Can not extract key '%s' from non-dictionary '%s' of type %s)
�group�RuntimeError�collections�deque�split�len�popleft�
isinstance�dictr�tu�obj_namer)�match�name�path�selected_params�key��paramsrr�replacerDs2


���

��zbasic_render.<locals>.replacer)�
BASIC_MATCHER�sub)�contentr1r2rr0r�basic_render<sr6cCs�dd�}|�d�dkr|�dd�\}}n|}d}t�|�}|s$dt|fS|�d�����}|dvr7td	|��|d
krGt	sGt
�d�dt|fS|d
krRt	rRd
||fSdt|fS)NcSs4|�d�rdnd}t|tddgd�jdi|��|S)N�
rTz
jinja2.ext.do)�	undefined�trim_blocks�
extensionsr)�endswith�	JTemplater
�render)r5r1�addrrr�jinja_rendercs�����z%detect_template.<locals>.jinja_renderr7���rr�basic)�jinjarAz.Unknown template rendering type '%s' requestedrBzcJinja not available as the selected renderer for desired template, reverting to the basic renderer.)�findr$�TYPE_MATCHERr+r6r �lower�strip�
ValueError�JINJA_AVAILABLE�LOG�warning)�textr?�ident�rest�
type_match�
template_typerrr�detect_templatebs.


���


rPcCs4|si}tt�|��\}}}t�d||�|||�S)Nz+Rendering content of '%s' using renderer %s)rPr�	load_filerI�debug)�fnr1rO�rendererr5rrr�render_from_file�s

rU�cCst||�}tj|||d�dS)N��mode)rUrr)rS�outfnr1rX�contentsrrr�render_to_file�s
r[cCst||�}tj|||d�dS)�
Render stringrWN)�
render_stringrr)r5rYr1rXrZrrr�render_string_to_file�s
r^cCs |si}t|�\}}}|||�S)r\)rP)r5r1�_template_typerTrrrr]�s
r]cCs�t|d��}|��}Wd�n1swYd|i}t||���d}t�|�|dkr7tj�|�dSt	||dd�dS)N�r�variantr7�-�w)�omode)
�open�readr]�rstripr�	load_yaml�sys�stdout�writer)ra�template�output�fhrZ�
tpl_paramsrrr�render_cloudcfg�s
�
rp)rV)(r"�reri�typingr�	cloudinitr�loggingrr)r�cloudinit.atomic_helperr�__annotations__�jinja2r�_DebugUndefinedr	r<rHr�ImportError�AttributeError�object�	getLoggerrrI�compile�IrDr3rr
r6rPrUr[r^r]rprrrr�<module>s<
�

&)