Wie kann ich konfigurierten Hosts Zabbix-Vorlagen hinzufügen, ohne vorhandene Vorlagen zu überschreiben?

Wie kann ich konfigurierten Hosts Zabbix-Vorlagen hinzufügen, ohne vorhandene Vorlagen zu überschreiben?

Ich versuche, mit Ansible zu verwalten, wie Vorlagen zu den konfigurierten Hosts auf meinem Zabbix-Server hinzugefügt werden. Ich suche nach einer Möglichkeit, die Vorlagen hinzuzufügen, ohne die bereits vorhandenen Vorlagen zu überschreiben.

Ich habe beispielsweise 5 Server. Ich muss sie mit den folgenden Vorlagen konfigurieren:

  • Server0 benötigt Vorlage A, B, C, D
  • Server1 benötigt Vorlage A, B, C, E
  • Server2 benötigt Vorlage A, B, C, D, F
  • Server3 benötigt Vorlage A, B, C, G
  • server4 benötigt Template D

Ich habe die Inventardatei nach Vorlagen organisiert, da in meinem System weit weniger Vorlagen als Server vorhanden sind. Im Beispiel würde das so aussehen:

[template_a_b_c]
server0
server1
server2
server3


[template_d]
server0
server2
server4  

usw.
Mit einer solchen Konfiguration hat meine Ansible-Rolle „zabbix“ Aufgaben für jede Vorlage. Aber bei Servern wie Server2 template_d.ymlüberschreibt die Aufgabe beim Ausführen die tempalte_a_b_c.ymlverknüpften Vorlagen. Dies ist das Verhalten, das ich vermeiden möchte.

Mir ist klar, dass ich meine Ansible-Rolle so umkonfigurieren könnte, dass sie nach Host organisiert ist und für jeden eine Aufgabe hat, aber ich habe Hunderte von Hosts und es werden immer mehr, also ist das nicht skalierbar. Ist Ansible einfach noch nicht so weit oder gibt es ein Flag in Ansible, zabbix_hostdas ich nutzen könnte?

Danke.

Antwort1

Sie können eine Vorlagenliste basierend auf der Gruppenmitgliedschaft der Hosts erstellen und diese zabbix_hostnur einmal ausführen.

Inventar:

[mygr1]
srv1
srv2
srv3

[mygr2]
srv2

Spielbuch:

---
- 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 }}"

Ergebnis:

ok: [srv1] => {
    "msg": [
        "template_a",
        "template_b"
    ]
}
ok: [srv2] => {
    "msg": [
        "template_a",
        "template_b",
        "template_c"
    ]
}
ok: [srv3] => {
    "msg": [
        "template_a",
        "template_b"
    ]
}

template_listwird in dieser Reihenfolge gebildet: Nehmen Sie die Namen der Gruppen, deren Mitglied der aktuelle Host ist, schneiden Sie sie mit bekannten Namen aus template_map, extrahieren Sie eine Liste der Vorlagen für jeden verbleibenden Namen, konvertieren Sie das Ergebnis in eine Liste (vom Kartengenerator) und reduzieren Sie die resultierende Liste der Listen auf eine einzige Liste.

verwandte Informationen