Como gerenciar os modelos do zabbix para hosts configurados sem sobrescrever o que está lá?

1

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

Por exemplo, eu 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

Eu tenho o arquivo de inventário organizado pelos modelos, já que há muito menos modelos no meu sistema que os servidores. No exemplo, ficaria assim:

[template_a_b_c]
server0
server1
server2
server3


[template_d]
server0
server2
server4  

etc.
Com a configuração assim, meu ansible "zabbix" tem tarefas para cada template. Mas para servidores como server2, quando a tarefa template_d.yml é executada, ela sobrescreve os modelos que tempalte_a_b_c.yml vinculados. Esse é o comportamento que estou tentando evitar.

Eu percebo que eu poderia reconfigurar meu ansible role para ser organizado pelo host e ter uma tarefa para cada um, mas eu tenho centenas de hosts e estou crescendo, então isso não vai escalar. É ansible apenas não existe ainda ou há uma bandeira em zabbix_host de ansible que eu poderia fazer uso de?

Obrigado.

    
por battibatch 22.02.2018 / 15:16

1 resposta

0

Você pode construir a lista de modelos com base na associação do grupo de hosts e executar zabbix_host apenas uma vez.

inventário:

[mygr1]
srv1
srv2
srv3

[mygr2]
srv2
Playbook

:

---
- 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: obtenha nomes de grupos dos quais o host atual é membro, cruze-o com nomes conhecidos de template_map , extraia lista de modelos para cada nome restante, converta o resultado em lista (do gerador de mapas ) e achatar lista resultante de listas em lista única.

    
por 22.02.2018 / 17:11