既存のものを上書きせずに、構成されたホストに 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 はまだそこまで達していないのでしょうか、それとも Ansiblezabbix_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、残りの名前ごとにテンプレートのリストを抽出し、結果をリストに変換し (マップ ジェネレータから)、結果のリストを単一のリストに平坦化します。

関連情報