部署条件
- zabbix安装组件:zabbix-server,zabbix-agent,zabbix-web,mysql(只做简单部署,代理和其他组件未涉及)
- 安装方式:使用rpm包方式安装
- 配置部分:server的config文件,数据库配置
部署步骤
- 初始化项目
[ans@node1 zabbix]$ pwd
/home/ans/ansible/zabbix
[ans@node1 zabbix]$ ansible-galaxy init zabbix_roles
- Role zabbix_roles was created successfully
[ans@node1 zabbix]$ cat ansible.cfg
[defaults]
inventory= ./inventory
roles_path= ./zabbix_roles
[privilege_escalation]
become=True
become_method=sudo
become_user=root
become_ask_pass=False
[ans@node1 zabbix]$ cat inventory
[server]
node1
- task的main文件
---
- name: zabbix yum repo
yum_repository:
name: zabbix
description: zabbix-4.4
baseurl: http://192.168.27.7/zabbix/4.4
gpgcheck: no
- name: create zabbix databases
mysql_db:
name: zabbix
state: present
notify: init zabbix db
- name: install zabbix-server zabbix-agent
yum:
name:
- zabbix-server
- zabbix-agent
state: present
- name: create zabbix databases
mysql_db:
name: zabbix
state: present
notify: init zabbix db
- name: create zabbix user
mysql_user:
name: zabbix
host: localhost
password: "{{dbpasswd}}"
priv: 'zabbix.*:ALL'
state: present
[ans@node1 zabbix]$ vim zabbix_roles/vars/main.yml
---
dbpasswd: redhat
- name: start zabbix-server zabbix-agent
service:
name: "{{ item }}"
state: started
loop:
- zabbix-server
- zabbix-agent
- name: config zabbix-server
template:
src: zabbix_server.conf.j2
dest: /etc/zabbix/zabbix_server.conf
notify: restart zabbix server
- roles中的触发器设置
[ans@node1 zabbix]$ cat zabbix_roles/handlers/main.yml
---
- name: init zabbix db
mysql_db:
name: zabbix
state: import
target: /usr/share/doc/zabbix-server-mysql-4.4.1/create.sql.gz
- name: restart zabbix server
service:
name: zabbix-server
state: restarted
- 为了使用roles的post_tasks和pre_tasks功能,将部署分化为前期,正常,和后期
- pre_tasks:前期,在安装服务之前的工作,将数据库安装和配置放置此处
- post_tasks:后期,将安装web服务和配置放在了后面处理
[ans@node1 zabbix]$ cat zabbix_roles_start.yml
- hosts: server
roles:
- role: zabbix_roles
pre_tasks:
- name: install mysql
yum:
name:
- mariadb-server
- MySQL-python
state: present
- name: config mysql_server
lineinfile:
path: /etc/my.cnf.d/server.cnf
insertafter: '^\[mysqld\]'
line: character-set-server=utf8
notify: restart mysql server
- name: start mysql-server
service:
name: mariadb
state: started
post_tasks:
- name: install zabbix web
yum:
name:
- zabbix-web-mysql
- httpd
state: present
- name: start httpd
service:
name: httpd
state: started
- name: config zabbix web
lineinfile:
path: /etc/httpd/conf.d/zabbix.conf
insertafter: '# php_value'
line: 'php_value date.timezone Asia/Shanghai'
notify: restart httpd
handlers:
- name: restart httpd
service:
name: httpd
state: restarted
- name: restart mysql server
service:
name: maridb
state: restarted
- 运行结果

总结
- 服务类行的部署,都会有修改配置文件,这就涉及到了模板和触发器,模板用来替换配置文件,触发器用来将配置文件生效
- 设置密码类变量,放置密码外显,也可以设置统一变量,方便书写查看修改
- 注意触发器设置逻辑,有些属于配置文件修改,就要触发处理,而有些类似数据的初始化,仅在第一次触发处理