a )g}\@sddlmZmZmZeZddlZddlZddlZddl Z ddl Z ddl m Z ddl mZddlmZddlmZddlmZddlmZdd lmZdd lmZdd lmZdd lmZdd l m!Z!ddl"m#Z#ddl$m%Z%m&Z&m'Z'ddl(m)Z)m*Z*ddl+Z+e#Z,dgZ-e.dZ/eee%e&fZ0dZ1e2de1dZ3GdddeZ4ddZ5GdddZ6ddZ7ddZ8d d!Z9e0D]Z:e4;e:e9qtGd"ddeZd?Z%d@dAZ&ddBdCZ'dDdEZ(dFdGZ)dHdIZ*dJdKZ+dLdMZ,dNdOZ-dPdQZ.ddRdSZ/dTdUZ0dVdWZ1dXdYZ2dZd[Z3d\d]Z4d^d_Z5d`daZ6dbdcZ7dddeZ8dfdgZ9dhdiZ:djdkZ;dldmZdrdsZ?dtduZ@dvdwZAdxdyZBdzd{ZCd|d}ZDd~dZEddZFddZGddZHdS)rz This is a base ansible callback class that does nothing. New callbacks should use this class as a base and override any callback methods they wish to execute custom actions. NcCs|r ||_nt|_|jjdkrdt|dd}t|dd}t|dd}|jd|||tj|jjfd |_ d |_ i|_ |dur| |d |_ dS) NZ CALLBACK_NAMEZunnamedZ CALLBACK_TYPEoldZCALLBACK_VERSIONz1.0z2Loading callback plugin %s of type %s, v%s from %sF)ZchangedZfailedZskipped invocationZ skip_reason)_displayglobal_display verbositygetattrZvvvvsysmodulesr+__file__ZdisabledZwants_implicit_tasks_plugin_options set_options_hide_in_debug)rdisplayoptionsnameZctypeversionr r r!r"s    " zCallbackBase.__init__cCs||j|<dSrrP)rkvr r r! set_optionszCallbackBase.set_optioncCs |j|SrrW)rrXr r r! get_optionszCallbackBase.get_optioncCs tjj|j|j|||d|_dS)z This is different than the normal plugin method as callbacks get called early and really don't accept keywords. Also _options was already taken for CLI args and callbacks use _plugin_options instead. )keysZ variablesdirectN)CZconfigZget_plugin_optionsZ plugin_typeZ _load_namerP)rZ task_keysZ var_optionsr]r r r!rQszCallbackBase.set_optionscCsnd|j}|jjrj|jj|jkrj|d|jj7}|jdid|jj}|jj|krj|d|7}|S)zWReturn label for the hostname (& delegated hostname) of a task result. z%sz -> %sZ_ansible_delegated_varsZ ansible_hostz(%s))_hostget_nameZ_taskZ delegate_to_resultget)resultZlabelZahostr r r! host_labels  zCallbackBase.host_labelrcCs0|jj|ks|jddduo.|jddduS)N_ansible_verbose_alwaysFTZ_ansible_verbose_override)rIrKrarb)rrcrKr r r!_run_is_verboseszCallbackBase._run_is_verboseTFc Csz|d}Wnty$d}Yn0z|d}WntyJd}Yn0|d|duob|dk|du|jjdkf}|st|rd}|durd}tt|} |s|jjd krd |vr| d =|jjd krd |vr| d =d | vr| d =|s| S|dkrPztj | t |d|d WSt yLt s$tj t t | tdt |ddd YS0n|dkr|dv} | rd| vrd| vrd| d<d| vrd| vrd| d<dttj| dt| dd|dd|pdSdS)N result_formatjsonpretty_resultsreTrFFrHdiffr)clsindentZ ensure_ascii sort_keys)keyrCNTstdoutZ stdout_linesz stderrZ stderr_linesz %srZ allow_unicodeZDumperZdefault_flow_stylern )r[KeyErrorrbrIrKanyrrrhdumpsr TypeErrorrsorteditemsr textwraprnrCdumpr) rrcrnroZkeep_invocationZ serializergriZindent_conditionsZabridged_resultrr r r! _dump_resultssj          zCallbackBase._dump_resultscCsptjrld|vr6|dr6|dD]}|j|q|d=d|vrl|drl|dD]}|jjfi|qN|d=dS)z: display warnings, if enabled and any exist in the result rrN)r^ZACTION_WARNINGSrIwarningZ deprecated)rresrr r r!_handle_warnings s  zCallbackBase._handle_warningscCsjd|vrfd}t|d}|jjdkrD|dd}|d|7}nd|}|d=|jj|tj|ddS) Nrz-An exception occurred during task execution. rk z6To see the full traceback, use -vvv. The error was: %szThe full traceback is: )colorrs)r rIrKstripsplitrSr^Z COLOR_ERROR)rrcZ use_stderrrZ exception_strerrorr r r!_handle_exception,s  zCallbackBase._handle_exceptionc Csz|d}Wnty$d}Yn0z|d}WntyJd}Yn0|dkrjtj|dddddS|d kr|d v}d ttj|dt|d d dddSdS)NrgrhriTrF),z: )rornZ separatorsrrCrqz%s rtFruz ) r[rwrhryr}rnrCr~r)rrlrgrirr r r!_serialize_diff;s,    zCallbackBase._serialize_diffc Cs$t|ts|g}g}|D]}d|vr0|dd|vrB|dd|vr\|d|dd|vrv|d|dd |vrd |vrd D]:}t||tr|||||<q||durd ||<qd |vrd|d }nd }d|vrd|d}nd }|d d}|d d}|r@|dds@|dd7<|rf|ddsf|dd7<tj||||d d t j d} t| } d} | D]`} d} | drt | t j } n2| drt | t j} n| drt | t j} || q| r|dd|vr||dqd |S)NZ dst_binaryz4diff skipped: destination file appears to be binary Z src_binaryz/diff skipped: source file appears to be binary Z dst_largerz7diff skipped: destination file size is greater than %d Z src_largerz2diff skipped: source file size is greater than %d beforeafter)rr before_headerz before: %s after_headerz after: %sTrrz \ No newline at end of file )ZfromfileZtofileZ fromfiledateZ tofiledatenF+-z@@Zprepared) isinstancelistappendrr splitlinesendswithdifflibZ unified_diffr^Z DIFF_CONTEXT startswithrZCOLOR_DIFF_ADDZCOLOR_DIFF_REMOVEZCOLOR_DIFF_LINESjoin) rZdifflistretrlxrrZ before_linesZ after_linesZdifferZ difflinesZhas_diffliner r r! _get_diffZsl           zCallbackBase._get_diffcCs(|ddrd}n|d|d}|S)zV retrieves the value to be displayed as a label for an item entry from a result objectZ_ansible_no_logFz(censored due to no_log)Z_ansible_item_labelitem)rb)rrcrr r r!_get_item_labels zCallbackBase._get_item_labelcCs |jd=dSNresults)rarrcr r r!_process_itemsszCallbackBase._process_itemscCs^|tjvrZd|vrBt|D] }|tvr|ds||qn|jD]}||dqHdS)z' removes data from results for display r_N)r^Z _ACTION_DEBUGrr\_DEBUG_ALLOWED_KEYSrpoprR)rrcZ task_namerpZhidmer r r!_clean_resultss  zCallbackBase._clean_resultscCs$|}|r |jjd||ddS)Nz task path: %s)r)Zget_pathrIrS)rtaskrpathr r r!_print_task_pathszCallbackBase._print_task_pathcCsdSrr )rZ play_contextr r r!set_play_contextszCallbackBase.set_play_contextcOsdSrr r$r r r!on_anyszCallbackBase.on_anycCsdSrr )rhostr ignore_errorsr r r!runner_on_failedszCallbackBase.runner_on_failedcCsdSrr rrrr r r! runner_on_okszCallbackBase.runner_on_okcCsdSrr )rrrr r r!runner_on_skippedszCallbackBase.runner_on_skippedcCsdSrr rr r r!runner_on_unreachablesz"CallbackBase.runner_on_unreachablecCsdSrr rr r r!runner_on_no_hostsszCallbackBase.runner_on_no_hostscCsdSrr )rrrjidclockr r r!runner_on_async_pollsz!CallbackBase.runner_on_async_pollcCsdSrr rrrrr r r!runner_on_async_okszCallbackBase.runner_on_async_okcCsdSrr rr r r!runner_on_async_failedsz#CallbackBase.runner_on_async_failedcCsdSrr rr r r!playbook_on_startszCallbackBase.playbook_on_startcCsdSrr )rrhandlerr r r!playbook_on_notifyszCallbackBase.playbook_on_notifycCsdSrr rr r r!playbook_on_no_hosts_matchedsz)CallbackBase.playbook_on_no_hosts_matchedcCsdSrr rr r r!playbook_on_no_hosts_remainingsz+CallbackBase.playbook_on_no_hosts_remainingcCsdSrr )rrUis_conditionalr r r!playbook_on_task_startsz#CallbackBase.playbook_on_task_startc CsdSrr rZvarnameZprivatepromptZencryptZconfirmZ salt_sizeZsaltdefaultZunsafer r r!playbook_on_vars_promptsz$CallbackBase.playbook_on_vars_promptcCsdSrr rr r r!playbook_on_setupszCallbackBase.playbook_on_setupcCsdSrr )rr imported_filer r r!playbook_on_import_for_hostsz(CallbackBase.playbook_on_import_for_hostcCsdSrr )rr missing_filer r r!playbook_on_not_import_for_hostsz,CallbackBase.playbook_on_not_import_for_hostcCsdSrr )rrUr r r!playbook_on_play_startsz#CallbackBase.playbook_on_play_startcCsdSrr rZstatsr r r!playbook_on_statsszCallbackBase.playbook_on_statscCsdSrr )rrrlr r r! on_file_diffszCallbackBase.on_file_diffcOs|||dSr)rr$r r r! v2_on_anyszCallbackBase.v2_on_anycCs|j}|||j|dSr)r_r`rra)rrcrrr r r!v2_runner_on_faileds z CallbackBase.v2_runner_on_failedcCs|j}|||jdSr)r_r`rrarrcrr r r!v2_runner_on_oks zCallbackBase.v2_runner_on_okc Cs0tjr,|j}|||t|jdidSr)r^ZDISPLAY_SKIPPED_HOSTSr_r`rrrLrarr r r!v2_runner_on_skippeds z!CallbackBase.v2_runner_on_skippedcCs|j}|||jdSr)r_r`rrarr r r!v2_runner_on_unreachable s z%CallbackBase.v2_runner_on_unreachablecCs0|j}|jd}d}|||j||dS)Nansible_job_idr)r_r`rarbr)rrcrrrr r r!v2_runner_on_async_poll s  z$CallbackBase.v2_runner_on_async_pollcCs*|j}|jd}|||j|dS)Nr)r_r`rarbrrrcrrr r r!v2_runner_on_async_oks  z"CallbackBase.v2_runner_on_async_okcCsH|j}|jd}|s4d|jvr4|jdd}|||j|dS)NrZ async_result)r_r`rarbrrr r r!v2_runner_on_async_faileds   z&CallbackBase.v2_runner_on_async_failedcCs |dSr)r)rZplaybookr r r!v2_playbook_on_start"sz!CallbackBase.v2_playbook_on_startcCs|||dSr)r)rrrr r r!v2_playbook_on_notify%sz"CallbackBase.v2_playbook_on_notifycCs |dSr)rrr r r!v2_playbook_on_no_hosts_matched(sz,CallbackBase.v2_playbook_on_no_hosts_matchedcCs |dSr)rrr r r!!v2_playbook_on_no_hosts_remaining+sz.CallbackBase.v2_playbook_on_no_hosts_remainingcCs||j|dSr)rrU)rrrr r r!v2_playbook_on_task_start.sz&CallbackBase.v2_playbook_on_task_startcCsdSrr rrr r r!!v2_playbook_on_cleanup_task_start2sz.CallbackBase.v2_playbook_on_cleanup_task_startcCsdSrr rr r r!!v2_playbook_on_handler_task_start5sz.CallbackBase.v2_playbook_on_handler_task_startc Cs|||||||||| dSr)rrr r r!v2_playbook_on_vars_prompt8sz'CallbackBase.v2_playbook_on_vars_promptcCs|j}|||dSr)r_r`r)rrcrrr r r!v2_playbook_on_import_for_host<s z+CallbackBase.v2_playbook_on_import_for_hostcCs|j}|||dSr)r_r`r)rrcrrr r r!"v2_playbook_on_not_import_for_hostAs z/CallbackBase.v2_playbook_on_not_import_for_hostcCs||jdSr)rrU)rZplayr r r!v2_playbook_on_play_startEsz&CallbackBase.v2_playbook_on_play_startcCs||dSr)rrr r r!v2_playbook_on_statsHsz!CallbackBase.v2_playbook_on_statscCs*d|jvr&|j}|||jddS)Nrl)rar_r`rrr r r!v2_on_file_diffKs  zCallbackBase.v2_on_file_diffcCsdSrr )rZ included_filer r r!v2_playbook_on_includePsz#CallbackBase.v2_playbook_on_includecCsdSrr rr r r!v2_runner_item_on_okSsz!CallbackBase.v2_runner_item_on_okcCsdSrr rr r r!v2_runner_item_on_failedVsz%CallbackBase.v2_runner_item_on_failedcCsdSrr rr r r!v2_runner_item_on_skippedYsz&CallbackBase.v2_runner_item_on_skippedcCsdSrr rr r r!v2_runner_retry\szCallbackBase.v2_runner_retrycCsdS)zWEvent used when host begins execution of a task .. versionadded:: 2.8 Nr )rrrr r r!v2_runner_on_start_szCallbackBase.v2_runner_on_start)NN)NNN)r)NTFT)F)F)N)TNNFNNNN)F)TNNFNNNN)Ir*r+r,__doc__r"rZ _copy_resultrZr[rQ staticmethodrdrfrrrrrrrrr^Z COLOR_DEBUGrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr r r r!rs     T <      )=Z __future__rrrtypeZ __metaclass__rrhrerMr} collectionsrcollections.abcrcopyrZansiblerr^Z+ansible.module_utils.common.text.convertersr Zansible.module_utils.sixr Zansible.parsing.ajsonr Zansible.parsing.yaml.dumperr Zansible.parsing.yaml.objectsr Zansible.pluginsrZansible.utils.colorrZansible.utils.displayrZansible.utils.unsafe_proxyrrrZansible.vars.cleanrrrCrJ__all__ frozensetrZ_YAML_TEXT_TYPESr.compiler>rr1r2r;r@rEZ data_typeZadd_representerrr r r r!sN