
    Vh                     ~    d dl mZ d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  G d	 d
e      Zy)    )annotationsao  
author: Unknown (!UNKNOWN)
name: log_plays
type: notification
short_description: write playbook output to log file
description:
  - This callback writes playbook output to a file per host in the C(/var/log/ansible/hosts) directory.
requirements:
  - Whitelist in configuration
  - A writeable C(/var/log/ansible/hosts) directory by the user executing Ansible on the controller
options:
  log_folder:
    default: /var/log/ansible/hosts
    description: The folder where log files will be created.
    type: str
    env:
      - name: ANSIBLE_LOG_FOLDER
    ini:
      - section: callback_log_plays
        key: log_folder
N)makedirs_safe)to_bytes)MutableMapping)AnsibleJSONEncoder)CallbackBasec                       e Zd ZdZdZdZdZdZdZe	d        Z
 fdZd fd		Zd
 ZddZd Zd Zd Zd Zd Zd Zd Z xZS )CallbackModulezD
    logs playbook results, per host, in /var/log/ansible/hosts
    g       @notificationzcommunity.general.log_playsTz%b %d %Y %H:%M:%Sc                *    |  d| d| d| d| d| dS )Nz - z

 )nowplaybook	task_nametask_actioncategorydatas         p/home/dcms/DCMS/lib/python3.12/site-packages/ansible_collections/community/general/plugins/callback/log_plays.py	_make_msgzCallbackModule._make_msg<   s0    c(3yk[MXJcRVQWW[\\    c                *    t         t        |           y N)superr
   __init__)self	__class__s    r   r   zCallbackModule.__init__@   s    nd,.r   c                    t         t        |   |||       | j                  d      | _        t
        j                  j                  | j                        st        | j                         y y )N)	task_keysvar_optionsdirect
log_folder)	r   r
   set_options
get_optionr!   ospathexistsr   )r   r   r   r    r   s       r   r"   zCallbackModule.set_optionsD   sP    nd/)Q\ek/l//,7ww~~doo.$//* /r   c           
        |j                   }t        |t              rad|v rd}nZ|j                         }|j	                  dd       }t        j                  |t              }|t        j                  |       d| d}t        j                  j                  | j                  |j                  j                               }t        j                  | j                   t        j"                               }t%        | j'                  || j(                  |j*                  j,                  |j*                  j.                  ||            }t1        |d      5 }|j3                  |       d d d        y # 1 sw Y   y xY w)N_ansible_verbose_overrideomitted
invocation)clsz =>  ab)_result
isinstancer   copypopjsondumpsr   r$   r%   joinr!   _hostget_nametimestrftimeTIME_FORMAT	localtimer   r   r   _tasknameactionopenwrite)	r   resultr   r   r*   r%   r   msgfds	            r   logzCallbackModule.logL   s   ~~dN+*d2 yy{!XXlD9
zz$,>?)"jj45T$qADww||DOOV\\-B-B-DEmmD,,dnn.>?t~~c4==&,,:K:KV\\M`M`bjlpqr$ 	HHSM	 	 	s   E**E3c                (    | j                  |d       y )NFAILEDrC   )r   r@   ignore_errorss      r   v2_runner_on_failedz"CallbackModule.v2_runner_on_failed`   s    "r   c                (    | j                  |d       y )NOKrF   r   r@   s     r   v2_runner_on_okzCallbackModule.v2_runner_on_okc   s    r   c                (    | j                  |d       y )NSKIPPEDrF   rK   s     r   v2_runner_on_skippedz#CallbackModule.v2_runner_on_skippedf   s    #r   c                (    | j                  |d       y )NUNREACHABLErF   rK   s     r   v2_runner_on_unreachablez'CallbackModule.v2_runner_on_unreachablei   s    'r   c                (    | j                  |d       y )NASYNC_FAILEDrF   rK   s     r   v2_runner_on_async_failedz(CallbackModule.v2_runner_on_async_failedl   s    (r   c                &    |j                   | _        y r   )
_file_namer   )r   r   s     r   v2_playbook_on_startz#CallbackModule.v2_playbook_on_starto   s     ++r   c                *    | j                  |d|       y )NIMPORTEDrF   )r   r@   imported_files      r   v2_playbook_on_import_for_hostz-CallbackModule.v2_playbook_on_import_for_hostr   s    ]3r   c                *    | j                  |d|       y )NNOTIMPORTEDrF   )r   r@   missing_files      r   "v2_playbook_on_not_import_for_hostz1CallbackModule.v2_playbook_on_not_import_for_hostu   s    5r   )NNN)F)__name__
__module____qualname____doc__CALLBACK_VERSIONCALLBACK_TYPECALLBACK_NAMECALLBACK_NEEDS_WHITELISTr9   staticmethodr   r   r"   rC   rH   rL   rO   rR   rU   rX   r\   r`   __classcell__)r   s   @r   r
   r
   1   sp     "M1M#%K] ]/+(#$(),46r   r
   )
__future__r   DOCUMENTATIONr$   r7   r2   ansible.utils.pathr   +ansible.module_utils.common.text.convertersr   /ansible.module_utils.common._collections_compatr   ansible.parsing.ajsonr   ansible.plugins.callbackr   r
   r   r   r   <module>rr      s9    #, 
   , @ J 4 1E6\ E6r   