Ansible template 模块部署 zabbix-agent
2018-04-26 by dongnan
目标
使用 ansible-playbook
批量部署 zabbix-agent
。
要点
- 检查
playbook
配置文件语法。 - 检测模式,
playbook
中任务将在每台远程主机上进行检测,但实际并不执行。 template
模块 ,复制zabbix-agent
配置文件。notify & handlers
机制,在发生改变时执行的操作。
配置文件
cat install_zabbix-agent.yml
---
- hosts: node3
remote_user: root
tasks:
- name: install zabbix-agent
apt:
name: zabbix-agent
state: latest
update_cache: yes
- name: copy configure file
template:
src: "./conf/zabbix_agentd.conf"
dest: "/etc/zabbix/zabbix_agentd.conf"
owner: root
group: root
mode: 0644
notify:
- restart zabbix-agent
handlers:
- name: restart zabbix-agent
service:
name: "zabbix-agent"
state: restarted
检查语法
ansible-playbook --syntax-check install_zabbix-agent.yml
# 这里是空白行,并输出了类似的语句,表示配置文件正常。
playbook: install_zabbix-agent.yml
# 相反如果配置文件语法有误,则输出错误的信息。
ansible-playbook --syntax-check install_zabbix-agent.yml
ERROR! Syntax Error while loading YAML.
could not find expected ':'
# ...省略
The error appears to have been in '/root/path/install_zabbix-agent.yml': line 22, column 3, but may
be elsewhere in the file depending on the exact syntax problem.
# ...省略
检测模式
使用 -C / --ckeck
选项,仅输出可能发生的改变,但是系统本身却不作出任何改变。
这就像在其它系统上叫做 dry run
的方式, 用户应该被警告因为这个方式没考虑到命令失败的问题,或者冲突影响。
使用这个可以知道哪些东西可能会发生。
ansible-playbook -C install_zabbix-agent.yml
PLAY [node3] *******************************************************
TASK [Gathering Facts] ***********************************************
ok: [node3]
TASK [install zabbix-agent] *******************************************
changed: [node3]
TASK [copy configure file] ******************************************
changed: [node3]
PLAY RECAP *********************************************************************
node3 : ok=3 changed=2 unreachable=0 failed=0
执行 playbook
ansible-playbook install_zabbix-agent.yml
# ...省略
node3 : ok=4 changed=3 unreachable=0 failed=0
验证
使用 telnet
链接 zabbix-agent
端口,连接成功则表示 zabbix-agent
部署成。
telnet node3 10050
Trying 10.1xx.5x.24x...
Connected to node3.
Escape character is '^]'.
quit
ZBXD&ZBX_NOTSUPPORTEDUnsupported item key.Connection closed by foreign host.
命令参数
--syntax-check
perform a syntax check on the playbook, but do not execute it
-C, --check
don't make any changes; instead, try to predict some of the changes that may occur