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
、残りの名前ごとにテンプレートのリストを抽出し、結果をリストに変換し (マップ ジェネレータから)、結果のリストを単一のリストに平坦化します。