
    x[h                         S SK r S SKrS SKJrJrJrJr  S SKJr  \ R                  " \
5      rSrSrSrSr " S S	\R                   5      rg)
    N)handlersmergerssafeyamlutil)
PER_ALWAYSz
Merge-Typez#cloud-configz#cloud-config-jsonpz*# Cloud-config part ignored SCHEMA_ERROR: c                   F    \ rS rSr\\/rS rS rS r	S r
S rS rS rS	rg
)CloudConfigPartHandler-   c                     [         R                  R                  U [        SS9  S U l        UR                  S5      U l        SU;   a  UR                  US   5      U l        / U l        / U l        g )N   )versioncloud_configcloud_config_path)	r   Handler__init__r   	cloud_buf	get_ipathcloud_fn
file_nameserror_file_names)selfpaths_kwargss      A/usr/lib/python3/dist-packages/cloudinit/handlers/cloud_config.pyr   CloudConfigPartHandler.__init__2   sa    !!$
A!>7')!OOG4G,HIDM "    c                    U R                   (       d  g / nU R                  (       ah  UR                  S[        U R                  5      -  5        U R                   H   nU(       d  SnUR                  SU-  5        M"     UR                  S5        U R                   H  nUR                  [
         U 35        M     U R                  bI  [        S/nUR                  U5        UR                  [        R                  " U R                  5      5        O/ n[        R                  " U R                   SR                  U5      S5        g )Nz# from %s files?z# %s 
i  )r   r   appendlenr   MERGED_PART_SCHEMA_ERROR_PREFIXr   CLOUD_PREFIXextendr   dumpsr   
write_filejoin)r   
file_linesfn
error_fileliness        r   _write_cloud_config*CloudConfigPartHandler._write_cloud_config;   s    }}
??/3t3GHIooB!!&B-0 & b!//J!@ A*NO 0>>% E LL$LL78Etyy'7?r   c                    Sn[         S[         -  4 H   nUR                  US5      nU(       d  M  Un  O   [        R                  " U5      nUc  [	        S5      e[
        R                  " U5      n[
        R                  " U5      n/ n	U	R                  U5        U	R                  U5        U	(       d  [
        R                  " S5      n	Xi4$ )Nr   zX-%szempty cloud configzdict(replace)+list()+str())	MERGE_HEADERgetr   	load_yaml
ValueErrorr   dict_extract_mergersstring_extract_mergersr%   )
r   payloadheadersmerge_header_headershtmp_hpayload_yamlmergers_yamlmergers_headerall_mergerss
             r   _extract_mergers'CloudConfigPartHandler._extract_mergersU   s    !, 78AKK2&Eu',$	 9 ~~g.12233LA 778LM<(>*!88,K **r   c                     UR                  5       n[        R                  " U[        S9n[        R
                  R                  U5      n[        R                  SU5        UR                  U R                  SS9U l
        g )N)prefixz!Merging by applying json patch %sF)in_place)lstripr   strip_prefix_suffixJSONP_PREFIX	jsonpatch	JsonPatchfrom_stringLOGdebugapplyr   )r   r6   patchs      r   _merge_patch#CloudConfigPartHandler._merge_patchn   s_    
 .."**7<H##//8		5u=T^^eDr   c                     U R                  X5      u  p4[        R                  SU5        [        R                  " U5      nUR                  U R                  U5      U l        g )NzMerging by applying %s)r?   rJ   rK   r   	constructmerger   )r   r6   r7   r;   
my_mergersmergers         r   _merge_part"CloudConfigPartHandler._merge_party   sJ    %)%:%:7%L"		*J7"":.dnnlCr   c                      / U l         S U l        g )N)r   r   )r   s    r   _resetCloudConfigPartHandler._reset   s    r   c                    U[         R                  :X  a  U R                  5         g U[         R                  :X  a!  U R	                  5         U R                  5         g  U R
                  b  U R                  (       d  0 U l        U[         R                  [           :X  a  U R                  U5        OU R                  XF5        S H  nUR                  US5      nM     U R                  R                  UR                  5       5        g ! [         aJ  nU R                  R                  UR                  5       5        [         R#                  SUU5         S nAg S nAf[$         a    [&        R(                  " [         SU5         g f = f)N)r    	 z2Failed at merging in cloud config part from %s: %sz.Failed at merging in cloud config part from %s)r   CONTENT_STARTrX   CONTENT_ENDr-   r   r   INCLUSION_TYPES_MAPrF   rN   rU   replacer!   stripr3   r   rJ   warning	Exceptionr   logexc)	r   datactypefilenamer6   	frequencyr7   ierrs	            r   handle_part"CloudConfigPartHandler.handle_part   s%   H***KKMH((($$&KKM	~~%T__!#44\BB!!'*  2'#++As3 (OO""8>>#34 	!!(()9:KKD 
  	KKEx	s    B'D 
E?A E)E?>E?)r   r   r   r   N)__name__
__module____qualname____firstlineno__r$   rF   prefixesr   r-   r?   rN   rU   rX   rl   __static_attributes__ r   r   r	   r	   -   s4     l+H#@4+2	EDr   r	   )loggingrG   	cloudinitr   r   r   r   cloudinit.settingsr   	getLoggerrn   rJ   r0   r$   rF   r#   r   r	   rt   r   r   <module>ry      sQ      7 7 )!& $"N tX-- tr   