Как управлять добавлением шаблонов Zabbix к настроенным узлам, не перезаписывая имеющиеся?

Как управлять добавлением шаблонов Zabbix к настроенным узлам, не перезаписывая имеющиеся?

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

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

  • server0 нужен шаблон A, B, C, D
  • server1 нужен шаблон A, B, C, E
  • server2 нужен шаблон A, B, C, D, F
  • server3 нужен шаблон A, B, C, G
  • server4 нужен шаблон D

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

[template_a_b_c]
server0
server1
server2
server3


[template_d]
server0
server2
server4  

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

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

Спасибо.

решение1

Вы можете создать список шаблонов на основе членства хостов в группах и выполнить его 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, извлекаются списки шаблонов для каждого оставшегося имени, преобразуются результаты в список (из генератора карт) и сводятся полученные списки списков в один список.

Связанный контент