
    Vh                    j   d dl mZ d dlZd dlZd dlZd dl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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 m!Z! d dl"m#Z#m$Z$ d dl%m&Z&m'Z' d dl(m)Z) d dl*m+Z+ d dl,m-Z-m.Z.m/Z/  e)       Z0d Z1 G d d      Z2 G d d      Z3 G d de3      Z4y)    )annotationsN)copy)cache)UndefinedError)	constants)context)AnsibleErrorAnsibleParserErrorAnsibleUndefinedVariableAnsibleAssertionError)string_types)boolean)to_text)
DataLoader)	AttributeFieldAttributeConnectionFieldAttributeNonInheritableFieldAttribute)module_loaderaction_loader)_get_collection_metadataAnsibleCollectionRef)Display)Sentinel)combine_varsisidentifierget_unique_idc           	     4   dt         t        fddi}g }t        j                  }t	        | t
              xr d| v xr t        |       dk(  }|rH|sFdj                  t        t        |                   }|j                  dj                  |             n=|r:|r|j                  d	       t	        | d   t
              s%|j                  d
j                  | d                nt        | d   j                               t        |j                               z
  }|r/|j                  dj                  dj                  |                   g }	|j                         D ]B  \  }
}|
| d   vr| d   |
   }t	        ||d         r&|	j                  |
d|d|d   d       D |	r/|j                  dj                  dj                  |	                   |rF|j                  ddj                  |             t        j!                  dj                  |             y y )Nextend_grouplist)types	errortypemetadata   , z7The only expected key is metadata, but got keys: {keys})keysz-The group contains multiple metadata entries.z0The metadata is not a dictionary. Got {metadata})r#   z*The metadata contains unexpected keys: {0}r!   z is z (expected type r"   )z/The metadata contains unexpected key types: {0}r   zNInvalid metadata was found for action_group {0} while loading module_defaults. )r    r   CVALIDATE_ACTION_GROUP_METADATA
isinstancedictlenjoinsortedappendformatsetr&   itemsinsertdisplaywarning)actionfound_group_metadatafq_group_namevalid_metadatametadata_warningsvalidatemetadata_only
found_keysunexpected_keysunexpected_typesfieldrequirementvalues                E/home/dcms/DCMS/lib/python3.12/site-packages/ansible/playbook/base.py_validate_action_group_metadatarE   "   s   L*
N //Hvt,Zv1EZ#f+YZJZMYYvd6l34
  !Z!a!agq!a!rs	$$%TU&,d3$$%W%^%^hnoyhz%^%{|!&"4"9"9";<s>CVCVCX?YYO!(()U)\)\]a]f]fgv]w)xy!&4&:&:&< v"{z 22z*51!%W)=>$++UTY[fgr[s,tuv  !(()Z)a)abfbkbkl|b})~  $t${${  }J  %K  	L!234     c                      e Zd Zd ZddZy)_ClassPropertyc                    || _         y N)name)selfownerrK   s      rD   __set_name__z_ClassProperty.__set_name__J   s	    	rF   Nc                >     t        |d| j                                S )N_)getattrrK   )rL   objobjtypes      rD   __get__z_ClassProperty.__get__M   s    0ww!DII;022rF   rJ   )__name__
__module____qualname__rN   rT    rF   rD   rH   rH   I   s    3rF   rH   c                      e Zd Z e       Zeed               Zd Ze	d        Z
ddZd ZddZd Zd	 Zd
 Zd Zd ZddZd Ze	d        Zd dZd dZd Zd Zd Zd Zd Zd Zd!dZd Zd Z d Z!d Z"y)"FieldAttributeBasec                &   i }t        | j                        D ]v  }t        |j                  j	                               D ]N  \  }}t        |t              s|||<   |j                  s)t        ||j                  |       |||j                  <   P x |S rJ   )	reversed__mro__r    __dict__r3   r+   r   aliassetattr)clsfattributes	class_objrK   attrs        rD   _fattributeszFieldAttributeBase._fattributesU   s     !#++. 	3I"9#5#5#;#;#=> 3
d!$	2$(D!::Itzz48.2K

+3	3 rF   c                    d | _         d | _        d| _        d| _        d| _        t               | _        t               | _        y )NF)	_loader_variable_manager
_validated	_squashed
_finalizedr   _uuidr,   varsrL   s    rD   __init__zFieldAttributeBase.__init__c   s@     !%   #_
 F	rF   c                    | j                   S rJ   )rk   rn   s    rD   	finalizedzFieldAttributeBase.finalizedu   s    rF   c                   |dk(  rt         j                  d       t         j                  d|z  d| j                  j                  d| dt	        |       d       t        | d      ra| j                  rU| j                  j                  |d	z          | j                  j                         }|r|D ]  }|j                  |d	z           t        | d
      r,| j                  r| j                  j                  |d	z          yyy)zf this is never called from production code, it is here to be used when debugging as a 'complex print' r   zEDUMPING OBJECT ------------------------------------------------------r(   z- z (z, id=r'   _parent   _playN)
r5   debug	__class__rU   idhasattrrs   dump_meget_dep_chainru   )rL   depth	dep_chaindeps       rD   rz   zFieldAttributeBase.dump_mey   s    A:MMabcEk4>>;R;RTXZ\]aZbcd4#LL  +224I$ +CKK	*+4!djjJJuqy) '1!rF   c                    |S )zD infrequently used method to do some pre-processing of legacy terms rX   )rL   dss     rD   preprocess_dataz"FieldAttributeBase.preprocess_data   s    	rF   Nc           
        |t        d|z        t        | d|       || _        ||| _        nt	               | _        | j                  |      }| j                  |       t        | j                  j                         t        j                  d            D ]D  \  }}||v st        | d|z  d      }|rt        | | ||||                5t        | |||          F | j                          | S )z4 walk the input datastructure and assign any values Nz%ds (%s) should not be None but it is._dsr$   )keyz_load_%s)r   r`   rh   rg   r   r   _validate_attributesr/   rb   r3   operator
itemgetterrQ   r<   )rL   r   variable_managerloaderrK   rd   methods          rD   	load_datazFieldAttributeBase.load_data   s     :'(ORT(TUU 	eR  "2 !DL%<DL
 !!"%!!"% !!1!1!7!7!9x?R?RST?UV 	2JD$rz zD'8$?D$tRX(>?D$41	2 	 rF   c                :    	 t        | d      S # t        $ r Y y w xY w)Nr   )rQ   AttributeErrorrn   s    rD   get_dszFieldAttributeBase.get_ds   s&    	4'' 		s    	c                    | j                   S rJ   )rg   rn   s    rD   
get_loaderzFieldAttributeBase.get_loader   s    ||rF   c                    | j                   S rJ   )rh   rn   s    rD   get_variable_managerz'FieldAttributeBase.get_variable_manager   s    %%%rF   c                    |j                  |      }t        d      }|rDt        |t              r4||vr0t	        d|ddj                  |      | j                               |S )N)always	on_failedon_unreachable
on_skippednever'z4' is not a valid value for debugger. Must be one of r%   rR   )template	frozensetr+   r   r
   r.   r   )rL   rd   rC   templarvalid_valuess        rD   _post_validate_debuggerz*FieldAttributeBase._post_validate_debugger   s      ' !abZ|4l9R$dikoktkt  vB  lC  &D  JN  JU  JU  JW  X  XrF   c                    t        | j                        }|D ]-  }||vst        d|d| j                  j                  |       y)z}
        Ensures that there are no keys in the datastructure which do
        not map to attributes for this object.
        r   z!' is not a valid attribute for a r   N)r   rb   r
   rw   rU   )rL   r   valid_attrsr   s       rD   r   z'FieldAttributeBase._validate_attributes   sN       0 01 	|C+%(UXZ^ZhZhZqZq)rxz{{	|rF   c           	        |i n|}| j                   s| j                  j                         D ]  \  }}t        | d|z  d      }|r |||t        | |             -t        | d| t              }|D|j
                  dk(  sTt        |t        t        f      skt        d|dt        |      | j                                d| _         y)	z6 validation that is done at parse time, not load time Nz_validate_%srP   stringThe field 'zL' is supposed to be a string type, however the incoming data structure is a r   T)ri   rb   r3   rQ   r   isar+   r    r,   r
   typer   )rL   all_varsrK   	attributer   rC   s         rD   r<   zFieldAttributeBase.validate   s    !)2x%)%5%5%;%;%= !y ~'<dC9dGD$,?@ $DAdV*h?E($==H4EDRV<9X"4RVX\]bXc!ejnjujujw#  rF   c                b   |y t        |t              s|g}g }|D ]  }t        |t              st        d      i }|j	                         D ]  \  }}|j                  d      r?|j                  d      d   }| j                  | j                  |      \  }}	d|z   }|||<   Vt        |j                  d            dk  rd|z   }| j                  |      }
|
r|||
<   |j                  d      s| j                  |j                  dd      d	      }
|
s|||
<    |j                  |        |S )
NzThe field 'module_defaults' is supposed to be a dictionary or list of dictionaries, the keys of which must be static action, module, or group names. Only the values may contain templates. For example: {'ping': "{{ ping_defaults }}"}zgroup/.   zansible.legacy.zansible.builtin.F	mandatory)r+   r    r,   r
   r3   
startswithsplitplay_resolve_groupr-   _resolve_actionreplacer0   )rL   rK   rC   validated_module_defaultsdefaults_dictvalidated_defaults_dictdefaults_entrydefaults
group_namedummyresolved_actions              rD   _load_module_defaultsz(FieldAttributeBase._load_module_defaults   s{   =%&GE$&!" +	FMmT2(P  ')#,9,?,?,A  P(
 ",,X6!/!5!5h!?!CJ yy,,0,?,?
,K)
E%-
%:N>F+N; >//459):^)K&*&:&:>&JO&CK/@
 &001BC*.*>*>*223DFXY&+ +? + +GO3ODA PD &,,-DEW+	FZ )(rF   c                    t        | d      r| j                  }n;t        | d      r-t        | j                  d      r| j                  j                  }n| }|j                  j                  dk7  ry |S )Nru   rs   Play)ry   ru   rs   rw   rU   )rL   r   s     rD   r   zFieldAttributeBase.play!  sZ    4!::DT9%'$,,*H<<%%DD>>""f,rF   c                   t        j                  |      sd}|dz   |z   }n#dj                  |j                  d      dd       }|| j                  j
                  v r|| j                  j
                  |   fS 	 t        |      j                  di       }|j                  |dz         d   }|j                  ||j                  |            }|,|st        j                  d|z         |g fS t        d|z        g }g }d}	|D ]  }
t        |
t              s]t        |
|	|       t        |
d	   t              r<d
}	|
d	   j                  dg       }t        |t              r|g}t        |t               sg }pt        j                  |
      s|dz   |
z   }
| j#                  |
d      }|s|j%                  |        |D ][  }
|
| j                  j&                  vrg | j                  j&                  |
<   | j                  j&                  |
   j%                  |       ] || j                  j
                  |<   |D ]  }t        j                  |      s|dz   |z   }| j)                  |d      \  }}|D ][  }
|
| j                  j&                  vrg | j                  j&                  |
<   | j                  j&                  |
   j%                  |       ] | j                  j
                  |   j+                  |       |j+                  |        ||fS # t        $ r/ |st        j                  d|z         |g fcY S t        d|z        w xY w)Nzansible.builtinr   r   rt   action_groupszMError loading module_defaults: could not resolve the module_defaults group %sr   Fr#   Tr   r   )r   is_valid_fqcrr.   r   r   _group_actionsr   get
ValueErrorr5   vvvvvr
   r+   r   rE   r,   r    r   r0   _action_groupsr   extend)rL   r9   r   collection_namer   resource_nameaction_groupresolved_actionsinclude_groupsr8   r7   r   include_groupr   group_actionss                  rD   r   z!FieldAttributeBase._resolve_group0  sz   #11-@/O+c1MAM!hh}':':3'?!'DEO DII444 $))":":="III	F4_EII/[]^M &++Oc,AB2F$((m,
 mp}}~$b(($%t  xE  &E  F  F$" 	9Ffl3/8Lm\fZ0$7+/(%+J%7%;%;NB%ON!.,?*8)9%nd;)+ (55f=(3.7"226U2KO ''8-	90 ' 	CFTYY55535		((0II$$V,33MB	C
 3C		  / , 	3M'55mD /# 5 E#'#6#6}PU#6#V E=' G!9!9979DII,,V4		((077FG
 II$$]3::=I##M2	3 ...M  	Fmp}}~$b(($%t  xE  &E  F  F	Fs   8L 'L?0L?c                z   t        j                  ||       }|j                  r3|j                  s't	        j                  ||       }|j                  r'|}n$|j                  st	        j                  ||       }|j                  r|j
                  S |rt        d|z        t        j                  d|z         y )N)ignore_deprecatedz.Could not resolve action %s in module_defaults)	r   find_plugin_with_contextresolvedaction_pluginr   resolved_fqcnr
   r5   r   )rL   action_namer   r   prefers        rD   r   z"FieldAttributeBase._resolve_action  s    88]fYfhG$9$9";;K`i\ikF !!#<<[aj]jlG((($%UXc%cddFTUrF   c           	     |    | j                   s0| j                  D ]  }t        | |t        | |              d| _         yy)z
        Evaluates all attributes and sets them to the evaluated version,
        so that all future accesses of attributes do not need to evaluate
        parent attributes.
        TN)rj   rb   r`   rQ   )rL   rK   s     rD   squashzFieldAttributeBase.squash  s?     ~~(( 9dGD$$789!DN rF   c                   	 | j                         }| j                  D ]*  }t	        ||t        t        | d| t                           , | j                  |_        | j                  |_	        | j                  |_
        | j                  |_        | j                  |_        t        | d      r| j                  |_        |S # t        $ r}t        d|      d}~ww xY w)z=
        Create a copy of this object and return it.
        zTExceeded maximum object depth. This may have been caused by excessive role recursion)orig_excNrP   r   )rw   RuntimeErrorr	   rb   r`   shallowcopyrQ   r   rg   rh   ri   rk   rl   ry   r   )rL   new_meerK   s       rD   r   zFieldAttributeBase.copy  s    
	C^^%F $$ 	TDFD+gdavJ.Q"RS	T #'#9#9  OO OOzz 4FJ!  	Cu  AB  C  C	Cs   B? ?	CCCc                R   |j                   dk(  rt        |      }|S |j                   dk(  rUt        |t              sC	 t	        j
                  |      x}t        |      x}k7  rt	        j                  d|d      |}|S |S |j                   dk(  rt        |      }|S |j                   dk(  rt        |d      }|S |j                   d	k(  r3t        |t              rd
|v r|j                  d
d      }t        |      }|S |j                   dk(  r|g }nt        |t              s|g}|j                  |D ]  }t        ||j                        s:t        d|d|j                  d|dt        |      | j!                               |j"                  s`|j                  t        k(  st||j%                         dk(  st        d|d| j!                                |S |j                   dk(  re|t'               }n;t        |t        t&        f      s%t        |t              r|j)                  d      }n|g}t        |t&              st'        |      }|S |j                   dk(  r.|t+               }|S t        |t*              st-        d|z        |S |j                   dk(  rQt        ||j.                        s't-        |d|j.                  dt        |      d      |j1                  |       |S t3        d|j                          # t        j                  $ r}t        |d }~ww xY w)Nr   intzFloating-point value z would be truncated.floatboolT)strictpercent% r    the field 'z' should be a list of z, but the item 'z' is a r   z+' is required, and cannot have empty valuesr2   ,r,   z%s is not a dictionaryclassz is not a valid z (got a z	 instead))r   z!Unknown value for attribute.isa: )r   r   r+   r   decimalDecimalDecimalExceptionr   r   r   r   r   r    listofr
   r   r   requiredstripr2   r   r,   	TypeError
class_typepost_validater   )	rL   rK   r   rC   r   decimal_value	int_valuer   items	            rD   get_validated_valuez&FieldAttributeBase.get_validated_value  sI   ==H$ENEn m ]]e#eS),)0)??RUVcRdEdYe%669NuiWk7lmm%Eb u] ]]g%%LEZ Y ]]f$E$/EV U ]]i' %.3%<c2.%LEJ I ]]f$}t,+! ND%dI,<,<=0PTV_VfVfhlnrswnx2z @D  @K  @K  @MN N"++	0@0@L0P<4::<2+="4sw5y  @D  @K  @K  @M  #N  NN< / ]]e#}c{3e\2!KK,E #GEeS)E
  ]]f$}   t, 85 @AA  ]]g%eY%9%9:TS\SgSgimnsit uvv0  (*KIMM?([\\_ // ,$!+,s   A L L&L!!L&c                    | j                   |   }t        |t              rt        | |t               y	 t        | || j                  |d             y# t        $ r t        | |t               Y yw xY w)z9 set to parent inherited value or Sentinel as appropriateT)omitN)rb   r+   r   r`   r   _get_parent_attributer   )rL   rK   r   s      rD   set_to_contextz!FieldAttributeBase.set_to_context  sg     $$T*	i!=>D$).dD$>$>t$$>$OP! .dH-.s   A A/.A/c                @   |j                   j                  d      }| j                  j                         D ]8  \  }}|j                  r>t        | |      }|dvr-|j                  |      rt        j                  d|d|d       Qt        | |      |j                  sjt        d|z        |j                  s| j                  j                  dvr	 t        | d	|z  d      }|r ||t        | |      |      }n7|j                  d
k(  rt        | |      }n|j                  t        | |            }|||k(  r| j!                  |       || j#                  ||||      }t%        | ||       ; d| _        y# t&        t(        f$ rA}t        | |      }t        d| d|d|j                   d| j+                         |      d}~wt,        t.        f$ rF}|j0                  r/|dk7  r*|dk(  rd}nd| d}t        || j+                         |      Y d}~d}~ww xY w)z
        we can't tell that everything is of the right type until we have
        all the variables.  Run basic types (from isa) as well as
        any _post_validate_<foo> functions.
        r   )rm   "z$" is not templatable, but we found: z4, it will not be templated and will be used "as is".Nz*the field '%s' is required but was not set)TaskHandlerPlayContextz_post_validate_%sr   r   z' has an invalid value (z!), and could not be converted to r   rR   r   rK   argsz7The task includes an option with an undefined variable.r   z=' has an invalid value, which includes an undefined variable.T)available_variablesr   rb   r3   staticrQ   is_templater5   r6   r   r
   always_post_validaterw   rU   r   r   r   r   r`   r   r   r   r   r   _fail_on_undefined_errorsrk   )	rL   r   
omit_valuerK   r   rC   r   r   msgs	            rD   r   z FieldAttributeBase.post_validate  sW    0044V<
!%!1!1!7!7!9 7	QT9d+ y(W-@-@-GOO\`bg%i jtT"* )),-Y\`-`aa338O8OWy8y "Q !':T'A4H"9gdD.A7KE]]g-#D$/E $,,WT4-@AE )ez.A''- $ 44T9eWUE dE*Y7	Qr  z* Hd+(;tf<TUZT]]~  @I  @M  @M  N  NO  *P-1[[]QH H,n= Q44v~W +D61no,SdkkmaPPQs+   A6E:#E::H	<GH;HHc                N   d }	 t        |t              r ||       t        | j                  |      S |i S t        # t        $ r*}t        d| j                  j                  z  ||      d}~wt        $ r-}t        d| j                  j                  d|||      d}~ww xY w)zC
        Vars in a play must be specified as a dictionary.
        c                D    | D ]  }t        |      rt        d|z         y )Nz!'%s' is not a valid variable name)r   r   )r   r   s     rD   _validate_variable_keysz>FieldAttributeBase._load_vars.<locals>._validate_variable_keysK  s,     O#C(#$G#$MNNOrF   Nz.Vars in a %s must be specified as a dictionaryr  z,Invalid variable name in vars specified for z: )	r+   r,   r   rm   r   r
   rw   rU   r   )rL   rd   r   r  r   s        rD   
_load_varszFieldAttributeBase._load_varsF  s    
	O
	N"d#'+#DIIr22	   	9$%UX\XfXfXoXo%o)+a9 9 	N$]a]k]k]t]tvw%x  A  LM  N  N	Ns)   -= = = 	B$%A++B$7(BB$c                >   t        |t              s|g}t        |t              s|g}|D cg c]  }|t        us| }}|D cg c]  }|t        us| }}|r||z   }n||z   }t        j                  |      D cg c]
  \  }}|	| c}}S c c}w c c}w c c}}w )z
        Will extend the value given with new_value (and will turn both
        into lists if they are not so already). The values are run through
        a set to remove duplicate values.
        )r+   r    r   	itertoolsgroupby)rL   rC   	new_valueprependvcombinedir   s           rD   _extend_valuez FieldAttributeBase._extend_value^  s     %&GE)T*"I
 "7qQh%677 )?1Qh->Q?	? 5(Hy(H"+"3"3H"=OhaOO 8? Ps"   BBBB<
BBc                    i }| j                   j                         D ]E  \  }}t        | |      }|j                  dk(  r t	        |d      r|j                         ||<   A|||<   G |S )z6
        Dumps all attributes to a dictionary
        r   	serialize)rb   r3   rQ   r   ry   r  )rL   attrsrK   r   rd   s        rD   
dump_attrszFieldAttributeBase.dump_attrsw  sm     !%!1!1!7!7!9 	#T94&D}}'GD+,F"nn.d"d	# rF   c                B   |j                         D ]~  \  }}|| j                  v s| j                  |   }|j                  dk(  r?t        |t              r/|j                         }|j                  |       t        | ||       rt        | ||        d| _        d| _	        y)z4
        Loads attributes from a dictionary
        r   TN)
r3   rb   r   r+   r,   r   deserializer`   rk   rj   )rL   r  rd   rC   r   rR   s         rD   
from_attrszFieldAttributeBase.from_attrs  s     #[[] 	/MT5t''' ,,T2	==G+
5$0G#..0COOE*D$,D$.	/ rF   c                    | j                         }| j                  |d<   | j                  |d<   | j                  |d<   |S )a0  
        Serializes the object derived from the base object into
        a dictionary of values. This only serializes the field
        attributes for the object, so this may need to be overridden
        for any classes which wish to add additional items not stored
        as field attributes.
        uuidrq   squashed)r  rl   rk   rj   )rL   reprs     rD   r  zFieldAttributeBase.serialize  s@       zzV OO[>>ZrF   c                |   t        |t              st        d|dt        |            | j                  j                         D ]+  \  }}||v rt        | |||          | j                  |       - t        | d|j                  d             |j                  dd      | _	        |j                  dd      | _
        y)	z
        Given a dictionary of values, load up the field attributes for
        this object. As with serialize(), if there are any non-field
        attribute data members, this method will need to be overridden
        and extended.
        zdata (z) should be a dict but is a rl   r  rq   Fr   N)r+   r,   r   r   rb   r3   r`   r   r   rk   rj   )rL   datarK   r   s       rD   r  zFieldAttributeBase.deserialize  s     $%'TXZ^_cZd(eff!%!1!1!7!7!9 	*T9t|dDJ/##D)		* 	gtxx/0((;6*e4rF   )r   )NNrJ   )T)F)#rU   rV   rW   rH   rb   classmethodr   re   ro   propertyrq   rz   r   r   r   r   r   r   r   r<   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  rX   rF   rD   rZ   rZ   Q   s     "K

  
$  *(T&	|.5)n  S/jV	"29v.CJN0P2*$5rF   rZ   c                  4   e Zd Z eddd      Z ed ej                  d            Z e	d      Z
 e	d ej                  d	            Z ed
dd      Z e	ddd      Z e	ddd      Z e	dej                         Z e	d      Z e	d      Z e	d      Z e	d ej                  d            Z e	d ej                  d            Z e	dej.                        Z e	dd      Z e	dej4                        Z e	d      Z e	d ej                  d            Z e	d ej                  d            Z e	d ej                  d            Z e	d ej                  d            Z  e	d ej                  d            Z!g Z"d Z#d Z$d Z%y)Baser   r   T)r   defaultr  
connection)r   r(  r   )r   remote_userr,   d   )r   priorityr  r    )r   r   r  r   checkdiffr   becomebecome_methodbecome_userbecome_flags
become_exec                \   d}	 | j                   j                  d| j                   j                  }|S # t        $ rm 	 | j                  j
                  j                   j                  d| j                  j
                  j                   j                  }Y |S # t        $ r Y Y |S w xY ww xY w)zE return the absolute path of the playbook object and its line number r   :)r   _data_source_line_numberr   rs   ru   )rL   paths     rD   get_pathzBase.get_path  s     	"hh33TXX5J5JKD   	"&,,"4"4"8"8"E"Et||GYGYG]G]GjGjk  " 	s'   /5 	B+AB	B'"B+&B''B+c                h    t        | d      r&| j                  r| j                  j                         S y )Nrs   )ry   rs   r{   rn   s    rD   r{   zBase.get_dep_chain  s(    4#<<--//rF   c                :   g }| j                         }|r?|j                  t        |D cg c]  }t        |d      s|j                   c}             t
        j                  j                  | j                               }||vr|j                  |       |S c c}w )z
        Return the list of paths you should search for files, in order.
        This follows role/playbook dependency chain.
        
_role_path)
r{   r   r\   ry   r<  osr8  dirnamer9  r0   )rL   
path_stackr}   xtask_dirs        rD   get_search_pathzBase.get_search_path  s    
 
&&(	hi'd7STVbKc'def 77??4==?3:%h' (es
   BBN)&rU   rV   rW   r   rK   r   r   cliargs_deferred_getr)  r   portr*  rm   module_defaultsenvironmentr)   DEFAULT_NO_LOGno_logrun_onceignore_errorsignore_unreachable
check_moder.  ANY_ERRORS_FATALany_errors_fatalthrottleTASK_TIMEOUTtimeoutdebuggerr/  r0  r1  r2  r3  DEPRECATED_ATTRIBUTESr9  r{   rB  rX   rF   rD   r'  r'    s   'HbW[\D *h@\@\@\]i@jkJe$D X7Sw7S7STa7bcK (FSND %dKO !VD$GK0@0@AF&)H"v.M'F3F4PG4P4PQX4YZJf.Jg.J.J6.RSD%&!:L:LM%3H?G (+H 0L0L0LX0VWF"x9U9U9UVe9fgM X7Sw7S7STa7bcK!h8T8T8TUc8deLH6Rg6R6RS_6`aJ rF   r'  )5
__future__r   r   r  r   r=  r   r   	functoolsr   jinja2.exceptionsr   ansibler   r)   r   ansible.errorsr	   r
   r   r   ansible.module_utils.sixr   )ansible.module_utils.parsing.convert_boolr   +ansible.module_utils.common.text.convertersr   ansible.parsing.dataloaderr   ansible.playbook.attributer   r   r   r   ansible.plugins.loaderr   r   2ansible.utils.collection_loader._collection_finderr   r   ansible.utils.displayr   ansible.utils.sentinelr   ansible.utils.varsr   r   r   r5   rE   rH   rZ   r'  rX   rF   rD   <module>rc     s   
 #    	 $  , "  l l 1 = ? 1 x x ? m ) + H H
)$5N3 3n	5 n	5bM MrF   