
    Vh&                        d dl mZ d dlmZmZ d dlmZ d dlmZ d dl	m
Z d dlmZ d dlmZmZ d dlmZ d d	lmZ  e       Zdd
Z G d de      Z G d d      Zy)    )annotations)MappingMutableMapping)Enum)chain)	constants)AnsibleError)	to_nativeto_text)Display)combine_varsc                   d}| rt         j                  j                  |       }|rdt        t	        |            dt        |       d}t         j
                  dvs|rPt         j                  j                  ||       } |s[t         j
                  dk(  sHt        j                  d|z          d}n-t         j
                  d	k(  rt        j                  d
|z         d}|rt        j                  |       | S )N zinvalid character(s) "z" in group name ())neverignoresilentlyz
Replacing zaInvalid characters were found in group names and automatically replaced, use -vvvv to see detailsr   zNot replacing %szWInvalid characters were found in group names but not replaced, use -vvvv to see details)
CINVALID_VARIABLE_NAMESfindallr   setTRANSFORM_INVALID_GROUP_CHARSsubdisplayvvvvwarning)namereplacerforcesilentwarninvalid_charsmsgs          G/home/dcms/DCMS/lib/python3.12/site-packages/ansible/inventory/group.pyto_safe_group_namer%       s     D0088>DKCP]L^D_ahimanoC..6IIU//33HdC!"A"AZ"OLL!34~D22g=LL!3c!9:tDK    c                      e Zd ZdZdZy)InventoryObjectTyper      N)__name__
__module____qualname__HOSTGROUP r&   r$   r(   r(   8   s    DEr&   r(   c                      e Zd ZdZej
                  ZddZd Zd Z	d Z
d Zd Zd	 Zdd
Zd Zd Zed        Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zy)Groupz a group of ansible hosts Nc                    d| _         t        |      | _        g | _        d | _        i | _        g | _        g | _        d | _        d| _	        y )Nr   r)   )
depthr%   r   hosts_hostsvarschild_groupsparent_groups_hosts_cachepriority)selfr   s     r$   __init__zGroup.__init__C   sI    
&t,	
	 r&   c                "    | j                         S Nget_namer;   s    r$   __repr__zGroup.__repr__O       }}r&   c                "    | j                         S r>   r?   rA   s    r$   __str__zGroup.__str__R   rC   r&   c                "    | j                         S r>   )	serializerA   s    r$   __getstate__zGroup.__getstate__U   s    ~~r&   c                $    | j                  |      S r>   )deserialize)r;   datas     r$   __setstate__zGroup.__setstate__X   s    %%r&   c                   g }| j                   D ]!  }|j                  |j                                # d | _        t	        | j
                  | j                  j                         || j                  | j                        }|S )N)r   r6   r8   r3   r4   )
r8   appendrG   r5   dictr   r6   copyr3   r4   )r;   r8   parentresults       r$   rG   zGroup.serialize[   ss    (( 	5F  !1!1!34	5 !'****
 r&   c                   | j                          |j                  d      | _        |j                  dt                     | _        |j                  dd      | _        |j                  dg       | _        d | _        |j                  dg       }|D ]8  }t               }|j                  |       | j                  j                  |       : y )Nr   r6   r3   r   r4   r8   )r<   getr   rO   r6   r3   r4   r5   r1   rJ   r8   rN   )r;   rK   r8   parent_datags        r$   rJ   zGroup.deserializel   s    HHV$	HHVTV,	XXgq)
XXgr*
"5( 	)KAMM+&%%a(	)r&   c                   t        g       }t        t        |             }|r|j                  |        |r"|r| gng }|j                  t        |              |r|j	                  |       t        g       }t        j                  fd|D              D ],  }|j                  |       |s||vsj                  |       . |j                  |       |}|r|rS |S )a  
        Given `rel` that is an iterable property of Group,
        consitituting a directed acyclic graph among all groups,
        Returns a set of all groups in full tree
        A   B    C
        |  / |  /
        | /  | /
        D -> E
        |  /    vertical connections
        | /     are directed upward
        F
        Called on F, returns set of (A, B, C, D, E)
        c              3  6   K   | ]  }t        |        y wr>   )getattr).0rV   rels     r$   	<genexpr>z+Group._walk_relationship.<locals>.<genexpr>   s     /UA3/Us   )	r   rY   addextendupdater   from_iterablerN   difference_update)	r;   r[   include_selfpreserve_orderingseenunprocessedorderednew_unprocessednew_items	    `       r$   _walk_relationshipzGroup._walk_relationshipz   s     2w'$,-OOD! ,tf"GNN74-.KK$!"gO!///U/UU 1##H-$t+x0	1 --d3)K  Nr&   c                $    | j                  d      S )Nr8   ri   rA   s    r$   get_ancestorszGroup.get_ancestors   s    &&77r&   c                &     | j                   di |S )N)r7   rk   )r;   kwargss     r$   get_descendantszGroup.get_descendants   s    &t&&@@@r&   c                f    | j                   t        | j                        | _         | j                   S r>   )r5   r   r4   rA   s    r$   
host_nameszGroup.host_names   s%    ;;djj/DK{{r&   c                    | j                   S r>   )r   rA   s    r$   r@   zGroup.get_name   s    yyr&   c                   d}| |k(  rt        d      || j                  vrV|j                         }| j                         }||v r8t        dt	        |j
                        dt	        | j
                        d      |j                  |        |j                  |       d}| j                  j                  |       t        | j                  dz   |j                  g      |_
        |j                          | j
                  |j                  D cg c]  }|j
                   c}vrB|j                  j                  |        |j                         D ]  }|j                  |        | j                          |S c c}w )	NFzcan't add group to itselfzAdding group 'z' as child to 'z&' creates a recursive dependency loop.Tr)   )	additions)	Exceptionr7   rl   r	   r
   r   r]   ra   rN   maxr3   _check_children_depthr8   	get_hostspopulate_ancestorsclear_hosts_cache)r;   groupaddedstart_ancestorsnew_ancestorsrV   hs          r$   add_child_groupzGroup.add_child_group   s~   5=788 ))) $113O ..0M%"pyz  {E  {E  qF  HQ  RV  R[  R[  H\  $]  ^  ^d#++O<E$$U+ tzzA~u{{;<EK '') yy1D1D EA EE##**40* BA((=(AB ""$ !Fs   E:c                   | j                   }| j                   }t        g       }t        | j                        }|r|j                  |       |dz  }|j	                         }t        g       }|D ]4  }|j                   |k  s||_         |j                  |j                         6 ||z
  t        |      kD  r!t        dt        | j                        z        |ry y )Nr)   z5The group named '%s' has a recursive dependency loop.)	r3   r   r7   r_   rP   lenr	   r
   r   )r;   r3   start_depthrd   re   
to_processrV   s          r$   rw   zGroup._check_children_depth   s    

jj2w$++,KK$QJE$))+Jb'K 777U?#AG&&q~~67 {"SY."#Z]fgkgpgp]q#qrr r&   c                    d}|j                   | j                  vrc| j                  j                  |       | j                  j                  |j                          |j                  |        | j                          d}|S NFT)r   rq   r4   rN   r5   r]   	add_grouprz   )r;   hostr|   s      r$   add_hostzGroup.add_host   s_    99DOO+JJd#KKOODII&NN4 ""$Er&   c                    d}|j                   | j                  v rc| j                  j                  |       | j                  j                  |j                          |j                  |        | j                          d}|S r   )r   rq   r4   remover5   remove_grouprz   )r;   r   removeds      r$   remove_hostzGroup.remove_host   sc    99'JJd#KKtyy)d#""$Gr&   c                   |dk(  r| j                  t        |             y || j                  v rKt        | j                  |   t              r.t        |t
              rt        | j                  ||i      | _        y || j                  |<   y )Nansible_group_priority)set_priorityintr6   
isinstancer   r   r   )r;   keyvalues      r$   set_variablezGroup.set_variable   si    **c%j)diiJtyy~~$NS]^celSm(S%LA	!&		#r&   c                J    d | _         | j                         D ]	  }d |_          y r>   )r9   rl   )r;   rV   s     r$   rz   zGroup.clear_hosts_cache  s)     ##% 	"A!AN	"r&   c                \    | j                   | j                         | _         | j                   S r>   )r9   
_get_hostsrA   s    r$   rx   zGroup.get_hosts
  s)    $ $ 1D   r&   c                    g }i }| j                  dd      D ]L  }|j                  }|D ]9  }||vsd||<   | j                  dk(  r|j                  r)|j	                  |       ; N |S )NT)rb   rc   r)   all)ro   r4   r   implicitrN   )r;   r4   rd   kid	kid_hostskks         r$   r   zGroup._get_hosts  s{    ''TT'R 	%C		I %T> DHyyE)bkk LL$%	% r&   c                6    | j                   j                         S r>   )r6   rP   rA   s    r$   get_varszGroup.get_vars  s    yy~~r&   c                D    	 t        |      | _        y # t        $ r Y y w xY wr>   )r   r:   	TypeError)r;   r:   s     r$   r   zGroup.set_priority!  s$    	MDM 		s    	r>   )FF)r*   r+   r,   __doc__r(   r.   	base_typer<   rB   rE   rH   rL   rG   rJ   ri   rl   ro   propertyrq   r@   r   rw   r   r   r   rz   rx   r   r   r   r/   r&   r$   r1   r1   =   s    $#))I
 &")%N8A  
!Fs&'"! r&   r1   N)_FF)
__future__r   collections.abcr   r   enumr   	itertoolsr   ansibler   r   ansible.errorsr	   +ansible.module_utils.common.text.convertersr
   r   ansible.utils.displayr   ansible.utils.varsr   r   r%   r(   r1   r/   r&   r$   <module>r      sF   " # 3   " ' J ) +
)0$ 
i ir&   