Source code for saltext.zabbix.returners.zabbix_return

"""
Return salt data to Zabbix

The following Type: "Zabbix trapper" with "Type of information" Text items are required:

.. code-block:: cfg

    Key: salt.trap.info
    Key: salt.trap.warning
    Key: salt.trap.high

To use the Zabbix returner, append '--return zabbix' to the salt command. ex:

.. code-block:: bash

    salt '*' test.ping --return zabbix
"""

import os

# Define the module's virtual name
__virtualname__ = "zabbix"


def __virtual__():
    if zbx():
        return True
    return False, "Zabbix returner: No zabbix_sender and zabbix_agend.conf found."


def zbx():
    if os.path.exists("/usr/local/zabbix/bin/zabbix_sender") and os.path.exists(
        "/usr/local/zabbix/etc/zabbix_agentd.conf"
    ):
        zabbix_sender = "/usr/local/zabbix/bin/zabbix_sender"
        zabbix_config = "/usr/local/zabbix/etc/zabbix_agentd.conf"
        return {"sender": zabbix_sender, "config": zabbix_config}
    elif os.path.exists("/usr/bin/zabbix_sender") and os.path.exists(
        "/etc/zabbix/zabbix_agentd.conf"
    ):
        zabbix_sender = "/usr/bin/zabbix_sender"
        zabbix_config = "/etc/zabbix/zabbix_agentd.conf"
        return {"sender": zabbix_sender, "config": zabbix_config}
    else:
        return False


def zabbix_send(key, output):
    cmd = zbx()["sender"] + " -c " + zbx()["config"] + " -k " + key + ' -o "' + output + '"'
    __salt__["cmd.shell"](cmd)


[docs] def save_load(jid, load, minions=None): # pylint: disable=unused-argument """ Included for API consistency """
def returner(ret): changes = False errors = False job_minion_id = ret["id"] if isinstance(ret["return"], dict): for item in ret["return"].values(): if "comment" in item and "name" in item and item["result"] is False: errors = True zabbix_send( "salt.trap.high", f"SALT:\nname: {item['name']}\ncomment: {item['comment']}", ) elif "comment" in item and "name" in item and item["changes"]: changes = True zabbix_send( "salt.trap.warning", f"SALT:\nname: {item['name']}\ncomment: {item['comment']}", ) if not changes and not errors: zabbix_send("salt.trap.info", f"SALT {job_minion_id} OK")