a )g@s(ddlmZmZmZeZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlmZddlmZddlmZddlmZddlmZddlmZmZmZmZdd lmZdd lm Z dd l!m"Z"dd l#m$Z$dd l%m&Z&m'Z'ddl(m)Z)ddl*m+Z+ddl,m-Z-m.Z.ddl/m0Z0ddl1m2Z2ddl3m4Z4ddl5m6Z6ddl7m8Z8ddl9m:Z;ddlm?Z?ddl@mAZAddlBmCZCddlDmEZEmFZFddlGmHZHmIZIe?ZJdgZKeLdZMGdd d ZNeNZOd!d"ZPd#d$ZQd%d&ZRd'd(ZSGd)ddZTGd*d+d+eUZVGd,d-d-ejWZXdS).)absolute_importdivisionprint_functionN)deque)Lock)UndefinedError) constants)context) AnsibleErrorAnsibleFileNotFoundAnsibleUndefinedVariableAnsibleParserError)action_write_locks)IteratingStates) WorkerProcess) TaskResult) CallbackSend DisplaySend) string_types)to_text) ConnectionConnectionError) Conditional)Handler)load_list_of_blocks)Task) TaskIncludeloader)Templar)Display)add_internal_fqcns)wrap_var) combine_vars isidentifier)strip_internal_keysmodule_response_deepcopy StrategyBase)Zdiscovered_interpreter_c@s eZdZdS)StrategySentinelN)__name__ __module__ __qualname__r,r,E/usr/lib/python3.9/site-packages/ansible/plugins/strategy/__init__.pyr(Gsr(cCsd}|jr\|j|d6t|jd}|j|_|||j|d<Wdn1sR0Y|jr|j|dJ|durt|jd}|j|_|||j}||d<|d<Wdn1s0YdS)N)available_variablesrchangedfailed_when_resultfailed)Z changed_whenZset_temporary_contextr_loaderwhenevaluate_conditionalr.Z failed_when)resulttasktemplar task_varsZcondr0r,r,r-post_process_whensNs 0 r9cCs~i}|js|jrz|dd}|d}||vr:||||<|rR||vrR||||<d|vrf|d|d<d|vrz|d|d<|S)NZansible_loop_varitemZansible_index_varZ_ansible_item_labelZ ansible_loop)loop loop_withget)r5r6 item_varsZloop_varZ index_varr,r,r-_get_item_vars_s        r?c Cs(z|j}t|trWq$nt|tr>tj|ji|jnt|tr|jD]}t|t rN| |qlqN|j j |j g|jRi|jn^t|t r| ||j|j|Wdq1s0Yntdt||fWqttfy Yq$Yqtjy Yq0qdS)Nz7Received an invalid object (%s) in the result queue: %r)_final_qr= isinstancer(rdisplayargskwargsrrnormalize_task_result_tqm send_callbackZ method_name _results_lock_resultsappendwarningtypeIOErrorEOFErrorqueueZEmpty)strategyr5argr,r,r-results_thread_mainos*       "  , rRcstdfdd }|S)zVClosure to wrap ``StrategyBase._process_pending_results`` and invoke the task debuggerFNc sd}|j}||||d}g}|D]}|j} |j} |j| j| jfd} | d} | d} z|| j}Wnty| | }Yn0|j |j drt }t | | | | ||}||jt jkr|j| jr0|jjtdvr0|r0|D]0\}}|| jkrq||||jj|q|| j||D]*\}}t||rB|jj|| jqB|jjd| j|| | | | | t!|||q&q|jt j"kr|#|q&q|jt j$krt%&dq|#|q&|S) N)) is_failedfailures)is_unreachabledark) is_changedr/) is_skippedskipped)one_pass max_passesr8 play_context)Zglobally_enabled)Zlinearokc)'Z host_statescopy_task_host_queued_task_cachepopname_uuidKeyErrorZget_host_stateZneeds_debuggerdebugger_active NextActionDebuggercmdloopr5REDOrFZclear_failed_hostsrun_once_playrPr!rSitemsZset_state_for_host_removed_hostsremovegetattr_statsZ decrement _queue_taskextend debug_closureCONTINUErJEXITsysexit)selfiteratorrZr[Zstatus_to_stats_mapZprev_host_statesresultsZ_processed_resultsr5r6hostZ_queued_task_argsr8r\Zprev_host_state next_actionZdbg host_namestatemethodZwhatfuncr,r-innersR    $       zdebug_closure..inner)FN) functoolswraps)rrr,rr-rus=ruc@seZdZdZdZddZd0ddZddZd1d d Zd d Z ddZ ddZ ddZ ddZ ddZddZddZed2ddZd d!Zd"d#Zd3d$d%Zd4d&d'Zd(d)Zd*d+Zd,d-Zd.d/ZdS)5r'z This is the base class for strategy plugins, which contains some common code useful to all strategies like running handlers, cleanup actions, etc. TcCs||_||_|j|_||_||_|j|_t j dd|_ t j dd|_ i|_t|_d|_d|_t|_t|_tt|_tjt|fd|_d|j_|jt|_ g|_!g|_"t#j$|_%dS)NstepFdiffr)targetrCT)&rFZ get_inventory _inventory_workersZget_variable_manager_variable_manager get_loaderr2r@r ZCLIARGSr=_step_diffrbrBZ_display_pending_results _cur_workerdict_blocked_hostsrrI threading ConditionrrHThreadrR_results_threaddaemonstart_active_connections _hosts_cache_hosts_cache_allCZENABLE_TASK_DEBUGGERrg)rzZtqmr,r,r-__init__s,    zStrategyBase.__init__cCs~|st|j|jfrdS|js4td|jr4d}n |jpz1StrategyBase._set_hosts_cache..T)patternZignore_restrictionscSsg|] }|jqSr,rrr,r,r-rr)order) rrrZ finalizedr is_templatehostsr get_hostsr)rzplayrefreshZ_patternr,r,r-_set_hosts_caches zStrategyBase._set_hosts_cachec Csr|jD]L}zt|}|Wq tyT}ztd|WYd}~q d}~00q |jt |j dS)N4got an error while closing persistent connection: %s) rvaluesrresetrrBdebugr@Zput _sentinelrjoin)rzZsockZconner,r,r-cleanups & zStrategyBase.cleanuprc Cs|jD]L}||jjvrz||jj|WqtyP||j|Yq0qt|t sn||jj krn|St |jj dkr|jj St |dkr|jjS|jj SdS)Nr)rrF_unreachable_hostsget_next_task_for_hostrrrfget_hostrAboolZRUN_OKlenkeysZRUN_UNREACHABLE_HOSTSget_failed_hostsZRUN_FAILED_HOSTS)rzr{r\r5r}r,r,r-run!s   zStrategyBase.runcs8|j|ddt|jj|jjfdd|jDS)NFrcsg|]}|vr|qSr,r,rr}ignorer,r-r;rz4StrategyBase.get_hosts_remaining..)rsetrF _failed_hostsunionrrrzrr,rr-get_hosts_remaining8sz StrategyBase.get_hosts_remainingcs"j|ddfddjDS)NFrcsg|]}|jjvr|qSr,)rFrrrzr,r-r?rz1StrategyBase.get_failed_hosts..)rrrr,rr-r=szStrategyBase.get_failed_hostscCs |||d<|||d<dS)z Base class method to add extra variables/information to the list of task vars sent through the executor engine regarding the task queue manager state. Zansible_current_hostsZansible_failed_hostsN)rr)rzvarsrr,r,r-add_tqm_variablesAszStrategyBase.add_tqm_variablesc CsTtd|j|jf|jtjvr@td|jttj|j<t|j|d}zt| |j }Wn4t y}zt d|j |dWYd}~n d}~00zbt|j}|dkr|jr|jrtd|n"||krtd ||f|}d } |j} |j|kr d|_|j|j} | dus,| s||||d |j|j|jf<t|j|||||j|jt} | |j|j<|jd ||| td |jdt|jfd} |jd7_|j|krd|_| r֐qq|j| krtdq|j d7_ Wn<t!t"t#fy8}ztd|WYd}~dSd}~00td|j|jfdS)z5 handles queueing the task up to be sent to a worker z entering _queue_task() for %s/%szCreating lock for %sr variablesz3Failed to convert the throttle value to an integer.)objZorig_excNrz6Ignoring 'throttle' as 'run_once' is also set for '%s'ztask: %s, throttle: %dF)r}r6r8r\Zv2_runner_on_startz"worker is %d (out of %d available)Tg-C6?zgot an error while queuing: %szexiting _queue_task() for %s/%s)$rBrrdactionrrrr2inttemplatethrottle Exceptionr _dsrrALLOW_BASE_THROTTLINGrlget_nameris_aliverbrerr@r plugin_loaderrFrGrtimesleeprrNrMAssertionError) rzr}r6r8r\r7rrZ rewind_pointZqueuedZstarting_workerZ worker_prcr,r,r-rsIs\ &       zStrategyBase._queue_taskcs(|jrfddjD}n|jg}|S)Ncsg|]}|jjvr|qSr,)rFrrrr,r-rrz/StrategyBase.get_task_hosts..)rlrrd)rzr{Z task_hostr6 host_listr,rr-get_task_hostsszStrategyBase.get_task_hostscCs |didd}|p|jgS)NZ_ansible_delegated_varsZansible_delegated_host)r= delegate_to)rzr5r6rr,r,r-get_delegated_hostssz StrategyBase.get_delegated_hostsc s|jdurdS|d}tj}|D] }tD]}||r.||q.q&r|jdtfddt|Di}|||}|j j } |D]} | | |qdS)zSets host facts for ``delegate_to`` hosts for facts that should always be delegated This operation mutates ``result`` to remove the always delegated facts See ``ALWAYS_DELEGATE_FACT_PREFIXES`` N ansible_factsc3s"|]}|vr||fVqdSNr,)rkZ_popZ always_keysr,r- rz;StrategyBase._set_always_delegated_facts..) rraddALWAYS_DELEGATE_FACT_PREFIXES startswithrcrlistrrset_host_facts) rzr5r6ZfactsZ_addZfact_keyZ always_keyZ always_factsrZ_set_host_facts target_hostr,rr-_set_always_delegated_factss"    z(StrategyBase._set_always_delegated_factscCst|jtr |jt|j|_t|jtr|jj|jf}z|j|d}Wn*t yv|j ddkrlt }Yn0|j ddd}|j|_||j ||_|S)aLNormalize a TaskResult to reference actual Host and Task objects when only given the ``Host.name``, or the ``Task._uuid`` Only the ``Host.name`` and ``Task._uuid`` are commonly sent back from the ``TaskExecutor`` or ``WorkerProcess`` due to performance concerns Mutates the original object r6rZ async_statusT)exclude_parentZ exclude_tasks)rArarrrrr`rdrbrf _task_fieldsr=rr__parentZ from_attrs)rz task_resultZqueue_cache_entryZ found_task original_taskr,r,r-rEs     z"StrategyBase.normalize_task_resultFNc, sg}tjfdd}d}zLzjj}Wn$ty`YWjqYn0Wjn j0|j}|j d} | r d} j } | s |j } td|j jrjjjD]} | j jjvr؈| qn |j|dd\} } |rB| rB| jtjkrBdjj|j <| rjjd|j jj !|j j"#|j t$t%&|j'd njjd |j nNjjd |j jjd |j d |j'vr|j'd rjjd |j jj(d|| dnp|)rj*}|sTdjj|j <jj +|j jjd|j n$jjd |j jjd |j j(d|n|,rjjd|j j(d|nd} j-r|j'.dg}n|j'g}|D]}d|vr|/r|dD]}d}||jj0}|durBd}|1|rBj(d||jj0D]x}|j2D]j}t3|dgphg}|stqT|4d|j5.d|}||vrqTnd}|1|rTj(d||qTqJ|sd|}t6j7rt8|n t9|qd|vrF|.dt$}j:|||.d r^|dj;vr^j;+|dnd|vr^j<||d|vsrd|vr*t=|}j>.|j |j j?fd}|rt@||}n|}t%||jA<tB||j-s؈jCr*tD|j|j ||jE}j(d||.d drd|j'd <|.ddr*d|j'd<d |vr$jFt6jGvr$jHdurdjIrdJ|}nK|L|}jFt6jMvr|d ND]&\}} |D]}!j"O|!|| qqnb|Pd!d}"|D]P}!jFt6jQv}#|#r|"rj"R|!|d S|#r҈j"#|!|d Sqd"|vrd#|d"vr|d"d#rd$|d"vsf|d"d$rvL|}ndg}|d"d#}$d%|d"vo|d"d%}%|D]J}&|$TD]:}'|%rԈjjU|'|$|'|&njjV|'|$|'|&qqqd&|j'vr&jWst3d&dr&j(d'|tXtYsnjjd |j d |j'vrn|j'd rnjjd |j j(d(|jArtZjAst8d)jAL|}t[t\|j'}(d*|(vr|(d*=|D]}!j"#|!jA|(iqΈj]d+8_]|j j^vrj^|j =j_dur`| r`jj`j_aND]&\})}*|*j?j_j?kr8d|*jb|j <q8|+|tXtcrfd,d-jj0DD]}+|+d|q|s|dur|d+|krq|d+7}q"|S).z Reads results off the final queue and takes appropriate action based on the result (executing callbacks, updating state, etc.). c st|D]}|jD]}|jrzx|js`|jrZjjj|jj d_ |j|_d|_|j|j dd|j ddf}||vr|WSWqt tfy}z6|jstd|jt|fWYd}~qWYd}~qd}~00qqdS)N)rr6_hosts _hosts_allTF)Zinclude_role_fqcnzHandler '%s' is unusable because it has no listen topics and the name could not be templated (host-specific variables are not supported in handler names). The error: %s)reversedblockrdZ cached_namerrget_varsrmrrr.rrrr listenrBrKr) handler_nameZhandler_blocksZ handler_blockZ handler_taskZ candidatesr)handler_templarr{rzr,r-search_handler_blocks_by_names6       zLStrategyBase._process_pending_results..search_handler_blocks_by_namerFTzmarking %s as failed)peekZrescued)Zansible_failed_taskZansible_failed_resultrTr]Zignoredr/v2_runner_on_failed) ignore_errorsrVZv2_runner_on_unreachablerYv2_runner_on_skippedr|Z_ansible_notifyNZv2_playbook_on_notifyrzlThe requested handler '%s' was not found in either the main handlers list nor in the listening handlers listZadd_hostr add_groupr8Zv2_runner_item_on_okr1rZ_ansible_facts_cacheableZ ansible_statsdataZper_host aggregaterZv2_on_file_diffZv2_runner_on_okz3Invalid variable name in 'register' specified: '%s'Z invocationrc3s*|]"}|jD]}|jjkr |Vq qdSr)rre)rbr)rr,r-rrz8StrategyBase._process_pending_results..)err2rHacquirerIpopleft IndexErrorreleaserar`rSrget_state_for_hostrdrBrrlrrrmrrFrZmark_host_failedr run_staterCOMPLETErZis_any_block_rescuingrr incrementrorprZset_nonpersistent_factsrr"Z serialize_resultrGrUignore_unreachablerJrXr;r=rWhandlersZ notify_hostrrqZget_validated_valueZ fattributesrZERROR_ON_MISSING_HANDLERr rKZadd_dynamic_hostrZadd_dynamic_groupr?rbrer#registerr9r<rrrZ _ACTION_DEBUGrZdelegate_factsrrrZ_ACTION_INCLUDE_VARSrnZset_host_variablercZ_ACTION_SET_FACTrr_rZupdate_custom_statsZset_custom_statsrrArr$r%r&rr_roleZ ROLE_CACHEr _had_task_runr remove_host),rzr{rZr[ ret_resultsrZcur_passrZ original_hostZrole_ranrZstate_when_failedrr_r Z result_itemsZ result_itemrfoundZtarget_handlerZlistening_handler_blockZlistening_handlerZ listenersmsgZ new_host_infor>Zfound_task_varsZ all_task_varsZnew_item_resultrZvar_nameZ var_valuerZ cacheableZ is_set_factrrZmyhostrZ clean_copyentryZrole_objZhandlerr,)rr{rrzr-_process_pending_resultssb (                                &  "        z%StrategyBase._process_pending_resultscCslg}td|jdkr^|jjs^|jr2td||}|||jdkrt t j qtd|S)z Wait for the shared counter to drop to zero, using a short sleep between checks to ensure we don't spin lock zwaiting for pending results...rz"A worker was found in a dead statez/no more pending results, returning what we have) rBrrrFZ _terminatedZhas_dead_workersr rrtrrrZDEFAULT_INTERNAL_POLL_INTERVAL)rzr{rr|r,r,r-_wait_on_pending_resultss      z%StrategyBase._wait_on_pending_resultscCs.|jjdd}|jj|_|j|jB}||_|S)zW A proven safe and performant way to create a copy of an included file T)r)r`r_rrZ_vars)rz included_fileti_copyZ temp_varsr,r,r-_copy_included_file/s   z StrategyBase._copy_included_filec Csjtd|jz~|j|j}|dur.gWSt|ts@td||}t ||j | |j j ||j|jd}|jD]}|jjd|jqtWntyYntyL}zt|trdt|j} nt|} |jD]} d| jd<q|jD]<}t||j td| d d } |jjd |j|jd | qt| |WYd}~n d}~00|jd |td|S)a4 Loads an included YAML file of tasks, applying the optional set of variables. Raises AnsibleError exception in case of a failure during including a file, in such case the caller is responsible for marking the host(s) as failed using PlayIterator.mark_host_failed(). zloading included file: %sNz0included task files must contain a list of tasks)rZ parent_blockZroleZ use_handlersrZvariable_managerr]z8Could not find or access '%s' on the Ansible Controller.Tr1)r1reason)r}r6Z return_datarTrZv2_playbook_on_includezdone processing included file)rBrZ _filenamer2Zload_from_filerArr rrrmZbuild_parent_blockr`r rrrFrrrrdr r r file_namerIr rrrG) rzrr{Z is_handlerrrZ block_listr}rrrtrr,r,r-_load_included_file<sF          z StrategyBase._load_included_filecCsd}d|}|r|d|7}|d7}t|}|dvrJtdd}n,|dvrltd d|_d}n td t||S) NFzPerform task: %s zon %s z(N)o/(y)es/(c)ontinue: )yZyesz User ran taskT)ccontinuez$User ran task and canceled step modezUser skipped task)rBpromptlowerrrZbanner)rzr6r}retrZrespr,r,r- _take_steprs         zStrategyBase._take_stepcCstd|dS)Nz)%s task does not support when conditional)rBrK)rzZ task_namer,r,r-_cond_not_supported_warnsz%StrategyBase._cond_not_supported_warnc sjd}fdd}d}|}d|} ttrFjdnjjddd|d vrpjrp||d krd }n|d kr||rڈ|j } | j t j krt d |j jjvr| j | _t j | _ d |j }nd}| d|j 7} n|dkrjjd}n^|dkrt||r^jjjD]} | } j| qd3|ttrڈ?|t@||}|rjd4||gS)5NZ _raw_paramscs6jjj|jjd}tj|d}||S)Nrr}r6rrr)rrrmrrrr2r4)rall_varsr7r{rzr6r,r-_evaluate_conditionals z9StrategyBase._execute_meta.._evaluate_conditionalFz!%s conditional evaluated to FalseZ!v2_playbook_on_handler_task_startZv2_playbook_on_task_start)Zis_conditional)nooprefresh_inventoryreset_connectionr+Zflush_handlersz*flush_handlers cannot be used as a handlerz!triggered running handlers for %sTz, not running handlers for %sr,z inventory successfully refreshed clear_factsz facts clearedz*, not clearing facts and fact cache for %sclear_host_errorszcleared host errorsz&, not clearing host error state for %sZ end_batchz ending batchz, continuing current batchend_playz ending playz, continuing playZend_hostzending play for %sz, continuing execution for %szDend_host conditional evaluated to false, continuing execution for %sZ role_completezrole_complete for %sr-r'r)r6rr7)r7)Z task_keysZ var_optionszreset connectionrzno connection, nothing to resetz!invalid meta action requested: %s)rrrY skip_reasonr/zMETA: r)ArCr=rArrFrGr3r&rrdrrZHANDLERSr rZpre_flushing_run_staterr,rrmrrrrr.rrcr/Zset_run_state_for_hostrr0rorJZimplicitr rZ _completedrrrrr2Zset_task_and_variable_override post_validateZ remote_addraddressZ update_varsrrrZconnection_loader connectionosdevnullZ set_optionsZ dump_attrsZset_attributes_from_pluginrrrBrrZvvrr)rzr6r\r{rZ meta_actionr*rYrr1Z host_stater}hostnamer(r7r4rr5headerresr,r)r- _execute_metas                              &    zStrategyBase._execute_metac Cs\g}|jD]L}||jjvr z||jj|Wq tyT||j|Yq 0q |S)zQ returns list of available hosts for this iterator by filtering out unreachables )rrFrrJrrrfr)rzr{Z hosts_leftr}r,r,r-get_hosts_left.s   zStrategyBase.get_hosts_leftcCsD|D]:}d|jvr|jdd}|r|j|jvr||j|j<qdS)z3 updates the current active persistent connections rCZ_ansible_socketN)rr=rar)rzr|rZ socket_pathr,r,r-update_active_connections:s   z&StrategyBase.update_active_connections)T)r)FN)F)N)r)r*r+__doc__rrrrrrrrrsrrrrErurrrrr%r&r:r;r<r,r,r,r-r's6.  S" 4 6 # c@s(eZdZdZdZdZdZefddZdS)rhz. The next action after an interpreter's exit. rcCs ||_dSr)r5)rzr5r,r,r-rJszNextAction.__init__N)r)r*r+r=rkrvrwrr,r,r,r-rhDs rhc@seZdZdZddZddZejjZ ddZ dd Z e Z d d Z e Zd d ZeZddZeZddZddZeZddZddZdS)riz> cCsbtj|d||f|_d|_i|_||jd<||jd<||jd<||jd<||jd<||_dS)Nz[%s] %s (debug)> r6r8r}r\r5)cmdCmdrr"Zintroscoper~)rzr6r}r8r\r5r~r,r,r-rQs      zDebugger.__init__cCs(ztj|Wnty"Yn0dSr)r@rArjKeyboardInterruptrr,r,r-rj_s zDebugger.cmdloopcCs ||S)Quit)do_quitrzrCr,r,r-do_EOFgszDebugger.do_EOFcCstdtj|j_dS)rDzUser interrupted executionT)rBrhrwr~r5rFr,r,r-rEks  zDebugger.do_quitcCstj|j_dS)zContinue to next resultT)rhrvr~r5rFr,r,r- do_continuess zDebugger.do_continuecCstj|j_dS)zKSchedule task for re-execution. The re-execution may not be the next resultT)rhrkr~r5rFr,r,r-do_redozs zDebugger.do_redocCs@td|jdd}|jd}||j}||||jd<dS)zLRecreate the task from ``task._ds``, and template with updated ``task_vars``Nr8)rr6)rrBZ load_datarr2)rzrCr7r6r,r,r-do_update_tasks    zDebugger.do_update_taskc Cslzt|t|jWStyftdd\}}t|trD|}n|j}t d|t |fYn0dS)Nr>***%s:%s) evalglobalsrBrrxexc_inforAstrr)rBrepr)rzrCtv exc_type_namer,r,r-evaluates  zDebugger.evaluatecCs6z||}tt|Wnty0Yn0dS)z Pretty PrintN)rTrBpprintZpformatr)rzrCr5r,r,r- do_pprints   zDebugger.do_pprintc Cs~z$t|ddd}t|t|jWnTtyxtdd\}}t|trV|}n|j }t d|t |fYn0dS)N zZsingler>rK) compileexecrMrBrrxrNrArOr)rBrP)rzrCcoderQrRrSr,r,r-executes  zDebugger.executecCs&z||Wnty Yn0dSr)r[r)rzliner,r,r-defaults zDebugger.defaultN)r)r*r+Zprompt_continuousrrjr@rAZdo_helpZdo_hrGrEZdo_qrHZdo_crIZdo_rrJZdo_urTrVZdo_pr[r]r,r,r,r-riNs$  ri)YZ __future__rrrrLZ __metaclass__r@rr5rUrOrxrr collectionsrZmultiprocessingrZjinja2.exceptionsrZansiblerrr Zansible.errorsr r r r Zansible.executorrZansible.executor.play_iteratorrZansible.executor.process.workerrZansible.executor.task_resultrZ#ansible.executor.task_queue_managerrrZansible.module_utils.sixrZansible.module_utils._textrZansible.module_utils.connectionrrZansible.playbook.conditionalrZansible.playbook.handlerrZansible.playbook.helpersrZansible.playbook.taskrZansible.playbook.task_includerZansible.pluginsrrZansible.templaterZansible.utils.displayr Zansible.utils.fqcnr!Zansible.utils.unsafe_proxyr"Zansible.utils.varsr#r$Zansible.vars.cleanr%r&rB__all__ frozensetrr(rr9r?rRrur'objectrhrArir,r,r,r-sj                     C~