U
    L¬÷d('  ã                   @   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   s€  | si } i }d| krh| d rh| d }t |tƒrHd|i}tjdddd n t |tƒsht 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jd
t|ƒ› ddd n t |tƒsüt dt |¡¡ g }|rTt |tƒr| ddi¡ n6t |tƒr@t|ƒ dd¡|d< nt |tƒrT|d7 }i }d| krnt| d ƒ}t||ƒ}||fS )NÚuserr   z'user' of type stringz22.2zUse 'users' list instead.)Z
deprecatedZdeprecated_versionZ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.r'   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   Z	deprecater   ÚLOGZwarningr   r   Zget_default_userÚNotImplementedErrorr#   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¤   sf    
ý
ýÿ
ý
ý

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
\N