Como gerenciar a adição de templates zabbix a hosts configurados sem sobrescrever o que existe?

Como gerenciar a adição de templates zabbix a hosts configurados sem sobrescrever o que existe?

Estou tentando usar o ansible para gerenciar como os templates são adicionados aos hosts configurados no meu servidor Zabbix. Estou procurando uma maneira de adicionar os modelos sem substituir os modelos que já estão lá.

Por exemplo, tenho 5 servidores. Preciso que eles sejam configurados com os seguintes modelos:

  • server0 precisa do modelo A, B, C, D
  • server1 precisa do modelo A, B, C, E
  • server2 precisa do modelo A, B, C, D, F
  • server3 precisa do modelo A, B, C, G
  • server4 precisa do modelo D

Tenho o arquivo de inventário organizado pelos modelos, pois há muito menos modelos no meu sistema do que servidores. No Exemplo ficaria assim:

[template_a_b_c]
server0
server1
server2
server3


[template_d]
server0
server2
server4  

etc.
Com a configuração como esta, minha função ansible "zabbix" possui tarefas para cada modelo. Mas para servidores como o server2, quando a template_d.ymltarefa for executada, ela substituirá os modelos tempalte_a_b_c.ymlvinculados. Este é o comportamento que estou tentando evitar.

Percebo que poderia reconfigurar meu papel ansible para ser organizado por host e ter uma tarefa para cada um, mas tenho centenas de hosts e estou crescendo, então isso não será escalonável. O ansible ainda não existe ou existe um sinalizador no ansible zabbix_hostque eu possa usar?

Obrigado.

Responder1

Você pode construir uma lista de modelos com base na associação ao grupo de hosts e executá-la zabbix_hostapenas uma vez.

inventário:

[mygr1]
srv1
srv2
srv3

[mygr2]
srv2

livro de cantadas:

---
- 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 }}"

resultado:

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é formado nesta sequência: pegue os nomes dos grupos dos quais o host atual é membro, cruze-os com os nomes conhecidos de template_map, extraia a lista de modelos para cada nome restante, converta o resultado em lista (do gerador de mapa) e nivele a lista de listas resultante em um único lista.

informação relacionada