
    Vhu                         d dl mZmZmZ eZdZdZdZd dl	m
Z
 d dlmZ d dlmZ d dlmc mc mc mc mZ  G d	 d
e      Zd Zedk(  r e        yy)    )absolute_importdivisionprint_functiona%&  
---
module: zabbix_proxy
short_description: Create/delete/get/update Zabbix proxies
description:
   - This module allows you to create, modify, get and delete Zabbix proxy entries.
author:
    - "Alen Komic (@akomic)"
requirements:
    - "python >= 3.9"
options:
    proxy_name:
        description:
            - Name of the proxy in Zabbix.
        required: true
        type: str
    proxy_address:
        description:
            - Deprecated for Zabbix version >= 7.0.
            - Comma-delimited list of IP/CIDR addresses or DNS names to accept active proxy requests from.
            - Requires I(status=active).
        required: false
        type: str
    description:
        description:
            - Description of the proxy.
        required: false
        type: str
    status:
        description:
            - Deprecated for Zabbix version >= 7.0.
            - Type of proxy. (4 - active, 5 - passive)
        required: false
        choices: ["active", "passive"]
        default: "active"
        type: str
    tls_connect:
        description:
            - Connections to proxy.
        required: false
        choices: ["no_encryption","PSK","certificate"]
        default: "no_encryption"
        type: str
    tls_accept:
        description:
            - Connections from proxy.
        required: false
        choices: ["no_encryption","PSK","certificate"]
        default: "no_encryption"
        type: str
    ca_cert:
        description:
            - Certificate issuer.
        required: false
        aliases: [ tls_issuer ]
        type: str
    tls_subject:
        description:
            - Certificate subject.
        required: false
        type: str
    tls_psk_identity:
        description:
            - PSK identity. Required if either I(tls_connect) or I(tls_accept) has PSK enabled.
        required: false
        type: str
    tls_psk:
        description:
            - The preshared key, at least 32 hex digits. Required if either I(tls_connect) or I(tls_accept) has PSK enabled.
        required: false
        type: str
    state:
        description:
            - State of the proxy.
            - On C(present), it will create if proxy does not exist or update the proxy if the associated data is different.
            - On C(absent) will remove a proxy if it exists.
        required: false
        choices: ["present", "absent"]
        default: "present"
        type: str
    interface:
        description:
            - Deprecated for Zabbix version >= 7.0.
            - Dictionary with params for the interface when proxy is in passive mode.
            - For more information, review proxy interface documentation at
            - U(https://www.zabbix.com/documentation/current/en/manual/api/reference/proxy/object#proxy-interface).
        required: false
        suboptions:
            useip:
                type: int
                description:
                    - Connect to proxy interface with IP address instead of DNS name.
                    - 0 (don't use ip), 1 (use ip).
                default: 0
                choices: [0, 1]
            ip:
                type: str
                description:
                    - IP address used by proxy interface.
                    - Required if I(useip=1).
                default: ""
            dns:
                type: str
                description:
                    - DNS name of the proxy interface.
                    - Required if I(useip=0).
                default: ""
            port:
                type: str
                description:
                    - Port used by proxy interface.
                default: "10051"
        default: {}
        type: dict
    address:
        description:
            - Parameter introduced in Zabbix 7.0.
            - IP address or DNS name to connect to.
            - Required if the Zabbix proxy operating mode is passive
        required: false
        type: str
    port:
        description:
            - Parameter introduced in Zabbix 7.0.
            - Port number to connect to.
            - supported if the Zabbix proxy operating mode is passive.
        required: false
        type: str
        default: "10051"
    proxy_group:
        description:
            - Parameter introduced in Zabbix 7.0.
            - Proxy group name.
        required: false
        type: str
    local_address:
        description:
            - Parameter introduced in Zabbix 7.0.
            - Address for active agents. IP address or DNS name to connect to.
            - Required if proxy_groupid is not 0
        required: false
        type: str
    local_port:
        description:
            - Parameter introduced in Zabbix 7.0.
            - Local proxy port number to connect to.
            - Supported if proxy_groupid is not 0
        required: false
        type: str
        default: "10051"
    allowed_addresses:
        description:
            - Parameter introduced in Zabbix 7.0.
            - Comma-delimited IP addresses or DNS names of active Zabbix proxy.
        required: false
        type: str
    operating_mode:
        description:
            - Parameter introduced in Zabbix 7.0.
            - Type of proxy.
        required: false
        choices: ["active", "passive"]
        default: "active"
        type: str
    custom_timeouts:
        description:
            - Parameter introduced in Zabbix 7.0.
            - Whether to override global item timeouts on the proxy level.
            - 0 - use global settings; 1 - override timeouts.
        required: false
        type: int
        default: 0
        choices: [0, 1]
    timeout_zabbix_agent:
        description:
            - Parameter introduced in Zabbix 7.0.
            - Spend no more than this number of seconds on Zabbix agent checks processing.
            - Accepts seconds or time unit with suffix (e.g., 30s, 1m).
            - "Possible values range: 1-600s."
            - Rired if if C(custom_timeouts) is set to 1.
        required: false
        type: str
    timeout_simple_check:
        description:
            - Parameter introduced in Zabbix 7.0.
            - Spend no more than this number of seconds on simple checks processing.
            - Accepts seconds or time unit with suffix (e.g., 30s, 1m).
            - "Possible values range: 1-600s."
            - Required if if C(custom_timeouts) is set to 1.
        required: false
        type: str
    timeout_snmp_agent:
        description:
            - Parameter introduced in Zabbix 7.0.
            - Spend no more than this number of seconds on SNMP agent checks processing.
            - Accepts seconds or time unit with suffix (e.g., 30s, 1m).
            - "Possible values range: 1-600s."
            - Required if if C(custom_timeouts) is set to 1.
        required: false
        type: str
    timeout_external_check:
        description:
            - Parameter introduced in Zabbix 7.0.
            - Spend no more than this number of seconds on external checks processing.
            - Accepts seconds or time unit with suffix (e.g., 30s, 1m).
            - "Possible values range: 1-600s."
            - Required if if C(custom_timeouts) is set to 1.
        required: false
        type: str
    timeout_db_monitor:
        description:
            - Parameter introduced in Zabbix 7.0.
            - Spend no more than this number of seconds on DB checks processing.
            - Accepts seconds or time unit with suffix (e.g., 30s, 1m).
            - "Possible values range: 1-600s."
            - Required if if C(custom_timeouts) is set to 1.
        required: false
        type: str
    timeout_http_agent:
        description:
            - Parameter introduced in Zabbix 7.0.
            - Spend no more than this number of seconds on HTTPagent checks processing.
            - Accepts seconds or time unit with suffix (e.g., 30s, 1m).
            - "Possible values range: 1-600s."
            - Required if if C(custom_timeouts) is set to 1.
        required: false
        type: str
    timeout_ssh_agent:
        description:
            - Parameter introduced in Zabbix 7.0.
            - Spend no more than this number of seconds on SSH checks processing.
            - Accepts seconds or time unit with suffix (e.g., 30s, 1m).
            - "Possible values range: 1-600s."
            - Required if if C(custom_timeouts) is set to 1.
        required: false
        type: str
    timeout_telnet_agent:
        description:
            - Parameter introduced in Zabbix 7.0.
            - Spend no more than this number of seconds on Telnet checks processing.
            - Accepts seconds or time unit with suffix (e.g., 30s, 1m).
            - "Possible values range: 1-600s."
            - Required if if C(custom_timeouts) is set to 1.
        required: false
        type: str
    timeout_script:
        description:
            - Parameter introduced in Zabbix 7.0.
            - Spend no more than this number of seconds on script type checks processing.
            - Accepts seconds or time unit with suffix (e.g., 30s, 1m).
            - "Possible values range: 1-600s."
            - Required if if C(custom_timeouts) is set to 1.
        required: false
        type: str
    timeout_browser:
        description:
            - Parameter introduced in Zabbix 7.0.
            - Spend no more than this number of seconds on browser type checks processing.
            - Accepts seconds or time unit with suffix (e.g., 30s, 1m).
            - "Possible values range: 1-600s."
            - Required if if C(custom_timeouts) is set to 1.
        required: false
        type: str

extends_documentation_fragment:
- community.zabbix.zabbix

ak  
# If you want to use Username and Password to be authenticated by Zabbix Server
- name: Set credentials to access Zabbix Server API
  ansible.builtin.set_fact:
    ansible_user: Admin
    ansible_httpapi_pass: zabbix

# If you want to use API token to be authenticated by Zabbix Server
# https://www.zabbix.com/documentation/current/en/manual/web_interface/frontend_sections/administration/general#api-tokens
- name: Set API token
  ansible.builtin.set_fact:
    ansible_zabbix_auth_key: 8ec0d52432c15c91fcafe9888500cf9a607f44091ab554dbee860f6b44fac895

- name: Create or update a proxy with proxy type active (Zabbix version < 7.0)
  # set task level variables as we change ansible_connection plugin here
  vars:
    ansible_network_os: community.zabbix.zabbix
    ansible_connection: httpapi
    ansible_httpapi_port: 443
    ansible_httpapi_use_ssl: true
    ansible_httpapi_validate_certs: false
    ansible_zabbix_url_path: "zabbixeu"  # If Zabbix WebUI runs on non-default (zabbix) path ,e.g. http://<FQDN>/zabbixeu
    ansible_host: zabbix-example-fqdn.org
  community.zabbix.zabbix_proxy:
    proxy_name: ExampleProxy
    description: ExampleProxy
    status: active
    state: present
    proxy_address: ExampleProxy.local

- name: Create a new passive proxy using only its IP (Zabbix version < 7.0)
  # set task level variables as we change ansible_connection plugin here
  vars:
    ansible_network_os: community.zabbix.zabbix
    ansible_connection: httpapi
    ansible_httpapi_port: 443
    ansible_httpapi_use_ssl: true
    ansible_httpapi_validate_certs: false
    ansible_zabbix_url_path: "zabbixeu"  # If Zabbix WebUI runs on non-default (zabbix) path ,e.g. http://<FQDN>/zabbixeu
    ansible_host: zabbix-example-fqdn.org
  community.zabbix.zabbix_proxy:
    proxy_name: ExampleProxy
    description: ExampleProxy
    status: passive
    state: present
    interface:
      useip: 1
      ip: 10.1.1.2
      port: 10051

- name: Create a new passive proxy using only its DNS (Zabbix version < 7.0)
  # set task level variables as we change ansible_connection plugin here
  vars:
    ansible_network_os: community.zabbix.zabbix
    ansible_connection: httpapi
    ansible_httpapi_port: 443
    ansible_httpapi_use_ssl: true
    ansible_httpapi_validate_certs: false
    ansible_zabbix_url_path: "zabbixeu"  # If Zabbix WebUI runs on non-default (zabbix) path ,e.g. http://<FQDN>/zabbixeu
    ansible_host: zabbix-example-fqdn.org
  community.zabbix.zabbix_proxy:
    proxy_name: ExampleProxy
    description: ExampleProxy
    status: passive
    state: present
    interface:
      dns: proxy.example.com
      port: 10051

- name: Create or update a proxy with proxy type active (Zabbix version >= 7.0)
  # set task level variables as we change ansible_connection plugin here
  vars:
    ansible_network_os: community.zabbix.zabbix
    ansible_connection: httpapi
    ansible_httpapi_port: 443
    ansible_httpapi_use_ssl: true
    ansible_httpapi_validate_certs: false
    ansible_zabbix_url_path: "zabbixeu"  # If Zabbix WebUI runs on non-default (zabbix) path ,e.g. http://<FQDN>/zabbixeu
    ansible_host: zabbix-example-fqdn.org
  community.zabbix.zabbix_proxy:
    proxy_name: ExampleProxy
    description: ExampleProxy
    operating_mode: active
    state: present
    allowed_addresses: ExampleProxy.local

- name: Create a new passive proxy using only its IP (Zabbix version >= 7.0)
  # set task level variables as we change ansible_connection plugin here
  vars:
    ansible_network_os: community.zabbix.zabbix
    ansible_connection: httpapi
    ansible_httpapi_port: 443
    ansible_httpapi_use_ssl: true
    ansible_httpapi_validate_certs: false
    ansible_zabbix_url_path: "zabbixeu"  # If Zabbix WebUI runs on non-default (zabbix) path ,e.g. http://<FQDN>/zabbixeu
    ansible_host: zabbix-example-fqdn.org
  community.zabbix.zabbix_proxy:
    proxy_name: ExampleProxy
    description: ExampleProxy
    operating_mode: passive
    state: present
    address: 10.1.1.2
    port: 10051

- name: Create a new passive proxy using only its DNS (Zabbix version >= 7.0)
  # set task level variables as we change ansible_connection plugin here
  vars:
    ansible_network_os: community.zabbix.zabbix
    ansible_connection: httpapi
    ansible_httpapi_port: 443
    ansible_httpapi_use_ssl: true
    ansible_httpapi_validate_certs: false
    ansible_zabbix_url_path: "zabbixeu"  # If Zabbix WebUI runs on non-default (zabbix) path ,e.g. http://<FQDN>/zabbixeu
    ansible_host: zabbix-example-fqdn.org
  community.zabbix.zabbix_proxy:
    proxy_name: ExampleProxy
    description: ExampleProxy
    operating_mode: passive
    state: present
    address: proxy.example.com
    port: 10051
z # )AnsibleModule)
ZabbixBase)LooseVersionNc                   8     e Zd Zd fd	Zd Zd Zd Zd Z xZS )Proxyc                 >    t         t        |   |||       d | _        y )N)superr
   __init__existing_data)selfmodulezbxzapi_wrapper	__class__s       q/home/dcms/DCMS/lib/python3.12/site-packages/ansible_collections/community/zabbix/plugins/modules/zabbix_proxy.pyr   zProxy.__init__  s    eT#FC>!    c                 B   t        | j                        t        d      k  r,| j                  j                  j	                  ddd|id      }n*| j                  j                  j	                  dd|id      }t        |      dkD  rd|d   v r|d   | _        |d   d   S |S )	N7.0extendhost)outputselectInterfacefilternamer   r   r   proxyid)r   _zbx_api_version_zapiproxygetlenr   )r   
proxy_nameresults      r   proxy_existszProxy.proxy_exists  s    --.e1DDZZ%%))X>F6<j5I+K LF ZZ%%))X6<j5I+K LF v;?yF1I5!'D!9Y''Mr   c                    	 | j                   j                  r| j                   j                  d       i }|D ]  }||   s	||   ||<    t        | j                        t        d      k  rd|v r9|d   dk7  r1|j                  dd       nd|v r|d	   d
k7  r|j                  dd       t        | j                        t        d      k  rd|v r|d   dk7  r|j                  dd       nd|v r|d	   dk7  r|j                  dd       |d   r{|d   }| j                  j                  j                  dd|id      }t        |      dk(  r| j                   j                  d|z         |d   d   }|j                  dd       ||d<   | j                  j                  j                  |      }t        | j                        t        d      k  r+| j                   j                  dd|d   d|d   d       n*| j                   j                  dd|d   d|d	   d       t        |      dk\  r|d   d   S y # t        $ r{}t        | j                        t        d      k  r&| j                   j                  d|d   d|       n*| j                   j                  d|d   d|       Y d }~y Y d }~y d }~ww xY w)NTchangedr   proxy_addressstatus5Fallowed_addressesoperating_mode0	interface61proxy_groupr   r   r   r   Failed to find proxy group %smsgproxy_groupidzSuccessfully added proxy r    ()r*   r&      proxyidszFailed to create proxy : )_module
check_mode	exit_jsonr   r    popr!   
proxygroupr#   r$   	fail_jsonr"   create	Exception)	r   data
parametersitemr4   r&   proxy_group_idproxy_ids_listes	            r   	add_proxyzProxy.add_proxy  s   0	`||&&&&t&4J 2:'+DzJt$2 D112\%5HH"d*tH~/DNN?E:&$.48H3IS3PNN#6>D112\%5HH$&4>S+@NN;6$&40@+AS+HNN;6&"&}"5K!ZZ2266(W]_jVk7lmF6{a'..3RVa3b.c%+AY%?NNN=%82@J/!ZZ--44Z@ND112\%5HH&&tTXY_T`bfgobp.q ' s &&tTXY_T`bfgwbx.y ' {>"a'%j1!44 ( 	`D112\%5HH&&dSYl\]+^&_&&dSYl\]+^&__ `	`s   >H9 G6H9 9	J=A,J88J=c           	      x   	 | j                   j                  r| j                   j                  d       | j                  j                  j                  |g       | j                   j                  dd|z         y # t        $ r5}| j                   j                  d|dt        |             Y d }~y d }~ww xY w)NTr)   zSuccessfully deleted proxy %sr;   zFailed to delete proxy r>   r6   )	r?   r@   rA   r!   r"   deleterF   rD   str)r   proxy_idr%   rL   s       r   delete_proxyzProxy.delete_proxy  s    	_||&&&&t&4JJ##XJ/LL""48WZd8d"e 	_LL""*VYZ[V\']"^^	_s   A8A; ;	B9+B44B9c                    	 | j                   j                  r| j                   j                  d       i }|D ]  }||   s	||   ||<    t        | j                        t        d      k  rd}d}nd}d}d|v rt        |d         |d<   |d	   r{|d	   }| j                  j                  j                  d
d|id      }t        |      dk(  r| j                   j                  d|z         |d   d   }	|j                  d	d       |	|d<   d|v r2||   |k(  r|j                  dd       nt        |d   d         |d   d<   ||   |k(  r|j                  dd       n|j                  dd       ||d<   i }
t        j                  t        j                  || j                  |
            }|i k(  r| j                   j                  d       y ||d<   | j                  j                   j#                  |       t        | j                        t        d      k  r(| j                   j                  dd|d   d|d       y | j                   j                  dd|d   d|d       y # t$        $ r{}t        | j                        t        d      k  r&| j                   j                  d|d   d|       n*| j                   j                  d|d   d|       Y d }~y Y d }~y d }~ww xY w)NTr)   r   r,   r-   r/   r0   custom_timeoutsr4   r   r   r   r   r5   r6   r8   Fr1   useiptls_connect
tls_acceptr   zSuccessfully updated proxy r   r9   r:   r;   zFailed to update proxy r>   )r?   r@   rA   r   r    rP   r!   rC   r#   r$   rD   rB   zabbix_utilshelper_cleanup_datahelper_compare_dictionariesr   r"   updaterF   )r   rQ   rG   rH   keystatus_or_operating_mode_namestatus_or_operating_mode_valuer4   r&   rJ   change_parameters
differencerL   s                r   update_proxyzProxy.update_proxy  s   F	>||&&&&t&4J 09&*3iJsO0 D112\%5HH08-14.0@-14.$
247
CT8U4VJ01&"&}"5K!ZZ2266(W]_jVk7lmF6{a'..3RVa3b.c%+AY%?NNN=%82@J/j(;<@^^NN;6 8;:k;RSZ;[7\J{+G478<ZZ}e4 |U3$,Jy! "%99,:b:bcmos  pB  pB  DU  ;V  WJR&&u&5(0
9%

  ''
3 5 56e9LLLL** $GKF|U]^ + 
 LL** $GKF|U]^ +   	>D112\%5HH&&,0L!,=& > &&,0L!,=& > >>	>s,   >I% FI% 
A2I% ='I% %	K).A,K$$K))NN)	__name__
__module____qualname__r   r'   rM   rR   ra   __classcell__)r   s   @r   r
   r
     s     "1`f_G>r   r
   c                     t        j                         } | j                  t        dOi dt        dd      dt        dd      dt        dddd	g
      dt        ddd       dt        dddd	g
      dt        ddddg
      dt        dd      dt        ddg d
      dt        ddg d
      dt        ddd dg      dt        ddd       dt        ddd       dt        ddd d      dt        ddi t        t        dd d!gd "      t        dd#$      t        dd#$      t        dd%$      &      '      d(t        ddd       d)t        ddd%      d*t        ddd       d+t        ddd       d,t        ddd%      d-t        ddd d d!g.      d/t        ddd       d0t        ddd       d1t        ddd       d2t        ddd       d3t        ddd       d4t        ddd       d5t        ddd       d6t        ddd       d7t        ddd       d8t        ddd              t	        | 9      }t        |      }t        |j                        t        d:      k  rg d;g d<g d=g}ng d>g d?g}t	        | |d@      }|j                  d   }|j                  d   }|j                  d   }|j                  d   }|j                  d   }|j                  d   }	|j                  d   }
|j                  d   }|j                  d   }t        |      }t        |j                        t        d:      k  rTd#}d|j                  v r|j                  d   }d|j                  v r|j                  d   }|j                  d   d	k(  rdAndB}nA|j                  d   }|j                  d   d	k(  rd!nd }|d k(  rdCn|j                  d(   }|j                  d)   }|j                  d*   }|j                  d+   }|j                  d,   }|j                  d   }|j                  d-   }|j                  d/   }|j                  d0   }|j                  d1   }|j                  d2   }|j                  d3   }|j                  d4   }|j                  d5   }|j                  d6   }|j                  d7   } |j                  d8   }!|r||j                  dDE       |dFk(  rdG}n
|dHk(  rdI}nd!}|dFk(  rdG}n
|dHk(  rdI}nd!}|j                  |      }"|"r|dk(  r|j                  |"|       y t        |j                        t        d:      k  r:|j                  |"||t              t        |      t        |      ||	|
|dJ       y |j                  |"i dK|d|dt              dt        |      dt        |      d|d|	d|
d|dd(d)d*d+d,d-d/ !dL	       y |dk(  r|j                  dM       t        |j                        t        d:      k  r:|j                  ||t              t        |      t        |      ||	|
|dJN      }"y |j                  i dK|d|dt              dt        |      dt        |      d|d|	d|
d|dd(d)d*d+d,d-d/ !dL	N      }"y )PNr%   rP   T)typerequiredr+   Fr,   activepassive)rg   defaultchoicesr.   )rg   rh   rk   r/   statepresentabsentdescriptionrV   no_encryption)rq   PSKcertificaterW   ca_cert
tls_issuer)rg   rh   rk   aliasestls_subjecttls_psk_identitytls_psk)rg   rh   rk   no_logr1   dictintr   r<   )rg   rl   rk    )rg   rk   10051)rU   ipdnsport)rg   rh   rk   optionsaddressr   r4   local_address
local_portrT   )rg   rh   rk   rl   timeout_zabbix_agenttimeout_simple_checktimeout_snmp_agenttimeout_external_checktimeout_db_monitortimeout_http_agenttimeout_ssh_agenttimeout_telnet_agenttimeout_scripttimeout_browser)argument_specr   )rV   rr   rx   ry   F)rW   rr   r   F)r,   rj   )r1   )r/   rj   )r   )rT   r<   )
r   r   r   r   r   r   r   r   r   r   F)r   required_ifsupports_check_mode      z	127.0.0.1zBlocal_address parameter is required when proxy_group is specified.r6   rs      rr      )r   rp   r,   rV   rW   ru   rw   rx   ry   r1   r+   r   )	r   r   r   r   r   r   r   r   r   r)   )rG    )rX   zabbix_common_argument_specr[   r{   r   r
   r   r    paramsrD   r'   rR   ra   rP   rA   rM   )#r   r   r"   rh   r%   rp   rV   rW   ru   rw   rx   ry   rm   r+   r1   r,   r.   r/   r   r   r4   r   r   rT   r   r   r   r   r   r   r   r   r   r   rQ   s#                                      r   mainr   G  s    <<>M )UT2)6) 8Y:OP) EE4H	)
 8YBWX) y9h:OP) ee4) e_Fmn) UOElm) %%~V) eeTB) 55$G) %%dK) 1vqAUB/eR0ug6		

)2 %%>3)4 uug>5)6 eeTB7)8 tD9): UUGD;)< %%QPQFS=)> "uudK?)@ "uudKA)B  UUDIC)D  $ME)F  UUDIG)H  UUDII)J EE4HK)L "uudKM)N EO)P %%FQ) )X 7F&MEE**+l5.AAJI1
 8+
 # F |,J--.K--.K|,Jy)J--.K}}%78mmI&GMM'"E&ME E**+l5.AAfmm+"MM/:M&--'k2ImmH-:"MM*=>$mm,<=JPQ!/1!4+&--	:R}}V$mmM2o6]]<0
"MM*=> --(9:%}}-CD%}}-CD#]]+?@!'/G!H#]]+?@#]]+?@"MM*=>%}}-CD'78 --(9:$  %i jm#		]"
	u	

 !!*-HHx4E223l56II""8&#.!&k#&{#3"%j/",#.(8&!*%2.  ""8 .J.!;. %c.&9. "3{#3	.
 !#j/. !*. ";. '(8. w. ():. w. D. ";. $]. !*.  &!." +,@#.$ -A*<.D*<*<):,@&4'65. : HU+../,u2EE"*f+";/!*o(*$4"&!.- H  -
-{- !#n"5- s;/	-
 c*o- j- {- #$4- 7- $%6- 7- - {-  - j-  "?!-" '(<#-$ )=&8*@&8&8%6(<"0#25- Hr   __main__)
__future__r   r   r   rg   __metaclass__DOCUMENTATIONEXAMPLESRETURNansible.module_utils.basicr   >ansible_collections.community.zabbix.plugins.module_utils.baser   #ansible.module_utils.compat.versionr   Aansible_collections.community.zabbix.plugins.module_utils.helpers	communityzabbixpluginsmodule_utilshelpersrX   r
   r   rb   r   r   r   <module>r      sj   * C BKZyv 
 5 U < X X XW>J W>tcL zF r   