
    Vh                    Z    d dl mZ d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	)
    )annotationsa  
name: nrdp
type: notification
author: "Remi VERCHERE (@rverchere)"
short_description: Post task results to a Nagios server through nrdp
description:
  - This callback send playbook result to Nagios.
  - Nagios shall use NRDP to receive passive events.
  - The passive check is sent to a dedicated host/service for Ansible.
options:
  url:
    description: URL of the nrdp server.
    required: true
    env:
      - name: NRDP_URL
    ini:
      - section: callback_nrdp
        key: url
    type: string
  validate_certs:
    description: Validate the SSL certificate of the nrdp server. (Used for HTTPS URLs).
    env:
      - name: NRDP_VALIDATE_CERTS
    ini:
      - section: callback_nrdp
        key: validate_nrdp_certs
      - section: callback_nrdp
        key: validate_certs
    type: boolean
    default: false
    aliases: [validate_nrdp_certs]
  token:
    description: Token to be allowed to push nrdp events.
    required: true
    env:
      - name: NRDP_TOKEN
    ini:
      - section: callback_nrdp
        key: token
    type: string
  hostname:
    description: Hostname where the passive check is linked to.
    required: true
    env:
      - name: NRDP_HOSTNAME
    ini:
      - section: callback_nrdp
        key: hostname
    type: string
  servicename:
    description: Service where the passive check is linked to.
    required: true
    env:
      - name: NRDP_SERVICENAME
    ini:
      - section: callback_nrdp
        key: servicename
    type: string
)	urlencode)to_bytes)open_url)CallbackBasec                  `     e Zd ZdZdZdZdZdZdZdZ	dZ
d	Z fd
Zd fd	Zd Zd Zd Z xZS )CallbackModulezD
    send ansible-playbook to Nagios server using nrdp protocol
    g       @notificationzcommunity.general.nrdpTr            c                T    t         t        |           d| _        d | _        d | _        y )NF)superr	   __init__printed_playbookplaybook_nameplay)self	__class__s    k/home/dcms/DCMS/lib/python3.12/site-packages/ansible_collections/community/general/plugins/callback/nrdp.pyr   zCallbackModule.__init__[   s'    nd,. %!	    c                "   t         t        |   |||       | j                  d      | _        | j                  j                  d      s| xj                  dz  c_        | j                  d      | _        | j                  d      | _        | j                  d      | _        | j                  d      | _	        | j                  xs( | j                  xs | j                  xs | j                  	 #| j                  j                  d       d	| _        y y )
N)	task_keysvar_optionsdirecturl/tokenhostnameservicenamevalidate_certszNRDP callback wants the NRDP_URL, NRDP_TOKEN, NRDP_HOSTNAME, NRDP_SERVICENAME environment variables'. The NRDP callback plugin is disabled.T)r   r	   set_options
get_optionr   endswithr   r   r    validate_nrdp_certs_displaywarningdisabled)r   r   r   r   r   s       r   r"   zCallbackModule.set_optionsb   s    nd/)Q\ek/l??5)xx  %HHOH__W-

3??=9#'??3C#D HH !

 !dmm !  T*MM!! #K L
 !DM*r   c                   d}|dz  }|dz  }|d| j                    dz  }|d| j                   dz  }|d| d	z  }|d
| dz  }|dz  }|dz  }d| j                  t        |      d}	 t	        | j
                  t        |      d| j                        }|j                         S # t        $ r(}| j                  j                  d|        Y d}~yd}~ww xY w)a  
        nrpd service check send XMLDATA like this:
        <?xml version='1.0'?>
            <checkresults>
                <checkresult type='service'>
                    <hostname>somehost</hostname>
                    <servicename>someservice</servicename>
                    <state>1</state>
                    <output>WARNING: Danger Will Robinson!|perfdata</output>
                </checkresult>
            </checkresults>
        z<?xml version='1.0'?>
z<checkresults>
z<checkresult type='service'>
z
<hostname>z</hostname>
z<servicename>z</servicename>
z<state>z	</state>
z<output>z
</output>
z</checkresult>
z</checkresults>
submitcheck)cmdr   XMLDATAPOST)datamethodr!   z!NRDP callback cannot send result N)r   r    r   r   r   r   r   r%   read	Exceptionr&   r'   )r   statemsgxmldatabodyresponseexs          r   
_send_nrdpzCallbackModule._send_nrdpv   s    ,%%33Zm<<]4#3#3"44DEEWUG:..XcU+..%%&& !ZZ(
	L%.t_'-/3/G/GIH ==?" 	LMM!!$EbT"JKK	Ls   );B% %	C.CCc                    || _         y)z:
        Display Playbook and play start messages
        N)r   )r   r   s     r   v2_playbook_on_play_startz(CallbackModule.v2_playbook_on_play_start   s     	r   c                   | j                   }d}t        |j                  j                               }dx}}|D ]U  }|j	                  |      }|d| d|d    d| d|d    d| d	|d
    d| d|d    dz  }||d   z  }||d
   z  }||d   z  }W | d| }	|r| j                  | j                  |	       y|r| j                  | j                  |	       y| j                  | j                  |	       y)z8
        Display info about playbook statistics
         r   'z_ok'=okz 'z
_changed'=changedz_unreachable'=unreachablez	_failed'=failures z | N)	r   sorted	processedkeys	summarizer8   CRITICALWARNINGOK)
r   statsnamegstatshostscriticalr'   hoststatr3   s
             r   v2_playbook_on_statsz#CallbackModule.v2_playbook_on_stats   sM    yyu++-.7 		'D??4(DD6tDzl"TF*T)_<MRPTvUcdhivdwcxxz{  {A  AJ  KO  PZ  K[  J\  \]  ^F Z((H]++HtI&G		' c&"OODMM3/OODLL#. OODGGS)r   )NNN)__name__
__module____qualname____doc__CALLBACK_VERSIONCALLBACK_TYPECALLBACK_NAMECALLBACK_NEEDS_WHITELISTrI   rH   rG   UNKNOWNr   r"   r8   r:   rQ   __classcell__)r   s   @r   r	   r	   K   sQ     "M,M# 
BGHG!($LL*r   r	   N)
__future__r   DOCUMENTATION+ansible.module_utils.six.moves.urllib.parser   +ansible.module_utils.common.text.convertersr   ansible.module_utils.urlsr   ansible.plugins.callbackr   r	    r   r   <module>rc      s/    #:x B @ . 1s*\ s*r   