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.yml
se ejecuta la tarea, sobrescribirá las plantillas tempalte_a_b_c.yml
vinculadas. 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_host
que podría utilizar?
Gracias.
Respuesta1
Puede crear una lista de plantillas basada en la membresía del grupo de hosts y ejecutarla zabbix_host
solo 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_list
se 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.