如何管理將 zabbix 範本新增至配置的主機而不覆蓋現有內容?

如何管理將 zabbix 範本新增至配置的主機而不覆蓋現有內容?

我正在嘗試使用 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 還沒有出現嗎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,提取每個剩餘名稱的範本列表,將結果轉換為列表(來自地圖產生器)並將列表的結果列表扁平化為單一列表。

相關內容