概要
- Ansibleを使ってzabbixのホストグループを追加・取得する方法を記載します。
TL:DR
- Ansibleでhost groupを新規に作成する場合は、
community.zabbix.zabbix_group
を使用する- 既に同じホストグループ名がある場合、処理はOKとなる
- Ansibleでhost groupの情報を取得する場合は、
community.zabbix.zabbix_group_info
を使用する- 取得したホストグループが存在する場合、OKとなる
- 取得したホストグループが1つでも存在する場合、存在するホストの情報のみ取得しOKとなる
- 取得したいホストグループが全て存在しない場合、エラーとなる
目次
- 準備
- ホストグループを追加するためのyalファイルを作成
- 実行
- 確認
- 登録したホスト情報を取得しAnsibleだけで登録を確認する
Ansibleを使ってzabbixにホストグループを追加する方法
1. 準備
- zabbixを用意する
- 今回はdockerを使って検証用zabbixを立てています
- dockerでzabbixを準備する際は、こちらの記事を参照ください
- 今回はdockerを使って検証用zabbixを立てています
- ansibleのinstallはこちらを確認ください(今回は解説を省略します)
- zabbix-apiのinstall
- 下記コマンドを実行
$ pip install zabbix-api
2. ホストグループを追加するためのyalファイルを作成
---
- name: "fetch host group sample"
hosts: localhost
vars:
url: "http://localhost:8081"
user: "Admin"
password: "*****" #ご自分の環境に合ったパスワードを入力ください
ansible_python_interpreter: /usr/bin/python3
target_groups:
- "test group1"
- "test group2"
tasks:
- community.zabbix.zabbix_group:
server_url: "{{ url }}"
login_user: "{{ user }}"
login_password: "{{ password }}"
state: present
host_groups: "{{ target_groups }}"
解説
- name: "fetch host group sample"
hosts: localhost
-
name
はわかりやすくするためにつけています -
host
はlocalhostを使用- 接続先(localhostは、インベントリーになくとも指定可能)
vars:
url: "http://localhost:8081"
user: "Admin"
password: "*****" #ご自分の環境に合ったパスワードを入力ください
ansible_python_interpreter: /usr/bin/python3
target_groups:
- "test group1"
- "test group2"
- 後々、使いまわしたいのでzabbixに必要な情報などを事前に変数として定義
-
ansible_python_interpreter
は、Ansibleが使用するpython interpreterを指定- 今回はzabbix-apiが入っていないinterpreterを見に行っていたため指定しています
tasks:
- community.zabbix.zabbix_group:
server_url: "{{ url }}"
login_user: "{{ user }}"
login_password: "{{ password }}"
state: present
host_groups: "{{ target_groups }}"
-
community.zabbix.zabbix_group
配下に情報を記載しホストグループの登録を行う- 既にホストグループが存在する場合はOKとなる
-
host_groups
にリスト形式で登録したいホストグループを記載する -
state
で登録・削除の指定をする- present: 登録(default)
- absent: 削除
- state以外にもキーがあるので詳しくは[こちら][3をご確認ください
3. 実行
- 下記コマンドで実行する
$ ansible-playbook create_host_group.yml
- 実行結果
$ ansible-playbook create_host_group.yml
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost
does not match 'all'
PLAY [fetch host group sample] ***************************************************************************
TASK [community.zabbix.zabbix_group] *********************************************************************
changed: [localhost]
PLAY RECAP ***********************************************************************************************
localhost : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
4. 確認
- zabbix上で確認する
- 登録できていた
5. 登録したホスト情報を取得しAnsibleだけで登録を確認する
先ほど登録したホストグループを削除します
- コードを少し修正
tasks:
- community.zabbix.zabbix_group:
server_url: "{{ url }}"
login_user: "{{ user }}"
login_password: "{{ password }}"
state: absent # ←元々present
host_groups: "{{ target_groups }}"
- 実行
$ ansible-playbook create_host_group.yml
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that
the implicit localhost does not match 'all'
PLAY [fetch host group sample] *************************************************
TASK [Gathering Facts] *********************************************************
ok: [localhost]
TASK [create host group] *******************************************************
changed: [localhost]
PLAY RECAP *********************************************************************
localhost : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
- 確認
- 削除できてそう
登録したホスト情報を取得しAnsibleだけで登録を確認するコードを実装
---
tasks:
- name: "create host group"
community.zabbix.zabbix_group:
server_url: "{{ url }}"
login_user: "{{ user }}"
login_password: "{{ password }}"
state: present
host_groups: "{{ target_group }}"
# 下記の内容を追加
- name: "get host group"
community.zabbix.zabbix_group_info:
server_url: "{{ url }}"
login_user: "{{ user }}"
login_password: "{{ password }}"
hostgroup_name: "{{ target_group }}"
register: host_info_result
- name: "display host_info_result"
debug:
var: host_info_result
-
community.zabbix.zabbix_group_info
を用いてホストグループの情報を取得することができる- 存在しないホストグループを指定した場合エラーとなる
fatal: [localhost]: FAILED! => {"changed": false, "msg": "Hostgroup not found: ['test group3', 'test group4']"}
- 取得できていることで登録確認を行うことができる
- 存在しないホストグループを指定した場合エラーとなる
-
実行結果
- "test group1"と"test group2"の情報が取得できているため登録成功
$ ansible-playbook create_host_group.yml
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that
the implicit localhost does not match 'all'
PLAY [fetch host group sample] *************************************************
TASK [Gathering Facts] *********************************************************
ok: [localhost]
TASK [create host group] *******************************************************
changed: [localhost]
TASK [get host group] **********************************************************
ok: [localhost]
TASK [display host_info_result] ************************************************
ok: [localhost] => {
"host_info_result": {
"changed": false,
"failed": false,
"host_groups": [
{
"flags": "0",
"groupid": "22",
"internal": "0",
"name": "test group1",
"uuid": "8693df5fe8fa4c0f81fa36991127a5ec"
},
{
"flags": "0",
"groupid": "23",
"internal": "0",
"name": "test group2",
"uuid": "be66d01bdd48439b974ca6bdee705c46"
}
]
}
}
PLAY RECAP *********************************************************************
localhost : ok=4 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
参考
- https://docs.ansible.com/ansible/latest/collections/community/zabbix/zabbix_group_module.html#ansible-collections-community-zabbix-zabbix-group-module
- https://docs.ansible.com/ansible/latest/collections/community/zabbix/zabbix_group_info_module.html#ansible-collections-community-zabbix-zabbix-group-info-module
- https://docs.ansible.com/ansible/2.9_ja/installation_guide/intro_installation.html