
    x[h                         d dl Z d dlZd dlmZmZmZmZ d dlmZ  e j                  e
      ZdZdZdZdZ G d d	ej                         Zy)
    N)handlersmergerssafeyamlutil)
PER_ALWAYSz
Merge-Typez#cloud-configz#cloud-config-jsonpz*# Cloud-config part ignored SCHEMA_ERROR: c                   >    e Zd ZeegZd Zd Zd Zd Z	d Z
d Zd Zy)	CloudConfigPartHandlerc                     t         j                  j                  | t        d       d | _        |j                  d      | _        d|v r|j                  |d         | _        g | _        g | _        y )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   zCloudConfigPartHandler.__init__2   sa    !!$
A!>7')!OOG4G,HIDM "    c                 \   | j                   sy g }| j                  ra|j                  dt        | j                        z         | j                  D ]  }|sd}|j                  d|z          |j                  d       | j                  D ]  }|j                  t
         |         | j                  Ht        dg}|j                  |       |j                  t        j                  | j                               ng }t        j                  | j                   dj                  |      d       y )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_configz*CloudConfigPartHandler._write_cloud_config;   s   }}
??/3t3GHIoo 1B!!&B-01 b!// 	PJ!@ A*NO	P>>% E LL$LL78Etyy'7?r   c                 t   d}t         dt         z  fD ]  }|j                  |d      }|s|} n t        j                  |      }|t	        d      t        j                  |      }t        j                  |      }g }	|	j                  |       |	j                  |       |	st        j                  d      }	||	fS )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_mergersz'CloudConfigPartHandler._extract_mergersU   s    !, 78 	AKK2&E',$		 ~~g.12233LA 778LM<(>*!88,K k**r   c                    |j                         }t        j                  |t              }t        j
                  j                  |      }t        j                  d|       |j                  | j                  d      | _
        y )N)prefixz!Merging by applying json patch %sF)in_place)lstripr   strip_prefix_suffixJSONP_PREFIX	jsonpatch	JsonPatchfrom_stringLOGdebugapplyr   )r   r3   patchs      r   _merge_patchz#CloudConfigPartHandler._merge_patchn   s_    
 .."**7<H##//8		5u=T^^eDr   c                     | j                  ||      \  }}t        j                  d|       t        j                  |      }|j                  | j                  |      | _        y )NzMerging by applying %s)r<   rF   rG   r   	constructmerger   )r   r3   r4   r8   
my_mergersmergers         r   _merge_partz"CloudConfigPartHandler._merge_party   sN    %)%:%:7G%L"z		*J7"":.dnnlCr   c                      g | _         d | _        y )N)r   r   )r   s    r   _resetzCloudConfigPartHandler._reset   s    r   c                    |t         j                  k(  r| j                          y |t         j                  k(  r!| j	                          | j                          y 	 | j
                  | j                  si | _        |t         j                  t           k(  r| j                  |       n| j                  ||       dD ]  }|j                  |d      } | j                  j                  |j                                y # t        $ rJ}| j                  j                  |j                                t         j#                  d||       Y d }~y d }~wt$        $ r t'        j(                  t         d|       Y y w xY w)N)r   	 z2Failed at merging in cloud config part from %s: %sz.Failed at merging in cloud config part from %s)r   CONTENT_STARTrR   CONTENT_ENDr+   r   r   INCLUSION_TYPES_MAPrB   rJ   rP   replacer   stripr0   r   rF   warning	Exceptionr   logexc)	r   datactypefilenamer3   	frequencyr4   ierrs	            r   handle_partz"CloudConfigPartHandler.handle_part   s,   H***KKMH((($$&KKM	~~%T__!#44\BB!!'*  '2' 4#++As34OO""8>>#34 	!!(()9:KKD 
  	KKEx	s    BC: :	E2A E'E21E2N)__name__
__module____qualname__r"   rB   prefixesr   r+   r<   rJ   rP   rR   re    r   r   r	   r	   -   s4     l+H#@4+2	EDr   r	   )loggingrC   	cloudinitr   r   r   r   cloudinit.settingsr   	getLoggerrf   rF   r-   r"   rB   r!   r   r	   rj   r   r   <module>ro      sS      7 7 )g!& $"N tX-- tr   