Zabbix 서버에 구성된 호스트에 템플릿이 추가되는 방법을 관리하기 위해 ansible을 사용하려고 합니다. 이미 있는 템플릿을 재정의하지 않고 템플릿을 추가할 수 있는 방법을 찾고 있습니다.
예를 들어, 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이 아직 거기에 없습니까? 아니면 zabbix_host
사용할 수 있는 플래그가 Ansible에 있습니까 ?
감사해요.
답변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
, 나머지 각 이름에 대한 템플릿 목록을 추출하고, 결과를 목록으로 변환하고(맵 생성기에서) 결과 목록 목록을 단일로 평면화합니다. 목록.