ó oBú]c@s¹ddlZddlmZddlmZddlmZddlmZddlmZddlm Z ej e ƒZ dZ ejd ƒZd Zd Zd ejfd „ƒYZdS(iÿÿÿÿN(thandlers(tlog(tmergers(tutil(tsafeyaml(t PER_ALWAYSs Merge-Typesdict(replace)+list()+str()s #cloud-configs#cloud-config-jsonptCloudConfigPartHandlercBsSeZeegZd„Zd„Zd„Zd„Zd„Z d„Z d„Z RS(cKsftjj|tddƒd|_|jdƒ|_d|krY|j|dƒ|_ng|_dS(Ntversionit cloud_configtcloud_config_path( RtHandlert__init__RtNonet cloud_buft get_ipathtcloud_fnt file_names(tselftpathst_kwargs((sC/usr/lib/python2.7/site-packages/cloudinit/handlers/cloud_config.pyR 4s   cCsç|js dSg}|jrz|jdt|jƒƒx1|jD]&}|sUd}n|jd|ƒq@W|jdƒn|jdk r¾tdg}|j|ƒ|jtj |jƒƒng}t j |jdj |ƒdƒdS(Ns# from %s filest?s# %sts i€( RRtappendtlenR R t CLOUD_PREFIXtextendRtdumpsRt write_filetjoin(Rt file_linestfntlines((sC/usr/lib/python2.7/site-packages/cloudinit/handlers/cloud_config.pyt_write_cloud_config<s"     c Cs©d}x:tdtgD](}|j|dƒ}|r|}PqqWtj|ƒ}tj|ƒ}tj|ƒ}g} | j|ƒ| j|ƒ| sŸt} n|| fS(NRsX-%s( t MERGE_HEADERtgetRt load_yamlRtdict_extract_mergerststring_extract_mergersRt DEF_MERGERS( Rtpayloadtheaderstmerge_header_headersthttmp_ht payload_yamlt mergers_yamltmergers_headert all_mergers((sC/usr/lib/python2.7/site-packages/cloudinit/handlers/cloud_config.pyt_extract_mergersTs   cCsb|jƒ}tj|dtƒ}tjj|ƒ}tjd|ƒ|j |j dt ƒ|_ dS(Ntprefixs!Merging by applying json patch %stin_place( tlstripRtstrip_prefix_suffixt JSONP_PREFIXt jsonpatcht JsonPatcht from_stringtLOGtdebugtapplyR tFalse(RR'tpatch((sC/usr/lib/python2.7/site-packages/cloudinit/handlers/cloud_config.pyt _merge_patchhs  cCsS|j||ƒ\}}tjd|ƒtj|ƒ}|j|j|ƒ|_dS(NsMerging by applying %s(R0R9R:Rt constructtmergeR (RR'R(R,t my_mergerstmerger((sC/usr/lib/python2.7/site-packages/cloudinit/handlers/cloud_config.pyt _merge_partsscCsg|_d|_dS(N(RR R (R((sC/usr/lib/python2.7/site-packages/cloudinit/handlers/cloud_config.pyt_resetys cCs|tjkr|jƒdS|tjkrD|jƒ|jƒdSy•|jdks`|j rli|_n|tjt kr|j |ƒn|j ||ƒx dD]}|j |dƒ}q¦W|jj |jƒƒWn$tk rÿtjtd|ƒnXdS(Ns s s t s.Failed at merging in cloud config part from %s(s s s (Rt CONTENT_STARTRDt CONTENT_ENDR R R RtINCLUSION_TYPES_MAPR5R>RCtreplaceRtstript ExceptionRtlogexcR9(RtdatatctypetfilenameR't frequencyR(ti((sC/usr/lib/python2.7/site-packages/cloudinit/handlers/cloud_config.pyt handle_part}s&       ( t__name__t __module__RR5tprefixesR R R0R>RCRDRR(((sC/usr/lib/python2.7/site-packages/cloudinit/handlers/cloud_config.pyR/s      (R6t cloudinitRRtloggingRRRtcloudinit.settingsRt getLoggerRSR9R!R%R&RR5R R(((sC/usr/lib/python2.7/site-packages/cloudinit/handlers/cloud_config.pyt s