
    Vhz                    b   d dl mZ d dlZd dlZd dlmZ d dlmZmZm	Z	 d dl
mZ d dlmZ d dlmZ d dlmZmZmZmZmZ 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% d dl&m'Z'm(Z(m)Z) d dl*m+Z+ d dl,m-Z-m.Z. d dl/m0Z0m1Z1 d dl2m3Z3  e%       Z4d Z5 G d d      Z6 G d de      Z7y)    )annotationsN)defaultdict)MappingMutableMappingSequence)sha1)UndefinedError)	constants)AnsibleErrorAnsibleParserErrorAnsibleUndefinedVariableAnsibleFileNotFoundAnsibleAssertionError)Host)sort_groupsget_group_vars)to_text)	text_type)	FactCache)Templar)Display)combine_varsload_extra_varsload_options_vars)wrap_var)namespace_factsclean_facts)get_vars_from_inventory_sourcesget_vars_from_path)warn_if_reservedc           	         | yt        | t              s| g}n| }|D ]-  }t        |t              rt        d| dt	        |       d       |S )z
    Ensures that vars contained in the parameter passed in are
    returned as a list of dictionaries, to ensure for instance
    that vars loaded from a file conform to an expected state.
    Nz^variable files must contain either a dictionary of variables, or a list of dictionaries. Got: z ())
isinstancelistr   r   type)adataitems      D/home/dcms/DCMS/lib/python3.12/site-packages/ansible/vars/manager.pypreprocess_varsr*   /   su     	y4 s W$/  KL  NR  ST  NU   V  W  WW K    c                  |    e Zd Z eg d      ZddZd Zd Zed        Z	d Z
	 	 ddZdd	Zd
 Zd Zd Zd Zd Zy)VariableManager)plugins_by_groupgroups_plugins_playgroups_plugins_inventorygroups_inventoryall_plugins_playall_plugins_inventoryall_inventoryNc                   t        t              | _        t        t              | _        t        t              | _        t        t              | _        t        t              | _        || _        || _        d | _	        dt        t        j                  d            j                         z  | _        t        |      | _        | j                   j#                  dd      }t%        |du xs |      | _        t)        | j                        | _        	 t+               | _        y # t.        $ r/}t0        j3                  t5        |             i | _        Y d }~y d }~ww xY w)N__omit_place_holder__%s@   basedirFloader)r   dict_nonpersistent_fact_cache_vars_cache_extra_vars_host_vars_files_group_vars_files
_inventory_loader	_hostvarsr   osurandom	hexdigest_omit_tokenr   _options_varsgetboolsafe_basedirr   r   _fact_cacher   displaywarningr   )selfr:   	inventoryversion_infor8   es         r)   __init__zVariableManager.__init__I   s   )4T):&&t,&t, +D 1!,T!2#4tBJJrN7K7U7U7WW.|< $$((E: E!1!<W= +$,,?	"({D 	" OOGAJ'!D		"s   D 	E%%EEc                    t        | j                  | j                  | j                  | j                  | j
                  | j                  | j                  | j                  | j                  | j                  
      }|S )N)

fact_cachenp_fact_cache
vars_cache
extra_varshost_vars_filesgroup_vars_files
omit_tokenoptions_varsrP   rK   )r;   rL   r<   r=   r>   r?   r@   rG   rH   rA   rK   rO   r'   s     r)   __getstate__zVariableManager.__getstate__g   sk    ''88'''' 11!33''++oo**
 r+   c           	        |j                  dt        t                    | _        |j                  dt        t                    | _        |j                  dt        t                    | _        |j                  dt                     | _        |j                  dt        t                    | _        |j                  dt        t                    | _        |j                  ddt        t        j                  d	            j                         z        | _        |j                  d
d       | _        |j                  dt                     | _        |j                  dd      | _        d | _        d | _        y )NrU   rV   rW   rX   rY   rZ   r[   r6   r7   rP   r\   rK   F)rI   r   r;   rL   r<   r=   r>   r?   r@   r   rD   rE   rF   rG   rA   rH   rK   rB   rC   r]   s     r)   __setstate__zVariableManager.__setstate__v   s   88L+d2CD)-/;tCT)U&88L+d2CD88L$&9 $):K<M N!%*<k$>O!P88L2KdSUS]S]^`SaNbNlNlNn2no((;5!XXndf= HH^U;r+   c                    | j                   S N)r>   rO   s    r)   rX   zVariableManager.extra_vars   s    r+   c                    || _         y rb   )rA   )rO   rP   s     r)   set_inventoryzVariableManager.set_inventory   s	    #r+   c
           
        	"#$%&'( |rt         j                  dd       t         j                  d       t               }
 j	                  ||||||      }i %%fd"g ' j
                  r j                  j                         g'|rC|j                  D ]4  }|j                  s "|
|j                         d|j                  z        }
6 |rt        j                  dk(  r|j                         'nVt        j                  d	v r|j                         d
   g'n/t        j                  dk7  rt        dt        j                  z        |j                   g|s|j"                  t        j$                  v rI "|
|j                   j                  |j'                               d|j                   j                  z        }
|r j(                  j*                  j-                  d      &t/        |j1                         D cg c]  }|j                  dvs| c}      ( fd} 	fd#"' 	fd$&fd}#&fd}$&fd}(fd}#(fd}$(fd}"#$(fd}t        j2                  D ]k  }| j4                  v rCt         j                  d|d|j                          "|
 t7               |          d|z        }
Tt         j9                  d|z         m  "|
|j;                         d|z        }
 "|
 #|g      d|z        }
 "|
 $|g      d|z        }
	 t=         j>                  j-                  |j                  i             }|
tA        |      z  }
t        jB                  r "|
t=        tE        |            d       }
n% "|
t=        d!|j-                  d!i       i      d       }
|r "|
|j;                         d"      }
|jI                         }	 |D ]  }tK        |
 jL                        }tK        ||      }tO         j                  |#      }|}tQ        |tR              s|g}	 |D ]  }|jU                  |      }tQ        |tV              st        d$|z        	 |j                         } j                  jY                  |d%|      }t[         j                  j]                  |d&d'(            } | | D ]  }! "|
|!d)|z        }
  n t         jg                  d.|z          	 |j                  D ]7  }|j                  s "|
|j;                  d1d&2      d3|j                  z        }
9 |ro|j                   rK "|
|j                   j;                  |j'                         d1d12      d4|j                   j                  z        }
 "|
|j;                         d5      }
|rp "|
 jl                  j-                  |jo                         t                     d6      }
 "|
 jp                  j-                  |j                  t                     d7      }
|rU|j                   r1 "|
|j                   js                  |j'                               d8      }
 "|
|ju                         d9      }
 "|
 jL                  d:      }
tw        |
jy                                 "|
|d;      }
|r|jz                  |
d<<   |s|r|
j}                         |
d%<   t         j                  d=       t        j~                  rt        j                  |
%      S |
S c c}w # tF        $ r Y lw xY w# t^        $ r Y t`        $ r  w xY w# tb        td        f$ rm |O j>                  j-                  |j                  t                     j-                  d*      r|te        d+|z  |,      t         jg                  d-|z         Y w xY w# th        $ r ta        d/|d0tk        |            w xY w)>an  
        Returns the variables, with optional "context" given via the parameters
        for the play, host, and task (which could possibly result in different
        sets of variables being returned due to the additional context).

        The order of precedence is:
        - play->roles->get_default_vars (if there is a play context)
        - group_vars_files[host] (if there is a host context)
        - host_vars_files[host] (if there is a host context)
        - host->get_vars (if there is a host context)
        - fact_cache[host] (if there is a host context)
        - play vars (if there is a play context)
        - play vars_files (if there's no host context, ignore
          file names that cannot be templated)
        - task->get_vars (if there is a task context)
        - vars_cache[host] (if there is a host context)
        - extra vars

        ``_hosts`` and ``_hosts_all`` should be considered private args, with only internal trusted callers relying
        on the functionality they provide. These arguments may be removed at a later date without a deprecation
        period and without warning.
        zU`VariableManager.get_vars`'s argument `include_delegate_to` has no longer any effect.z2.19)versionzin VariableManager get_vars())playhosttaskinclude_hostvars_hosts
_hosts_allc                b    |i k(  r| S t         j                  r|D ]  }||<   	 t        | |      S )z
            Wrapper function to update var sources dict and call combine_vars()

            See notes in the VarsWithSources docstring for caveats and limitations of the source tracking
            )CDEFAULT_DEBUGr   )r'   new_datasourcekey_vars_sourcess       r)   _combine_and_trackz4VariableManager.get_vars.<locals>._combine_and_track   s>     2~# 0C)/M#&0h//r+   zrole '%s' defaultsall)bottomplaybook_dirr   topzUnknown playbook vars logic: %s)	dep_chain)rv   c                   i }	 | j                  j                  ||      }|S # t        $ r 	 |D ]O  }t        |t              r|| j                  |j                        z  }2|| j                  |j                        z  }Q Y |S # t        $ rW t        | d      r%t        d| j                  d| j                        t        d| j                  d| j                        w xY ww xY w)NrunzCannot use v1 type vars plugin z from zInvalid vars plugin )get_varsrB   AttributeErrorr#   r   get_host_varsnamer   hasattrr   
_load_name_original_path)pluginpathentitiesr'   entityrO   s        r)   _get_plugin_varsz2VariableManager.get_vars.<locals>._get_plugin_vars   s   ~!??4<<xHD  & ~
~&. KF)&$7 $(<(<V[[(I I $(=(=fkk(J J	K  * ~"651".^d^o^oqw  rG  rG  0H  #I  I".SYSdSdflf{f{/|"}}	~~s   $ 	C)ABA C%%C)c                \    t        j                  j                  j                  |       S )z) merges all entities by inventory source )r   rB   rA   _sources)r   rO   stages    r)   _plugins_inventoryz4VariableManager.get_vars.<locals>._plugins_inventory   s$    6t||T__E]E]_ginoor+   c           
     `    i }D ]%  } |t        j                  ||       d|z        }' |S )z& merges all entities adjacent to play z	path '%s')r   rB   )r   r'   r   ru   basedirsrO   r   s      r)   _plugins_playz/VariableManager.get_vars.<locals>._plugins_play   sI    $ AD-d4Ft||UY[cej4kmx{m  ADAr+   c                 $     j                         S rb   )r}   )	all_groups   r)   r4   z/VariableManager.get_vars.<locals>.all_inventory  s     ))++r+   c                       g      S rb    )r   r   s   r)   r3   z7VariableManager.get_vars.<locals>.all_plugins_inventory	  s    )9+66r+   c                       g      S rb   r   )r   r   s   r)   r2   z2VariableManager.get_vars.<locals>.all_plugins_play  s    $i[11r+   c                     t               S )z  gets group vars from inventory )r   )host_groupss   r)   r1   z2VariableManager.get_vars.<locals>.groups_inventory  s    %k22r+   c                             S )z/ gets plugin sources from inventory for groups r   )r   r   s   r)   r0   z:VariableManager.get_vars.<locals>.groups_plugins_inventory  s    )+66r+   c                             S )z* gets plugin sources from play for groups r   )r   r   s   r)   r/   z5VariableManager.get_vars.<locals>.groups_plugins_play  s    $[11r+   c                 ~    i } D ]4  } | |    |      d|z        | |<    | |    |      d|z        | |<   6 | S )z
                    merges all plugin sources by group,
                    This should be used instead, NOT in combination with the other groups_plugins* functions
                zinventory group_vars for '%s'zplaybook group_vars for '%s'r   )r'   groupru   r   r   r   s     r)   plugins_by_groupsz3VariableManager.get_vars.<locals>.plugins_by_groups  st    
 ( @E"4T%[BTUZB[]|  @E  ^E  #FDK"4T%[-PUBVXvy~X~"DK@ r+   zCalling z to load vars for z!group vars, precedence entry '%s'z.Ignoring unknown variable precedence entry: %szhost vars for '%s'zinventory host_vars for '%s'zplaybook host_vars for '%s'factsansible_localz	play vars)r:   	variableszInvalid vars_files entry found: %r
vars_files entries should be either a string type or a list of string types after template expansionvarsTvaulted)unsafecachezplay vars_files from '%s'module_setupzTan undefined variable was found when attempting to template the vars_files item '%s')objz4skipping vars_file '%s' due to an undefined variablezRead vars_file '%s'zJError while reading vars files - please supply a list of file names. Got 'z
' of type F)include_paramsonly_exportszrole '%s' exported varszrole '%s' all varsz	task varsinclude_varsset_factzrole paramszinclude paramsz
extra varsz
magic varsenvironmentzdone with get_vars())BrM   
deprecateddebugr;   _get_magic_variablesrK   rB   get_basedirrolespublicget_default_varsr   ro   PLAYBOOK_VARS_ROOTget_search_pathr   _roleaction_ACTION_INCLUDE_ROLEget_dep_chainrA   groupsrI   r   
get_groupsVARIABLE_PRECEDENCE_ALLOWEDlocalsrN   r}   r   rL   r   INJECT_FACTS_AS_VARSr   KeyErrorget_vars_filesr   r>   r   r#   r$   templater   path_dwim_relative_stackr*   load_from_filer   r   r	   r   vvv	TypeErrorr%   r=   get_namer<   get_role_paramsget_include_paramsr    keysr   copyrp   VarsWithSourcesnew_vars_with_sources))rO   rh   ri   rj   rk   include_delegate_to	use_cacherl   rm   r   all_varsmagic_variablesrolegr   r4   r3   r2   r1   r0   r/   r   entryr   
vars_filesvars_file_item	temp_varstemplarvars_file_list	vars_fileplay_search_stack
found_filer'   r(   ru   r   r   rt   r   r   r   s)   `        `                        @@@@@@@r)   r}   zVariableManager.get_vars   s   0 g  
 	56633-! 4 
 	0  0023H

 w;;1(D<Q<Q<SUilpluluUuvHw ##u,//1%%)CC 002156%%."#DqG[G[#[\\ zz%44;;!BXBX3X-h

8S8S^b^p^p^r8S8s  vJ  MQ  MW  MW  M\  M\  v\  ]..2259I%$//2C&]QqvvU\G\q&]^K&p,72372	 .. `DMM)MMeTYY"WX1(OFHUO<MOruzOz{HOO$TX]$^_` *(DMMOEY\`E`aH)(4Fv4NPnquPuvH)(M4&4IKhkoKopH !1!1!5!5dii!DEOE22 ))1(H[QVEW<XZabH  2(HoW\W`W`aprtWuEv<w  zA   BH )(DMMO[QH,,.J8a&0 4HN !-Xt7G7G HI ,Y HI%T\\YOG
 &4N%nd;*8)9
%)7 &I(/(8(8(CI$.y($C&2%VXa%b'" !"
&484H4H4J 1-1\\-R-RSdflnw-x
'6t||7R7RS]fjr{7R7|'}#'#304 %3EhPTVqt}V}3~% %&> KK 5 FGi4Ht 

 [;;1(DMMY^mqM<r  uN  QU  QZ  QZ  uZ   [H[ zz-h

8K8KDL^L^L`qv  FK8K  9L.BTZZ__.TV)(DMMO[QH )(D4D4D4H4HZ^Z`4acqrH)(D4R4R4V4VW[W`W`bfbh4ikuvH  zz-h

8R8RSWSeSeSg8hjwx)(D4K4K4MO_`H &h0@0@,O 	) &hN &*&6&6H]# 4'}}HV,-??"88=QQOg '^v  Z $7 ) (#5 & %&*,DE %+0@0@0D0DTYYPTPV0W0[0[\j0kpt  qA":  <R=K<LQ_#a a
 $KK(^ao(op$%  a(BLdS]N^*` a aasv   <\\B\	 A^1 *4\2A*\	\2^1 		\\	\/"\2%
\//\22A8^.*^1 -^..^1 1$_c           	        i }t         j                  j                  | j                  j	                               |d<   t
        j                  |d<   t        j                  |d<   |rt        |j                  D 	ch c]'  }|j                         D ]  }	|	j                          ) c}	}      }
|j                  D cg c]  }|j                          }}t        t        |
|z               |d<   ||d<   |
|d<   |d   |d<   |j                         |d<   |r|j                  r|j                  j                  d	
      |d<   |j                  j                  |d<   t!        |j                  j"                        |d<   |j                  j$                  |d<   |j                  j                         |d<   | j&                  0| j&                  j)                         |d<   |rt+        | j                        }|j,                  s|j/                  |j0                        rd}n|j0                  xs d}|s4| j&                  j3                  |d      D cg c]  }|j4                   }}|s1| j&                  j3                         D cg c]  }|j4                   }}|dd |d<   |d   D cg c]  }||j6                  vs| c}|d<   |D cg c]  }||j6                  vs| c}|d<   |d   |d<   | j8                  |d<   | j:                  j=                         D ]
  \  }}|||<    | j>                  |r| j>                  |d<   |S c c}	}w c c}w c c}w c c}w c c}w c c}w )z
        Returns a dictionary of so-called "magic" variables in Ansible,
        which are special variables we set internally for use.
        rx   ansible_playbook_pythonansible_config_fileansible_role_namesansible_play_role_namesansible_dependent_role_names
role_namesansible_play_nameF)include_role_fqcn	role_name	role_path	role_uuidansible_collection_nameansible_role_nameNr   r9   rv   T)patternignore_restrictionsansible_play_hosts_allansible_play_hostsansible_play_batch
play_hostsomithostvars) rD   r   abspathrB   r   sys
executablero   CONFIG_FILEr$   r   get_all_dependenciesr   setr   
_role_pathr   _uuid_role_collectionrA   get_groups_dictr   	finalizedis_templatehosts	get_hostsr   _removed_hostsrG   rH   itemsrC   )rO   rh   ri   rj   rk   rl   rm   r   rddependency_role_namesplay_role_namesr   r   hxoptionoption_values                     r)   r   z$VariableManager._get_magic_variables  s2    	$&GGOODLL4L4L4N$O	.!/2~~	+,+,==	'($(

)m1TUTjTjTl)mq!**,)m,)m$n!59ZZ@qzz|@O@ /337L7^3_.`I*+ 4CI/0 9NI45 '00I&JIl#-1]]_I)*zz)-)<)<u)<)U	+&)-)>)>	+&)24::3C3C)D	+&7;zz7R7R	34151D1D1F	-.??&"&//"A"A"CIh!6~~'*=*=djj*I#G"jj1EG!26//2K2KT[qu2K2v!wQ!&&!wJ!w.2oo.G.G.IJaffJFJ6@m	23>GH`>a  3Cefnr  oB  oB  fB1  3C	./>D2eQUQdQdHd12e	./ +44H*I	,' !,,	&$($6$6$<$<$> 	- FL ,If	- >>%*:$(NNIj!q *n@D "xJ 3C2es0   9,M
;M	MM&M:MMMc                   i }d}|j                   r|j                  |j                   d      }|| j                  k7  r|st        d|j                   z        | j                  j                  |      }|A| j                  j                  dd      D ]  }|j                  |k(  s|} n t        |      }|| j                  |j                         ||d      i|d	<   |j                  d
      |d	   |   d
<   ||fS )zGet the delegated_vars for an individual task invocation, which may be in the context
        of an individual loop iteration.

        Not used directly be VariableManager, but used primarily within TaskExecutor
        NF)fail_on_undefinedz.Empty hostname produced from delegate_to: "%s"T)ignore_limitsr   )r   )rh   ri   rj   rk   ansible_delegated_varsinventory_hostname)delegate_tor   rG   r   rA   get_hostr   addressr   r}   get_playrI   )rO   r   rj   r   delegated_varsdelegated_host_namedelegated_hostr  s           r)   get_delegated_vars_and_hostnamez/VariableManager.get_delegated_vars_and_hostname  s4    "")"2"243C3CW\"2"] #d&6&66*&'WZ^ZjZj'jkk!%!9!9:M!N!)!__66T_c6d H 99(;;-.N!H *.3F)G (!]]_+!)-	 *7 *<78 gpfsfs  uI  gJ789LMNbc222r+   c                <    | j                   j                  |d       y)z-
        Clears the facts for a host
        N)rL   pop)rO   hostnames     r)   clear_factszVariableManager.clear_facts)  s     	Xt,r+   c                V   t        |t              st        dt        |      z        t	        |j                                	 | j                  |   }t        |t              s$t        dj                  |t        |                  ||z  }|| j                  |<   y# t        $ r |}Y w xY w)O
        Sets or updates the given facts for a host in the fact cache.
        zIthe type of 'facts' to set for host_facts should be a Mapping but is a %szCThe object retrieved for {0} must be a MutableMapping but was a {1}N)r#   r   r   r%   r    r   rL   r   r   formatr   )rO   ri   r   
host_caches       r)   set_host_factszVariableManager.set_host_facts/  s    
 %)'(svz  |A  wB  )B  C  C&
	 ))$/J
 j.9 !))/d:6F)GI I %J ",  	J	s   B B('B(c                    t        |t              st        dt        |      z        t	        |j                                	 | j                  |xx   |z  cc<   y# t        $ r || j                  |<   Y yw xY w)r  zRthe type of 'facts' to set for nonpersistent_facts should be a Mapping but is a %sN)r#   r   r   r%   r    r   r<   r   )rO   ri   r   s      r)   set_nonpersistent_factsz'VariableManager.set_nonpersistent_factsG  s    
 %)'(|  @D  EJ  @K  )K  L  L&	9**40E90 	938D**40	9s   A A54A5c                ^   t        |g       || j                  vrt               | j                  |<   || j                  |   v rYt        | j                  |   |   t              r9t        |t              r)t        | j                  |   ||i      | j                  |<   y|| j                  |   |<   y)z<
        Sets a value in the vars_cache for a host.
        N)r    r=   r;   r#   r   r   )rO   ri   varnamevalues       r)   set_host_variablez!VariableManager.set_host_variableU  s    
 	'#t'''%)VDT"d&&t,,D<L<LT<RSZ<[]k1lq{  }B  DR  rS%1$2B2B42H7TYJZ%[DT".3DT"7+r+   )NNN)	NNNTFTNNrj   )NN)__name__
__module____qualname__	frozensetr   rS   r^   r`   propertyrX   re   r}   r   r  r  r  r  r#  r   r+   r)   r-   r-   D   sm     X YH"<    $ uy5;m^	EN&3P-,094r+   r-   c                  h    e Z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)r   a"  
    Dict-like class for vars that also provides source information for each var

    This class can only store the source for top-level vars. It does no tracking
    on its own, just shows a debug message with the information that it is provided
    when a particular var is accessed.
    c                2    t        |i || _        i | _        y)z Dict-compatible constructor N)r;   r'   sources)rO   argskwargss      r)   rS   zVarsWithSources.__init__k  s    $)&)	r+   c                $     | |      }||_         |S )z@ Alternate constructor method to instantiate class with sources )r+  )clsr'   r+  vs       r)   r   z%VarsWithSources.new_vars_with_sourcesp  s     I	r+   c                :    | j                   j                  |d       S rb   )r+  rI   rO   rs   s     r)   
get_sourcezVarsWithSources.get_sourcew  s    ||T**r+   c           	         | j                   |   }t        j                  d|d| j                  j	                  |d             |S )Nz
variable 'z' from source: unknown)r'   rM   r   r+  rI   )rO   rs   vals      r)   __getitem__zVarsWithSources.__getitem__z  s7    iindll>N>NsT]>^_`
r+   c                "    || j                   |<   y rb   r'   )rO   rs   r"  s      r)   __setitem__zVarsWithSources.__setitem__  s    		#r+   c                    | j                   |= y rb   r9  r2  s     r)   __delitem__zVarsWithSources.__delitem__  s    IIcNr+   c                ,    t        | j                        S rb   )iterr'   rc   s    r)   __iter__zVarsWithSources.__iter__  s    DIIr+   c                ,    t        | j                        S rb   )lenr'   rc   s    r)   __len__zVarsWithSources.__len__  s    499~r+   c                8    | j                   j                  |      S rb   )r'   __contains__r2  s     r)   rD  zVarsWithSources.__contains__  s    yy%%c**r+   c                    t         j                  | j                  j                         | j                  j                               S rb   )r   r   r'   r   r+  rc   s    r)   r   zVarsWithSources.copy  s-    44TYY^^5Et||GXGXGZ[[r+   c                    t        |t              r-| j                  j                         }|j	                  |       |S t
        S rb   )r#   r   r'   r   updateNotImplementedrO   othercs      r)   __or__zVarsWithSources.__or__  s2    e^,		 AHHUOHr+   c                    t        |t              r>| j                         }|j                  |       |j                  | j                         |S t
        S rb   )r#   r   	__class__rG  r'   rH  rI  s      r)   __ror__zVarsWithSources.__ror__  s>    e^, AHHUOHHTYYHr+   c                P    | j                   j                  |       | j                   S rb   )r'   rG  )rO   rJ  s     r)   __ior__zVarsWithSources.__ior__  s    		yyr+   N)r$  r%  r&  __doc__rS   classmethodr   r3  r7  r:  r<  r?  rB  rD  r   rL  rO  rQ  r   r+   r)   r   r   c  sX    
  ++\r+   r   )8
__future__r   rD   r   collectionsr   collections.abcr   r   r   hashlibr   jinja2.exceptionsr	   ansibler
   ro   ansible.errorsr   r   r   r   r   ansible.inventory.hostr   ansible.inventory.helpersr   r   +ansible.module_utils.common.text.convertersr   ansible.module_utils.sixr   ansible.vars.fact_cacher   ansible.templater   ansible.utils.displayr   ansible.utils.varsr   r   r   ansible.utils.unsafe_proxyr   ansible.vars.cleanr   r   ansible.vars.pluginsr   r   ansible.vars.reservedr    rM   r*   r-   r   r   r+   r)   <module>rg     s|   $ # 	 
 # = =  , " B  B ' A ? . - $ ) O O / ; T 2
)*\4 \4~An Ar+   