
    ܍~cM                     f   U d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZ	 d dlm
Z
 d dlmZ eed<   	 d dlmZ d d	lmZ d
ZeZn# eef$ r dZeZY nw xY w ej        e          Z ej        dej                  Z ej        d          ZdZ G d de          Z d Z!d Z"d Z#ddZ$ddZ%d Z&d Z'dS )    N)Type)log)
type_utils)util)
write_file
JUndefined)DebugUndefined)TemplateTFz##\s*template:(.*)z)\$\{([A-Za-z0-9_.]+)\}|\$([A-Za-z0-9_.]+)zCI_MISSING_JINJA_VAR/c                       e Zd ZdZd Zd ZdS )UndefinedJinjaVariablez>Class used to represent any undefined jinja template variable.c                 "    t           | j        S )N)MISSING_JINJA_PREFIX_undefined_name)selfs    5/usr/lib/python3/dist-packages/cloudinit/templater.py__str__zUndefinedJinjaVariable.__str__/   s    --t/C/CDD    c                     t          |                              t          d          }t          d                    | j        |                    )N zhUndefined jinja variable: "{this}-{other}". Jinja tried subtraction. Perhaps you meant "{this}_{other}"?)thisother)strreplacer   	TypeErrorformatr   )r   r   s     r   __sub__zUndefinedJinjaVariable.__sub__2   sV    E

""#7<<@@F) AG A A
 
 	
r   N)__name__
__module____qualname____doc__r   r    r   r   r   r   ,   s;        HHE E E
 
 
 
 
r   r   c                 D    fd}t                               ||           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           
         |                      d          }||                      d          }|t          d          t          j        |                    d                    }}t          |          dk    ro|                                }t          |t                    s+t          d|dt          j        |          d|d          ||         }t          |          dk    o|                                }t          |t                    s*t          d	|d
|dt          j        |                    t          ||                   S )N      z,Match encountered but no valid group present.z&Can not traverse into non-dictionary 'z
' of type z while looking for subkey ''zCan not extract key 'z' from non-dictionary ')groupRuntimeErrorcollectionsdequesplitlenpopleft
isinstancedictr   tuobj_namer   )matchnamepathselected_paramskeyparamss        r   replacerzbasic_render.<locals>.replacerD   sK   {{1~~<;;q>>D<MNNN C11 $ii!mm,,..Cot44 i 'O(D(D(D(DcccK   .c2O $ii!mm llnn/400 	)33_)E)E)EG   ?3'(((r   )BASIC_MATCHERsub)contentr8   r9   s    ` r   basic_renderr=   <   s4    ) ) ) ) )6 Xw///r   c                    d }|                      d          dk    r|                     dd          \  }}n| }d}t                              |          }|s
dt          | fS |                    d                                                                          }|dvrt          d|z            |d	k    r+t          s$t                              d
           dt          |fS |d	k    rt          rd	||fS dt          |fS )Nc                     |                      d          rdnd} t          | t          ddg          j        di ||z   S )N
r   Tzjinja2.ext.do)	undefinedtrim_blocks
extensionsr!   )endswith	JTemplater   render)r<   r8   adds      r   jinja_renderz%detect_template.<locals>.jinja_renderc   sp    &&t,,4dd"I0 +,	  
  
   	
r   r@   r$   r   basic)jinjarJ   z.Unknown template rendering type '%s' requestedrK   zcJinja not available as the selected renderer for desired template, reverting to the basic renderer.)findr,   TYPE_MATCHERr3   r=   r(   lowerstrip
ValueErrorJINJA_AVAILABLELOGwarning)textrH   identrest
type_matchtemplate_types         r   detect_templaterY   b   s.   
 
 
 yy"jjq))tt##E**J -t,,"((++113399;; 222@    G##O#KKF   \400g%%/%\400t,,r   c                     |si }t          t          j        |                     \  }}}t                              d| |            |||          S )Nz+Rendering content of '%s' using renderer %s)rY   r   	load_filerR   debug)fnr8   rX   rendererr<   s        r   render_from_filer_      sV     '6t~b7I7I'J'J$M8WII;ROOO8GV$$$r     c                 T    t          | |          }t          j        |||           d S )Nmode)r_   r   r   )r]   outfnr8   rc   contentss        r   render_to_filerf      s.    F++HOE8$//////r   c                 T    t          | |          }t          j        |||           dS )Render stringrb   N)render_stringr   r   )r<   rd   r8   rc   re   s        r   render_string_to_filerj      s.    Wf--HOE8$//////r   c                 H    |si }t          |           \  }}}  || |          S )rh   )rY   )r<   r8   _template_typer^   s       r   ri   ri      s5     (7(@(@%NHg8GV$$$r   c                 j   t          |d          5 }|                                }d d d            n# 1 swxY w Y   d| i}t          ||                                          dz   }t	          j        |           |dk    r!t          j                            |           d S t          ||d           d S )Nrvariantr@   -w)omode)
openreadri   rstripr   	load_yamlsysstdoutwriter   )ro   templateoutputfhre   
tpl_paramss         r   render_cloudcfgr~      s    	h		 7799              W%Jh
33;;==DHN8}}
"""""683//////s   266)r`   )(r*   rerw   typingr   	cloudinitr   loggingr   r1   r   cloudinit.atomic_helperr   __annotations__jinja2r	   _DebugUndefinedr
   rE   rQ   r   ImportErrorAttributeErrorobject	getLoggerr   rR   compileIrM   r:   r   r   r=   rY   r_   rf   rj   ri   r~   r!   r   r   <module>r      s        				 



       $ $ $ $ $ $ & & & & & &       . . . . . .   888888,,,,,,O JJ^$   OJJJ g!!rz/66
GHH. 

 
 
 
 
Z 
 
 
 #0 #0 #0L&- &- &-R% % %0 0 0 0
0 0 0 0% % %
0 
0 
0 
0 
0s   A AA