U
    ¯Ad0'  ã                   @   sN   d dl mZ d dl mZmZ e e¡Zdd„ Zddd„Z	dd	„ Z
dd
d„ZdS )é    )Úlog)Ú
type_utilsÚutilc                 C   s  t | tƒr|  ¡  d¡} t | tƒrÐi }| D ] }t |tƒrœ| ¡ D ]X\}}t |ttfƒshtdt 	|¡ ƒ‚t |tƒr†| 
|g ¡ |¡ q@| 
|g ¡ |¡ q@q*t |tƒr¸||krÊg ||< q*tdt 	|¡ ƒ‚q*|} i }t | tƒr|  ¡ D ]\}}t |¡||< qèntdt 	| ¡ ƒ‚|S )Nú,zBad group member type %szUnknown group name type %sz@Group config must be list, dict or string type only but found %s)Ú
isinstanceÚstrÚstripÚsplitÚlistÚdictÚitemsÚ	TypeErrorr   Úobj_nameÚ
setdefaultÚextendÚappendr   Úuniq_merge_sorted)Zgrp_cfgZ	c_grp_cfgÚiÚkÚvÚgroupsZgrp_nameZgrp_members© r   ú;/usr/lib/python3/dist-packages/cloudinit/distros/ug_util.pyÚ_normalize_groups   sB    


ÿÿ


ÿÿÿr   Nc                 C   s>  t | tƒr†g }|  ¡ D ]h\}}t |ttttfƒrJt |¡r~| 	t|ƒ¡ qt |tƒrh||d< | 	|¡ qt
dt |¡|f ƒ‚q|} nt | tƒršt | ¡} i }| D ]„}t |ttfƒrÚt |¡D ]}|r¾||kr¾i ||< q¾q¢t |tƒr| dd¡}| |¡pþi }	t |	|g¡||< q¢t
dt |¡ ƒ‚q¢|rˆi }
| ¡ D ]H\}}i }| ¡ D ](\}}| dd¡ ¡ }|rN|||< qN||
|< q:|
}d }|rd|kr| d¡}|r| ¡ }| d¡}| dg ¡}| |i ¡}| dg ¡}t ||¡}d |¡|d< t |||g¡||< | ¡ D ] \}}|r.||knd	|d< q|S )
NÚnamez(Unmappable user value type %s for key %sÚdefaultzDUser config must be dictionary/list or string  types only and not %sú-Ú_r   r   F)r   r   r   ÚboolÚintÚfloatr   r   Zis_truer   r   r   r   r   r
   Z
uniq_mergeÚpopÚgetÚmergemanydictÚreplacer   ÚcopyÚjoin)Zu_cfgZdef_user_cfgZad_ucfgr   r   ÚusersZuser_configÚuÚnZprev_configZc_usersÚunameZuconfigZ	c_uconfigZdef_userZ
def_configZ
def_groupsZparsed_configZparsed_groupsZusers_groupsr   r   r   Ú_normalize_usersH   sv    


ÿÿ

ÿÿ

ÿr+   c                 C   sp  | si } i }d| krb| d rb| d }t |tƒrBd|i}t d¡ n t |tƒsbt dt |¡¡ i }i }z| ¡ }W n tk
r   t d¡ Y nX t	 
||g¡}|  dg ¡}t |ttfƒrÌt dt|ƒ¡ n t |tƒsìt dt |¡¡ g }|rDt |tƒr| dd	i¡ n6t |tƒr0t|ƒ d	d
¡|d	< nt |tƒrD|d7 }i }d| kr^t| d ƒ}t||ƒ}||fS )NÚuserr   zrDEPRECATED: 'user' of type string is deprecated and will be removed in a future release. Use 'users' list instead.z?Format for 'user' key must be a string or dictionary and not %sziDistro has not implemented default user access. No distribution provided default user will be normalized.r'   zlDEPRECATED: 'users' of type %s is deprecated and will be removed in a future release. Use 'users' as a list.z^Format for 'users' key must be a comma-separated string or a dictionary or a list but found %sr   Tz,defaultr   )r   r   ÚLOGZwarningr   r   r   Zget_default_userÚNotImplementedErrorr   r#   r"   Útyper
   r   r   r+   )ZcfgZdistroZold_userZdistro_user_configZdefault_user_configZ
base_usersr   r'   r   r   r   Únormalize_users_groups¤   s`    
ÿ
ýÿ
ý
ý

r0   c                 C   sZ   | s||fS dd„ }t t||  ¡ ƒƒ}|s2||fS t|ƒd }|| }| dd ¡ ||fS )Nc                 S   s    | d }|rd|krdS |d S )Né   r   Fr   )ÚentryÚconfigr   r   r   Ú	safe_findõ   s    z"extract_default.<locals>.safe_findr   r   )r   Úfilterr   r
   r!   )r'   Zdefault_nameZdefault_configr4   Z	tmp_usersr   r3   r   r   r   Úextract_defaultñ   s    r6   )N)NN)Z	cloudinitr   Zloggingr   r   Z	getLoggerÚ__name__r-   r   r+   r0   r6   r   r   r   r   Ú<module>   s   
1
\M