o
    x[h;  ã                
   @   sÎ   U d Z ddlZddlmZ ddlmZ ddlmZmZm	Z	 ddl
mZ ddlmZ ddlmZ dd	lmZ d
ZddddddœiZddgedgdœZeed< e e¡Zdededededdf
dd„Zdd„ ZdS )z&install and configure landscape clienté    N)Úchain)Ú	ConfigObj)ÚsubpÚ
type_utilsÚutil)ÚCloud)ÚConfig)Ú
MetaSchema)ÚPER_INSTANCEz/etc/landscape/client.confÚclientÚinfoz.https://landscape.canonical.com/message-systemz#http://landscape.canonical.com/pingz/var/lib/landscape/client)Ú	log_levelÚurlÚping_urlÚ	data_pathÚcc_landscapeÚubuntuÚ	landscape)ÚidÚdistrosÚ	frequencyÚactivate_by_schema_keysÚmetaÚnameÚcfgÚcloudÚargsÚreturnc           	   
   C   sþ   |  di ¡}t|tƒstdjt |¡d�ƒ‚|sdS |j dg¡ t	t
|g}ttdd„ tt|ƒd  ¡ ƒD ƒŽ ƒ}ztjg d	¢d
gd� t ddg| ¡ W dS  tjy~ } z"|jdkrct d¡ nd|› �}t t|¡ t|ƒ|‚W Y d}~dS d}~ww )z¬
    Basically turn a top level 'landscape' entry with a 'client' dict
    and render it to ConfigObj format under '[client]' section in
    /etc/landscape/client.conf
    r   zR'landscape' key existed in config, but not a dictionary type, is a {_type} instead)Ú_typeNzlandscape-clientc                 S   s&   g | ]\}}d |  dd¡› �|g‘qS )z--Ú_ú-)Úreplace)Ú.0ÚkÚv© r%   ú?/usr/lib/python3/dist-packages/cloudinit/config/cc_landscape.pyÚ
<listcomp>I   s    ÿÿzhandle.<locals>.<listcomp>r   )úlandscape-configú--silentz--is-registeredé   )Úrcsr(   r)   r   z&Client already registered to LandscapezFailure registering client:
)ÚgetÚ
isinstanceÚdictÚRuntimeErrorÚformatr   Úobj_nameÚdistroÚinstall_packagesÚLSC_BUILTIN_CFGÚLSC_CLIENT_CFG_FILEÚlistr   ÚsortedÚmerge_togetherÚitemsr   ÚProcessExecutionErrorÚ	exit_codeÚLOGÚwarningr   Úlogexc)	r   r   r   r   Úls_cloudcfgÚ
merge_dataÚ
cmd_paramsÚeÚmsgr%   r%   r&   Úhandle,   sH   
þÿýÿþÿÿ



ü€þrD   c                 C   s@   t i ƒ}| D ]}|sqt|t ƒr| |¡ q| t |ƒ¡ q|S )zu
    merge together ConfigObj objects or things that ConfigObj() will take in
    later entries override earlier
    )r   r-   Úmerge)Úobjsr   Úobjr%   r%   r&   r8   ]   s   
r8   )Ú__doc__ÚloggingÚ	itertoolsr   Ú	configobjr   Ú	cloudinitr   r   r   Úcloudinit.cloudr   Úcloudinit.configr   Úcloudinit.config.schemar	   Úcloudinit.settingsr
   r5   r4   r   Ú__annotations__Ú	getLoggerÚ__name__r<   Ústrr6   rD   r8   r%   r%   r%   r&   Ú<module>   s2   üÿ
ü
1