덮어쓰지 않고 구성된 호스트에 zabbix 템플릿을 추가하는 방법을 관리하는 방법은 무엇입니까?

덮어쓰지 않고 구성된 호스트에 zabbix 템플릿을 추가하는 방법을 관리하는 방법은 무엇입니까?

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, 나머지 각 이름에 대한 템플릿 목록을 추출하고, 결과를 목록으로 변환하고(맵 생성기에서) 결과 목록 목록을 단일로 평면화합니다. 목록.

관련 정보