
"T`.                 @   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 d d l m	 Z	 m
 Z
 d d l m Z m Z d Z e j e  Z d d	 d
  Z d d   Z d d   Z e d k r e j e    d S)z,Debug jinja template rendering of user-data.    N)render_jinja_payload_from_file)log)INSTANCE_JSON_FILEINSTANCE_JSON_SENSITIVE_FILE   )addLogHandlerCLIread_cfg_pathsZrenderc          	   C   sy   |  s t  j d t d t  }  |  j d d t d d |  j d d d t d d	 |  j d
 d 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_datatypehelpz$Path to the user-data file to renderz-iz--instance-datazXOptional path to instance-data.json file. Defaults to /run/cloud-init/instance-data.jsonz-dz--debugaction
store_truedefaultFz+Add verbose messages during template render)argparseArgumentParserNAME__doc__add_argumentstr)parser r   </usr/lib/python3/dist-packages/cloudinit/cmd/devel/render.py
get_parser   s    r   c       
      C   s  t  t | j r t j n t j  | j r7 | j } n t   } t j	   } t j
 j | j t  } | d k r t j
 j | j t  } t j
 j |  s t j d | |  | } n | } t j
 j |  s t j d |  d Sy) t | j   } | j   } Wd QRXWn) t k
 r6t j d | j  d SYn Xy7 t d | d | j d	 | d
 | j rdd n d  } Wn? t k
 r}	 z t j d t |	   d SWYd d }	 ~	 Xn X| st j d | j  d St j 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.
    r   z4Missing root-readable %s. Using redacted %s instead.z#Missing instance-data.json file: %sr   NzMissing user-data file: %sZpayloadZ
payload_fnZinstance_data_filedebugTFz$Cannot render from instance data: %sz#Unable to render user-data file: %s)r   LOGr   r   DEBUGZWARNINGZinstance_datar   osgetuidpathjoinZrun_dirr   r   existsZwarningerroropenr
   readIOErrorr   RuntimeErrorr   sysstdoutwrite)
nameargsZinstance_data_fnpathsZuidZredacted_data_fnstreamr
   Zrendered_payloader   r   r   handle_args(   sJ    "			
		r/   c              C   s   t    j   }  t t |   S)N)r   
parse_argsr/   r   )r+   r   r   r   mainZ   s    r1   __main__)r   r   r   r'   Z!cloudinit.handlers.jinja_templater   Z	cloudinitr   Zcloudinit.sourcesr   r    r   r   r   Z	getLoggerr   r   r/   r1   __name__exitr   r   r   r   <module>   s   2