o
    wÚ7e('  ã                   @   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ƒrgi }| D ]O}t |tƒrN| ¡ D ],\}}t |ttfƒs4tdt 	|¡ ƒ‚t |tƒrC| 
|g ¡ |¡ q | 
|g ¡ |¡ q qt |tƒr\||vr[g ||< qtdt 	|¡ ƒ‚|} i }t | tƒr€|  ¡ D ]\}}t |¡||< qr|S tdt 	| ¡ ƒ‚)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)Úgrp_cfgÚ	c_grp_cfgÚiÚkÚvÚgroupsÚgrp_nameÚgrp_members© r   ú;/usr/lib/python3/dist-packages/cloudinit/distros/ug_util.pyÚ_normalize_groups   sF   


ÿÿ
ö
€ÿ
üÿÿr   Nc                 C   s*  t | tƒrBg }|  ¡ D ]3\}}t |ttttfƒr%t |¡r$| 	t|ƒ¡ qt |tƒr4||d< | 	|¡ qt
dt |¡|f ƒ‚|} n
t | tƒrLt | ¡} i }| D ]@}t |ttfƒrlt |¡D ]}|rj||vrji ||< q^qPt |tƒrˆ| dd¡}| |¡p}i }	t |	|g¡||< qPt
dt |¡ ƒ‚|r½i }
| ¡ D ]!\}}i }| ¡ D ]\}}| dd¡ ¡ }|rµ|||< q£||
|< q™|
}d }|rþd|v 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   Úis_truer   r   r   r   r   r
   Ú
uniq_mergeÚpopÚgetÚmergemanydictÚreplacer   ÚcopyÚjoin)Úu_cfgÚdef_user_cfgÚad_ucfgr   r   ÚusersÚuser_configÚuÚnÚprev_configÚc_usersÚunameÚuconfigÚ	c_uconfigÚdef_userÚ
def_configÚ
def_groupsÚparsed_configÚparsed_groupsÚusers_groupsr   r   r   Ú_normalize_usersH   s~   

€
ÿÿ

€þ
ÿÿ€


ÿr?   c                 C   st  | si } i }d| v r4| d r4| d }t |tƒr$d|i}tjdddd nt |tƒs4t dt |¡¡ i }i }z| 	¡ }W n t
yJ   t d¡ Y nw t ||g¡}|  d	g ¡}t |ttfƒrmtjd
t|ƒ› ddd nt |tƒs}t dt |¡¡ g }|r¥t |tƒrŒ| ddi¡ nt |tƒrœt|ƒ dd¡|d< n	t |tƒr¥|d7 }i }d| v r±t| d ƒ}t||ƒ}||fS )NÚuserr   z'user' of type stringz22.2zUse 'users' list instead.)Ú
deprecatedÚdeprecated_versionÚextra_messagez?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.r0   z'users' of type z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   r   Ú	deprecater   ÚLOGÚwarningr   r   Úget_default_userÚNotImplementedErrorr)   r(   Útyper
   r   r   r?   )ÚcfgÚdistroÚold_userÚdistro_user_configÚdefault_user_configÚ
base_usersr   r0   r   r   r   Únormalize_users_groups¤   sh   
ý
ýÿÿ	ý
ý



rP   c                 C   sZ   | s||fS dd„ }t t||  ¡ ƒƒ}|s||fS t|ƒd }|| }| dd ¡ ||fS )Nc                 S   s    | d }|r
d|v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'   )r0   Údefault_nameÚdefault_configrT   Ú	tmp_usersr   rS   r   r   r   Úextract_defaultò   s   rY   )N)NN)Ú	cloudinitr   Úloggingr   r   Ú	getLoggerÚ__name__rE   r   r?   rP   rY   r   r   r   r   Ú<module>   s   

1\N