3 \me @sdZddlZddlZddlZddlZddlmZddlmZm Z m Z dZ ej e ZdddZdd d Zd d Ze d krejee ejdS)z,Debug jinja template rendering of user-data.N)read_cfg_paths)JinjaLoadError NotJinjaErrorrender_jinja_payload_from_fileZrendercCsL|stjttd}|jdtdd|jddtdd|jdd d d d d |S)aBuild 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. )prog description user_dataz$Path to the user-data file to render)typehelpz-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)actiondefaultr )argparseArgumentParserNAME__doc__ add_argumentstr)parserr/usr/lib/python3.6/render.py get_parsers  rFc Cs0|r |}nNt}tj}|jd}|dkrT|jd}tjj|sXtjd|||}n|}tjj|sttjd|dSy t |}|j }WdQRXWn t k rtjd|dSXyt ||||rd nd d } Wn6t tfk r} ztjd t| dSd} ~ XnX| s tjd |dStjj| dS)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_datarZinstance_data_sensitivez4Missing root-readable %s. Using redacted %s instead.z#Missing instance-data.json file: %sNzMissing user-data file: %sTF)ZpayloadZ payload_fnZinstance_data_filedebugz5Cannot render from instance data due to exception: %sz#Unable to render user-data file: %s)rosgetuidZ get_runpathpathexistsLOGZwarningerroropenreadIOErrorrrrreprsysstdoutwrite) Zuser_data_pathZinstance_data_pathrZinstance_data_fnpathsZuidZredacted_data_fnstreamrZrendered_payloaderrrrender_template8sL          r+cCst|j|j|jS)N)r+rrr)_nameargsrrr handle_argsmsr.__main__)N)NF)rrZloggingrr%Zcloudinit.cmd.develrZ!cloudinit.handlers.jinja_templaterrrrZ getLogger__name__rrr+r.exit parse_argsrrrrs   5