
    x[h'                     d    S SK r S SKJrJrJr  \ R
                  " \5      rS rSS jr	S r
SS jrg)	    N)	lifecycle
type_utilsutilc                    [        U [        5      (       a  U R                  5       R                  S5      n [        U [        5      (       Ga  0 nU  GH  n[        U[
        5      (       a  UR                  5        H  u  p4[        U[        [        45      (       d"  [        S[        R                  " U5      -  5      e[        U[        5      (       a#  UR                  U/ 5      R                  U5        Mz  UR                  U/ 5      R                  U5        M     M  [        U[        5      (       a  X!;  a  / X'   M  M  [        S[        R                  " U5      -  5      e   Un 0 n[        U [
        5      (       a3  U R                  5        H  u  pg[        R                  " U5      XV'   M     U$ [        S[        R                  " U 5      -  5      e)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""GGIDA%a$55'6)22157 
 "!T**!,,Q3::1=!,,Q3::1= & As##%#%IL &  0J4G4G4JK # ( F'4  %,]]_!H#55kBF &5 M	 N""7+-
 	
    c                    [        U [        5      (       a  / nU R                  5        H  u  p4[        U[        [        [
        [        45      (       a9  [        R                  " U5      (       a  UR                  [        U5      5        Ma  Mc  [        U[        5      (       a  X4S'   UR                  U5        M  [        S[        R                  " U5      < SU< 35      e   Un O+[        U [        5      (       a  [        R                  " U 5      n 0 nU  H  n[        U[        [        45      (       a3  [        R                  " U5       H  nU(       d  M  Xu;  d  M  0 XW'   M     MQ  [        U[        5      (       aG  UR!                  SS5      nUR#                  U5      =(       d    0 n	[        R$                  " X/5      XX'   M  [        S[        R                  " U5      -  5      e   U(       ai  0 n
UR                  5        HQ  u  p0 nUR                  5        H2  u  p4UR'                  SS5      R)                  5       nU(       d  M.  XMU'   M4     XU'   MS     U
nS nU(       a  SU;   a  UR!                  S5      nU(       a  UR+                  5       nUR!                  S5      nUR!                  S/ 5      nUR!                  U0 5      nUR#                  S/ 5      n[        R                  " UU5      nS	R-                  U5      US'   [        R$                  " XU/5      X^'   UR                  5        H  u  pU(       a  X:H  OS
US'   M     U$ )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   %KKMDA!dC455<<??NN3q6* #At$$&	q!!**1-q2  " 	E3		&&u-EkD#;//__[11!EH 2 T**	2A))A,,"K));*DEEH),6,?,?,LN    #kkmNEIIIc3'--/1#$aL ( 'EN ,  He#YYy)
 (,,.L#''/H%))(B7J "IIh3M)--h;M11-LL&)hh|&<M(# #00=9EO  ++-2:U.	 ( Lr   c                 *   U (       d  0 n 0 nSU ;   a  U S   (       av  U S   n[        U[        5      (       a  SU0n[        R                  " SSSS9  OA[        U[        5      (       d,  [
        R                  S[        R                  " U5      5        0 n0 n UR                  5       n[        R                  " X#/5      nU R                  S	/ 5      n[        U[        [        45      (       a#  [        R                  " S
[        U5       3SSS9  OA[        U[        5      (       d,  [
        R                  S[        R                  " U5      5        / nU(       aw  [        U[        5      (       a  UR!                  SS05        ON[        U[        5      (       a  [	        U5      R                  SS5      US'   O[        U[        5      (       a  US-  n0 nSU ;   a  [#        U S   5      n[%        XT5      nXv4$ ! [         a    [
        R                  S5         GNlf = f)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 ,,h-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?Q  
E	

s   G/ /HHc                     U (       d  X4$ S n[        [        X0R                  5       5      5      nU(       d  X4$ [        U5      S   nXE   nUR	                  SS 5        XV4$ )Nc                 2    U S   nU(       a  SU;  a  gUS   $ )N   r"   F )entryconfigs     r   	safe_find"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_defaultra      sa    --! VI{{}56I--	?1D_F
JJy$>r   )N)NN)logging	cloudinitr   r   r   	getLogger__name__rI   r   rB   rT   ra   rX   r   r   <module>rf      s9     1 1!%bNxI\r   