
­­­­­­­­­­­­­­­­­­
<!DOCTYPE html>
<html>
3
\me                 @   sn   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ejdZdZdZdZG d	d
 d
ejZdS )    N)handlersmergerssafeyamlutil)
PER_ALWAYSz
Merge-Typezdict(replace)+list()+str()z#cloud-configz#cloud-config-jsonpz*# Cloud-config part ignored SCHEMA_ERROR: c               @   sL   e Zd ZeegZdd Zdd Zdd Zdd Z	d	d
 Z
dd Zdd ZdS )CloudConfigPartHandlerc             K   sL   t jj| tdd d | _|jd| _d|kr<|j|d | _g | _g | _d S )N   )versionZcloud_configZcloud_config_path)	r   Handler__init__r   	cloud_bufZ	get_ipathcloud_fn
file_nameserror_file_names)selfpathsZ_kwargs r   "/usr/lib/python3.6/cloud_config.pyr   3   s    zCloudConfigPartHandler.__init__c             C   s   | j s
d S g }| jrX|jdt| j  x$| jD ]}|s<d}|jd|  q0W |jd x | jD ]}|jt |  q`W | jd k	rtdg}|j| |jt	j
| j ng }tj| j dj|d d S )Nz# from %s files?z# %s 
i  )r   r   appendlenr   MERGED_PART_SCHEMA_ERROR_PREFIXr   CLOUD_PREFIXextendr   dumpsr   Z
write_filejoin)r   Z
file_linesfnZ
error_filelinesr   r   r   _write_cloud_config<   s&    


z*CloudConfigPartHandler._write_cloud_configc       
      C   s   d}x*t dt  gD ]}|j|d}|r|}P qW tj|}|d krJtdtj|}tj|}g }	|	j| |	j| |	s~t	}	||	fS )Nr   zX-%szempty cloud config)
MERGE_HEADERgetr   Z	load_yaml
ValueErrorr   Zdict_extract_mergersstring_extract_mergersr   DEF_MERGERS)
r   payloadheadersZmerge_header_headershZtmp_hpayload_yamlZmergers_yamlZmergers_headerZall_mergersr   r   r   _extract_mergersV   s"    




z'CloudConfigPartHandler._extract_mergersc             C   sD   |j  }tj|td}tjj|}tjd| |j	| j
dd| _
d S )N)prefixz!Merging by applying json patch %sF)Zin_place)lstripr   Zstrip_prefix_suffixJSONP_PREFIX	jsonpatchZ	JsonPatchZfrom_stringLOGdebugZapplyr   )r   r&   Zpatchr   r   r   _merge_patchm   s
    z#CloudConfigPartHandler._merge_patchc             C   s:   | j ||\}}tjd| tj|}|j| j|| _d S )NzMerging by applying %s)r*   r/   r0   r   Z	constructmerger   )r   r&   r'   r)   Z
my_mergersZmergerr   r   r   _merge_partx   s    
z"CloudConfigPartHandler._merge_partc             C   s   g | _ d | _d S )N)r   r   )r   r   r   r   _reset~   s    zCloudConfigPartHandler._resetc       	      C   s  |t jkr| j  d S |t jkr4| j  | j  d S yl| jd ksH| j rNi | _|t jt krh| j	| n| j
|| xdD ]}|j|d}qzW | jj|j  W nb tk
r } z$| jj|j  tjd|| W Y d d }~X n$ tk
r   tjtd| Y nX d S )Nr   	 z2Failed at merging in cloud config part from %s: %sz.Failed at merging in cloud config part from %s)r   r5   r6   )r   ZCONTENT_STARTr4   ZCONTENT_ENDr    r   r   ZINCLUSION_TYPES_MAPr-   r1   r3   replacer   stripr#   r   r/   Zwarning	Exceptionr   Zlogexc)	r   dataZctypefilenamer&   Z	frequencyr'   ierrr   r   r   handle_part   s2    


z"CloudConfigPartHandler.handle_partN)__name__
__module____qualname__r   r-   prefixesr   r    r*   r1   r3   r4   r?   r   r   r   r   r   .   s   	r   )Zloggingr.   Z	cloudinitr   r   r   r   Zcloudinit.settingsr   Z	getLoggerr@   r/   r!   r$   r%   r   r-   r   r
   r   r   r   r   r   <module>   s   

