community.zabbix.zabbix_map 模块 – 创建/更新/删除 Zabbix 地图

注意

此模块是 community.zabbix 集合 (版本 3.2.0) 的一部分。

如果您使用的是 ansible 包,则可能已安装此集合。它不包含在 ansible-core 中。要检查它是否已安装,请运行 ansible-galaxy collection list

要安装它,请使用:ansible-galaxy collection install community.zabbix。您需要其他要求才能使用此模块,有关详细信息,请参阅 要求

要在 playbook 中使用它,请指定:community.zabbix.zabbix_map

概要

  • 此模块允许您使用 Graphviz 二进制文件和 DOT 语言编写的文本描述来创建、修改和删除 Zabbix 地图条目。图的节点将成为地图元素,边将成为地图元素之间的链接。有关详细信息,请参阅 https://en.wikipedia.org/wiki/DOT_(graph_description_language) 和 https://graphviz.cpp.org.cn/。灵感来自 http://blog.zabbix.com/maps-for-the-lazy/

  • 支持以下额外的节点属性:zbx_host 包含 Zabbix 中主机的名称。如果所需的地图元素类型为 host,则使用此属性。zbx_group 包含 Zabbix 中主机组的名称。如果所需的地图元素类型为 host group,则使用此属性。zbx_sysmap 包含 Zabbix 中地图的名称。如果所需的地图元素类型为 map,则使用此属性。zbx_label 包含地图元素的标签。zbx_image 包含用于在默认状态下显示元素的图像名称。zbx_image_disabled 包含用于显示已禁用的地图元素的图像名称。zbx_image_maintenance 包含用于显示处于维护状态的地图元素的图像名称。zbx_image_problem 包含用于显示出现问题的 map 元素的图像名称。zbx_urlname:url 格式包含地图元素的 URL。可以通过添加后缀来指定多个 URL(例如,zbx_url1zbx_url2)。

  • 支持以下额外的链接属性:zbx_draw_style 包含链接线的绘制样式。可能的值:linebolddotteddashedzbx_triggerhost_name:trigger_name 格式包含用作链接指示器的触发器的名称。可以通过添加后缀来指定多个触发器(例如,zbx_trigger1zbx_trigger2)。zbx_trigger_color 包含指示器颜色,指定为 CSS3 名称或以 # 开头的十六进制代码。zbx_trigger_draw_style 包含指示器的绘制样式。可能的值与 zbx_draw_style 相同。

要求

在执行此模块的主机上需要以下要求。

  • python >= 3.9

  • pydotplus

  • webcolors

  • Pillow

  • Graphviz

参数

参数

注释

data

别名:dot_data

字符串

用 DOT 语言编写的图表。

default_image

别名:image

字符串

如果此元素未定义 zbx_image 属性,则使用此 Zabbix 图像来显示元素。

expand_problem

布尔值

是否为具有单个问题的元素显示问题触发器。

选项

  • false

  • true ← (默认)

height

整数

地图的高度。

默认值: 600

highlight

布尔值

是否启用图标高亮显示。

选项

  • false

  • true ← (默认)

http_login_password

字符串

基本身份验证密码

http_login_user

字符串

基本身份验证用户名

label_type

字符串

地图元素标签类型。

选项

  • "label"

  • "ip"

  • "name" ← (默认)

  • "状态"

  • "无"

  • "自定义"

边距

整数

地图边界与其元素之间的空白大小。

默认值: 40

名称

别名:map_name

字符串 / 必填

地图的名称。

状态

字符串

地图的状态。

present 状态下,如果地图不存在则创建,如果关联数据不同则更新地图。

absent 状态下,如果地图存在则删除。

选项

  • "present" ← (默认)

  • "absent"

宽度

整数

地图的宽度。

默认值: 800

示例

# 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

###
### Example inventory:
# [web]
# web[01:03].example.com ansible_host=127.0.0.1
# [db]
# db.example.com ansible_host=127.0.0.1
# [backup]
# backup.example.com ansible_host=127.0.0.1
###
### Each inventory host is present in Zabbix with a matching name.
###
### Contents of "map.j2":
# digraph G {
#     graph [layout=dot splines=false overlap=scale]
#     INTERNET [zbx_url="Google:https://google.com" zbx_image="Cloud_(96)"]
# {% for web_host in groups.web %}
#     {% set web_loop = loop %}
#     web{{ '%03d' % web_loop.index }} [zbx_host="{{ web_host }}"]
#     INTERNET -> web{{ '%03d' % web_loop.index }} [zbx_trigger="{{ web_host }}:Zabbix agent on {HOST.NAME} is unreachable for 5 minutes"]
#     {% for db_host in groups.db %}
#       {% set db_loop = loop %}
#     web{{ '%03d' % web_loop.index }} -> db{{ '%03d' % db_loop.index }}
#     {% endfor %}
# {% endfor %}
#     { rank=same
# {% for db_host in groups.db %}
#     {% set db_loop = loop %}
#     db{{ '%03d' % db_loop.index }} [zbx_host="{{ db_host }}"]
#     {% for backup_host in groups.backup %}
#         {% set backup_loop = loop %}
#         db{{ '%03d' % db_loop.index }} -> backup{{ '%03d' % backup_loop.index }} [color="blue"]
#     {% endfor %}
# {% endfor %}
# {% for backup_host in groups.backup %}
#     {% set backup_loop = loop %}
#         backup{{ '%03d' % backup_loop.index }} [zbx_host="{{ backup_host }}"]
# {% endfor %}
#     }
# }
###
### Create Zabbix map "Demo Map" made of template "map.j2"
- name: Create Zabbix map
  # 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_map:
    name: Demo map
    state: present
    data: "{{ lookup('template', 'map.j2') }}"
    default_image: Server_(64)
    expand_problem: no
    highlight: no
    label_type: label
  delegate_to: localhost
  run_once: yes

作者

  • Antony Alekseyev (@Akint)