|
Server : Apache System : Linux server.mata-lashes.com 3.10.0-1160.90.1.el7.x86_64 #1 SMP Thu May 4 15:21:22 UTC 2023 x86_64 User : matalashes ( 1004) PHP Version : 8.1.29 Disable Function : NONE Directory : /usr/src/cloud-init/cloudinit/__pycache__/ |
Upload File : |
3
$%we � @ s U d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZ d dlm
Z
d dlmZ e
y$d dlmZ d dlmZ d ZeZ
W n eefk
r� d
ZeZ
Y nX eje�Zejdej�Zejd�Zd
ZG dd� de
�Zdd� Z dd� Z!dd� Z"ddd�Z#dd� Z$dd� Z%dS )� N)�Any)�log)�
type_utils)�util)�
write_file)�DebugUndefined)�TemplateTFz##\s*template:(.*)z)\$\{([A-Za-z0-9_.]+)\}|\$([A-Za-z0-9_.]+)zCI_MISSING_JINJA_VAR/c @ s e Zd ZdZdd� Zdd� ZdS )�UndefinedJinjaVariablez>Class used to represent any undefined jinja template variable.c C s dt | jf S )Nz%s%s)�MISSING_JINJA_PREFIX�_undefined_name)�self� r
�*/usr/src/cloud-init/cloudinit/templater.py�__str__2 s zUndefinedJinjaVariable.__str__c C s( t |�jtd�}tdj| j|d���d S )N� zhUndefined jinja variable: "{this}-{other}". Jinja tried subtraction. Perhaps you meant "{this}_{other}"?)�this�other)�str�replacer
� TypeError�formatr )r r r
r
r �__sub__5 s zUndefinedJinjaVariable.__sub__N)�__name__�
__module__�__qualname__�__doc__r r r
r
r
r r / s r c s � fdd�}t j|| �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'.
c s� | j d�}|d kr| j d�}|d kr,td��tj|jd��}� }xBt|�dkr�|j� }t|t�sxt d|t
j|�|f ��|| }qBW |j� }t|t�s�t d||t
j|�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 �tuZobj_namer )�match�name�pathZselected_params�key)�paramsr
r �replacerG s(
zbasic_render.<locals>.replacer)�
BASIC_MATCHER�sub)�contentr- r. r
)r- r �basic_render? s r2 c C s� dd� }| j d�d
kr(| jdd�\}}n| }d}tj|�}|sHdt| fS |jd�j� j� }|dkrntd| ��|dkr�t r�t
jd � dt|fS |dkr�t r�d||fS dt|fS d S )Nc S s0 | j d�rdnd}t| tddgd�jf |�| S )N�
r Tz
jinja2.ext.do)Z undefinedZtrim_blocks�
extensions)�endswith� JTemplater Zrender)r1 r- �addr
r
r �jinja_renderf s z%detect_template.<locals>.jinja_renderr3 r r �basic�jinjaz.Unknown template rendering type '%s' requestedzcJinja not available as the selected renderer for desired template, reverting to the basic renderer.���)r: r9 )�findr# �TYPE_MATCHERr) r2 r �lower�strip�
ValueError�JINJA_AVAILABLE�LOGZwarning)�textr8 Zident�restZ
type_match�
template_typer
r
r �detect_templatee s(
rF c C s4 |si }t tj| ��\}}}tjd| |� |||�S )Nz+Rendering content of '%s' using renderer %s)rF r Z load_filerB �debug)�fnr- rE �rendererr1 r
r
r �render_from_file� s
rJ � c C s t | |�}tj|||d� d S )N)�mode)rJ r r )rH Zoutfnr- rL �contentsr
r
r �render_to_file� s
rN c C s |si }t | �\}}} || |�S )z
Render string)rF )r1 r- Z_template_typerI r
r
r �
render_string� s rO c C sj t |d��}|j� }W d Q R X d| i}t||�j� d }tj|� |dkrXtjj|� nt ||dd� d S )N�r�variantr3 �-�w)Zomode)
�open�readrO �rstripr Z load_yaml�sys�stdout�writer )rQ �template�outputZfhrM Z
tpl_paramsr
r
r �render_cloudcfg� s
r\ )rK )&r! �rerW Ztypingr � cloudinitr Zloggingr r( r Zcloudinit.atomic_helperr Z
JUndefinedZjinja2r Z_DebugUndefinedr r6 rA �ImportError�AttributeError�objectZ getLoggerr rB �compile�Ir= r/ r
r r2 rF rJ rN rO r\ r
r
r
r �<module> s8
&)