o nnhc- @s$ddlmZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlmZmZe dejee e jddejdde \ZZdad d Zdd d Zd dZddZddZ ddZ!ddZ"ddZ#ddZ$e%dkre$dSdS)) annotationsN)to_textto_bytesz ansible-%szInvoked with %s cCsttj|dSN)syslog LOG_NOTICE)msgr H/usr/local/lib/python3.10/dist-packages/ansible/modules/async_wrapper.pynotice!srcCs.|dur tt|tjt|dSr)printjsondumpssysstdoutflushexit)resexit_msgr r r end%s rcCsz t}|dkr tWnty*td}td|j|jfdddYnwtt t ddz t}|dkrCtWntyatd}td|j|jfdddYnwt d d }t | tj t | tj t | tj dS) Nrrzfork #1 failed: %d (%s) T)r failed022zfork #2 failed: %d (%s) z /dev/nullw)osforkrOSErrorrexc_infoerrnostrerrorsetsidumaskintopendup2filenostdinrstderr)pidedev_nullr r r daemonize_self,s0       r.cCsg}|}t|D]\}}|}|drnq td||d}tt|D] \}}|dr7nq*td|dkrT|t||d}|dd ||dt||}d ||fS) a\ Used to filter unrelated output around module JSON output, like messages from tcagetattr, or where dropbear spews MOTD on every single command (which is nuts). Filters leading lines before first line-starting occurrence of '{', and filter all trailing lines after matching close character (working from the bottom of output). {zNo start of json char foundN}zNo end of json char foundrz2Module invocation had junk after the JSON data: %s ) splitlines enumeratestrip startswith ValueErrorreversedendswithlenappendjoin)datawarningslinesstartlinereverse_end_offset trailing_junkr r r _filter_non_json_linesMs&  rCcCsvt|d,}|d}|dddkr WddS|d|ddWdS1s4wYdS)Nrbirs#!  )r&readindexr4split) module_path module_fdheadr r r _get_interpreterus  $rNc CsFzt|WdSty"}z|jtjkrWYd}~dSd}~wwr)rmakedirsrr!EEXIST)pathr,r r r _make_temp_dir}s rRc Cstd}t|d}z2z |t|Wnttfy.}z td|t|f|d}~wwW| t |tdS| t |tw)Nz.tmprzfailed to write to %s: %s) job_pathr&writerrIOErrorrrstrcloserrename)infojobfiletjobr,r r r jwrites r\c Csptdd|di}tdtd}d}d}z]ddt|D}t|d}|r0||}tj|tj tj tj ddd d d }| \}}t |\}} t |}| rj|d g} t| tsa| g} | | | |d <|rp||d <t|WdSttfytd} d|t| ||d}||d<t|YdSttfyd|||td}||d<t|YdSw)Nrr)startedfinishedansible_job_idTrcSsg|]}t|ddqS)surrogate_or_strict)errors)r).0cr r r sz_run_module..Fzutf-8surrogateescape)r)rr*shelltextencodingrar=r*)rcmdr outdatar*r_)rrir<r*r )r\ ipc_notifiersendrWshlexrJrN subprocessPopenPIPE communicaterCrloadsget isinstancelistextendrrUrr rr6 Exception traceback format_exc) wrapped_cmdjidresultrjfiltered_outdatar*ri interpreterscript json_warningsmodule_warningsr,r r r _run_modulesl        rc CsHttjdkrtdddddtjdtf}tjd}tjd}tjd }d tj|vr4d}nttjdkrCtjdd k}nd }|d krPd||f}n|}d}tj dd}tj |}tj ||a zt |Wn%ty} ztdd|t| fttddWYd} ~ nd} ~ wwzt} | rtd} | dkrtdrn| d} qtdtddd|t | ddWdStttdt} | rhttt|} t| | td| | ft|t| tjdkrQtd| | ft|| |} | dkrHdd| d}t|td| t | t!j"td| td|sDt#$tj|dt|t| tjdkstd |sbt#$tj|dtWdStd!tt%||td"tWdSty} ztd#| tdd$| dd%WYd} ~ dSd} ~ ww)&NTzpusage: async_wrapper [-preserve_tmp] Humans, do not call directly!)rr rz%s.%drEz-tmp-z -preserve_tmpF_z%s %sANSIBLE_ASYNC_DIRz~/.ansible_asyncz#could not create directory: %s - %s)rr exceptionrg?z"Return async_wrapper task started.)rr]r^r_ results_file_ansible_suppress_tmpdir_deletezStarting module and watcherzStart watching %s (%s))rrz%s still running (%s)zTimeout exceeded)r r child_pidzTimeout reached, now killing %szSent kill to group %s zDone in kid B.zStart module (%s)zModule complete (%s)z error: %szFATAL ERROR: %sz async_wrapper exited prematurely)&r9rargvrrgetpidrQdirnameenvironrs expanduserr;rSrRrwrrxryrrkrW ipc_watcherpollrr.r%setpgidtimesleepwaitpidWNOHANGr\killpgsignalSIGKILLshutilrmtreer)r{ time_limitwrapped_moduleargsfile preserve_tmpristep async_dirjobdirr,r+retriessub_pid remainingrr r r mains                      "r__main__)Nr)& __future__rr!rrmrrrnrrxrrr multiprocessing+ansible.module_utils.common.text.convertersrropenlogrQbasename__file__r r;rPiperrkrSrrr.rCrNrRr\rr__name__r r r r s> "  !( J