Назад | Перейти на главную страницу

Как управлять добавлением шаблонов zabbix на настроенные хосты без перезаписи того, что там есть?

Я пытаюсь использовать ansible для управления тем, как шаблоны добавляются к настроенным хостам на моем Zabbix сервере. Я ищу способ добавить шаблоны без переопределения уже существующих.

Например, у меня 5 серверов. Мне нужно, чтобы они были настроены с помощью следующих шаблонов:

У меня есть файл инвентаризации, организованный по шаблонам, поскольку в моей системе гораздо меньше шаблонов, чем серверов. В примере это будет выглядеть так:

[template_a_b_c]
server0
server1
server2
server3


[template_d]
server0
server2
server4  

и т.п.
С такой конфигурацией у моей доступной роли "zabbix" есть задачи для каждого шаблона. Но для серверов, таких как server2, когда template_d.yml задача выполняется, она перезапишет шаблоны, которые tempalte_a_b_c.yml связаны. Этого поведения я стараюсь избегать.

Я понимаю, что могу перенастроить свою доступную роль, чтобы она была организована хостом и имела задачу для каждого, но у меня сотни хостов и они растут, так что это не масштабируется. Анзибл просто еще не существует или есть флаг в анзиблеzabbix_host что я мог бы использовать?

Спасибо.

Вы можете создать список шаблонов на основе членства в группе хостов и выполнить zabbix_host только один раз.

инвентарь:

[mygr1]
srv1
srv2
srv3

[mygr2]
srv2

учебник:

---
- hosts: mygr1:mygr2
  gather_facts: no
  vars:
    template_map:
      mygr1: [template_a, template_b]
      mygr2: [template_c]
  tasks:
    - name: Generate template list
      set_fact:
        template_list: >
                       {{ group_names
                          | intersect(template_map.keys())
                          | map('extract',template_map)
                          | list
                          | sum(start=[]) }}
    - debug:
        msg: "{{ template_list }}"

результат:

ok: [srv1] => {
    "msg": [
        "template_a",
        "template_b"
    ]
}
ok: [srv2] => {
    "msg": [
        "template_a",
        "template_b",
        "template_c"
    ]
}
ok: [srv3] => {
    "msg": [
        "template_a",
        "template_b"
    ]
}

template_list формируется в такой последовательности: взять имена групп, в которые входит текущий хост, пересечь его с известными именами из template_map, извлечь список шаблонов для каждого оставшегося имени, преобразовать результат в список (из генератора карт) и сгладить результирующий список списков в единый список.