U
    Ld                     @   s   d Z ddlZddlZddlZddlmZ ddlmZmZ ddl	m
Z
mZmZ dZeeZdddZdd
dZdd Zedkreeee   dS )z,Debug jinja template rendering of user-data.    N)log)addLogHandlerCLIread_cfg_paths)JinjaLoadErrorNotJinjaErrorrender_jinja_payload_from_fileZrenderc                 C   sL   | st jttd} | jdtdd | jddtdd | jdd	d
ddd | S )a  Build or extend and arg parser for jinja render utility.

    @param parser: Optional existing ArgumentParser instance representing the
        subcommand which will be extended to support the args of this utility.

    @returns: ArgumentParser with proper argument configuration.
    )progZdescription	user_dataz$Path to the user-data file to render)typehelpz-iz--instance-datazXOptional path to instance-data.json file. Defaults to /run/cloud-init/instance-data.jsonz-dz--debug
store_trueFz+Add verbose messages during template render)actiondefaultr   )argparseArgumentParserNAME__doc__add_argumentstr)parser r   </usr/lib/python3/dist-packages/cloudinit/cmd/devel/render.py
get_parser   s*      	r   Fc              
   C   sP  t t|rtjntj |r |}nNt }t }|d}|dkrj|d}tj	
|sntd|| |}n|}tj	
|std| dS z t| }| }W 5 Q R X W n" tk
r   td|  Y dS X zt|| ||rdnd	d
}	W n> ttfk
r( }
 ztdt|
 W Y dS d}
~
X Y nX |	s@td|  dS tj|	 dS )zRender the provided user-data template file using instance-data values.

    Also setup CLI log handlers to report to stderr since this is a development
    utility which should be run by a human on the CLI.

    @return 0 on success, 1 on failure.
    instance_datar   Zinstance_data_sensitivez4Missing root-readable %s. Using redacted %s instead.z#Missing instance-data.json file: %s   zMissing user-data file: %sTF)ZpayloadZ
payload_fnZinstance_data_filedebugz5Cannot render from instance data due to exception: %sNz#Unable to render user-data file: %s)r   LOGr   DEBUGZWARNINGr   osgetuidZget_runpathpathexistsZwarningerroropenreadIOErrorr   r   r   reprsysstdoutwrite)Zuser_data_pathZinstance_data_pathr   Zinstance_data_fnpathsZuidZredacted_data_fnstreamr	   Zrendered_payloader   r   r   render_template8   sV    




 r-   c                 C   s   t |j|j|jS )N)r-   r	   r   r   )_nameargsr   r   r   handle_argsn   s    r0   __main__)N)NF)r   r   r   r'   Z	cloudinitr   Zcloudinit.cmd.develr   r   Z!cloudinit.handlers.jinja_templater   r   r   r   Z	getLoggerr   r   r-   r0   __name__exit
parse_argsr   r   r   r   <module>   s   

 
6