¿Cómo administrar la adición de plantillas zabbix a los hosts configurados sin sobrescribir lo que hay?

¿Cómo administrar la adición de plantillas zabbix a los hosts configurados sin sobrescribir lo que hay?

Estoy intentando utilizar ansible para administrar cómo se agregan las plantillas a los hosts configurados en mi servidor Zabbix. Estoy buscando una manera de agregar las plantillas sin anular las plantillas que ya están allí.

Por ejemplo, tengo 5 servidores. Necesito que estén configurados con las siguientes plantillas:

  • server0 necesita la plantilla A, B, C, D
  • server1 necesita la plantilla A, B, C, E
  • server2 necesita la plantilla A, B, C, D, F
  • server3 necesita la plantilla A, B, C, G
  • server4 necesita Plantilla D

Tengo el archivo de inventario organizado por plantillas, ya que hay muchas menos plantillas en mi sistema que servidores. En el ejemplo se vería así:

[template_a_b_c]
server0
server1
server2
server3


[template_d]
server0
server2
server4  

etc.
Con una configuración como esta, mi rol ansible "zabbix" tiene tareas para cada plantilla. Pero para servidores como server2, cuando template_d.ymlse ejecuta la tarea, sobrescribirá las plantillas tempalte_a_b_c.ymlvinculadas. Este es el comportamiento que estoy tratando de evitar.

Me doy cuenta de que podría reconfigurar mi función ansible para que esté organizada por host y tener una tarea para cada uno, pero tengo cientos de hosts y estoy creciendo, por lo que eso no escalará. ¿Ansible simplemente no está disponible todavía o hay una bandera en Ansible zabbix_hostque podría utilizar?

Gracias.

Respuesta1

Puede crear una lista de plantillas basada en la membresía del grupo de hosts y ejecutarla zabbix_hostsolo una vez.

inventario:

[mygr1]
srv1
srv2
srv3

[mygr2]
srv2

libro de jugadas:

---
- 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_listse forma en esta secuencia: tomar los nombres de los grupos de los que es miembro el host actual, intersectarlos con nombres conocidos de template_map, extraer la lista de plantillas para cada nombre restante, convertir el resultado en una lista (desde el generador de mapas) y aplanar la lista de listas resultante en una sola lista.

información relacionada