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