
    x[h'                     `    d dl Z d dlmZmZmZ  e j
                  e      Zd ZddZ	d Z
ddZy)	    N)	lifecycle
type_utilsutilc                 <   t        | t              r| j                         j                  d      } t        | t              ri }| D ]  }t        |t
              r|j                         D ]  \  }}t        |t        t        f      s!t        dt        j                  |      z        t        |t              r"|j                  |g       j                  |       o|j                  |g       j                  |        t        |t              r||vsg ||<   t        dt        j                  |      z         |} i }t        | t
              r2| j                         D ]  \  }}t        j                  |      ||<    |S t        dt        j                  |       z        )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_memberss           ;/usr/lib/python3/dist-packages/cloudinit/distros/ug_util.py_normalize_groupsr      s   '3--/'','4 	 	A!T"GGI 
>DAq%a$5'6)22157 
 "!T*!,,Q3::1=!,,Q3::1=
> As#I%#%IaL0J4G4G4JK #	( F'4 %,]]_ 	C!Hk#55kBF8	C M	 N""7+-
 	
    c                    t        | t              rg }| j                         D ]  \  }}t        |t        t        t
        t        f      r1t        j                  |      s<|j                  t        |             Wt        |t              r||d<   |j                  |       ~t        dt        j                  |      d|       |} n%t        | t              rt        j                  |       } i }| D ]  }t        |t        t        f      r(t        j                  |      D ]  }|s||vsi ||<    At        |t              rB|j!                  dd      }|j#                  |      xs i }	t        j$                  |	|g      ||<   t        dt        j                  |      z         |rci }
|j                         D ]L  \  }}i }|j                         D ]-  \  }}|j'                  dd      j)                         }|s)|||<   / ||
|<   N |
}d }|rd|v r|j!                  d      }|r|j+                         }|j!                  d      }|j!                  dg       }|j!                  |i       }|j#                  dg       }t        j                  ||      }d	j-                  |      |d<   t        j$                  |||g      ||<   |j                         D ]  \  }}|r||k(  nd
|d<    |S )NnamezUnmappable user value type z	 for key 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_groupss                       r   _normalize_usersrB   I   s   %KKM 	DAq!dC45<<?NN3q6*At$&	q!!**1-q2 	 	E3	&&u-E kD#;/__[1 "%!E!H" T*	2A))A,,"K));*DEE!H),6,?,?,LN   #kkm 	'NE7I %1IIc3'--/#$IaL% 'GEN	'  He#YYy)
 (,,.L#''/H%))(B7J "IIh3M)--h;M11-LL&)hh|&<M(# #00z=9E(O  ++- Fw2:Uh.	F Lr   c                    | si } i }d| v rr| d   rm| d   }t        |t              rd|i}t        j                  ddd       n;t        |t              s+t
        j                  dt        j                  |             i }i }	 |j                         }t        j                  ||g      }| j                  d	g       }t        |t        t        f      r%t        j                  d
t        |       dd       n;t        |t              s+t
        j                  dt        j                  |             g }|rht        |t              r|j!                  ddi       nDt        |t              rt	        |      j                  dd      |d<   nt        |t              r|dz  }i }d| v rt#        | d         }t%        ||      }||fS # t        $ r t
        j                  d       Y Nw xY w)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.r3   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,   r+   typer   r   r   rB   )cfgdistroold_userdistro_user_configdefault_user_config
base_usersr   r3   s           r   normalize_users_groupsrT      s   
 H}Vv;h$)H2#)9
 Hd+KK##H-
 H 
#446 ,,h8J-KL"%J*tSk*)$z*:);<%2	

 
T+6
+	

 
j$'vy12
D)$($4$8$8D$IJy!
C(*$JF3"3x=1Z)<=E6?Q  
E	

s    F= =GGc                     | s||fS d }t        t        || j                                     }|s||fS t        |      d   }||   }|j	                  dd        ||fS )Nc                 $    | d   }|rd|vry|d   S )N   r"   F )entryconfigs     r   	safe_findz"extract_default.<locals>.safe_find   s#    q&0i  r   r   r"   )r   filterr   r   r*   )r3   default_namedefault_configr[   	tmp_usersr!   rZ   s          r   extract_defaultr`      sk    n--! VIu{{}56In--	?1Dt_F
JJy$&>r   )N)NN)logging	cloudinitr   r   r   	getLogger__name__rI   r   rB   rT   r`   rX   r   r   <module>re      s;     1 1g!%bNxI\r   