首先展示一下角色的目录结构
tree roles/install_zabbix_agentd/
roles/install_zabbix_agentd/
├── files
│ └── zabbix-2.4.7.tar.gz
├── tasks
│ ├── check.yml
│ ├── install.yml
│ └── main.yml
├── templates
│ ├── zabbix_agentd.conf.j2
│ └── zabbix_agentd.j2
└── vars
└── main.yml
·
task 任务的 main.yml
cat roles/install_zabbix_agentd/tasks/main.yml
---
# tasks file for install_zabbix_agentd
- include: check.yml
# zabbix_agentd is run by the zabbix user, so when the zabbix user exists, it means that zabbix_agentd has been installed
- include: install.yml
when: zabbix_agentd_status.stdout == "0" and zabbix_user_status.stdout == "0"
首先通过 check.yml 获取 zabbix_agentd 的进程数变量 zabbix_agentd_status.stdout ,和 zabbix 用户的状态变量 zabbix_user_status.stdout。当 zabbix_agentd_status.stdout == "0"
时,表示无 zabbix_agentd 进程;这时再去判断是否存在已经安装了 zabbix_agentd,但是未启动的情况。
这里我选择通过 zabbix 用户的存在与否来判断是否已经安装 zabbix_agentd,因为 zabbix_agentd 的运行用户为 zabbix;所以,当 zabbix_user_status.stdout == "0"
时,表示无 zabbix 用户,即表示未安装 zabbix_agentd。
·
检查任务文件
cat roles/install_zabbix_agentd/tasks/check.yml
---
# tasks file for install_zabbix_agentd
- name: check whether zabbix_agentd is running
shell: "ps -ef | grep zabbix | grep -v grep | wc -l"
register: zabbix_agentd_status
#- name: print zabbix_agentd_status
# debug:
# msg: "{{ zabbix_agentd_status }}"
- name: check whether zabbix user is exists
shell: "id zabbix | grep -v grep | grep zabbix | wc -l"
register: zabbix_user_status
#- name: print zabbix_auser_status
# debug:
# msg: "{{ zabbix_user_status }}"
·
安装任务文件
cat roles/install_zabbix_agentd/tasks/install.yml
---
# tasks file for install_zabbix_agentd
- name: unzip the source package
unarchive:
src: "{{ ZIP_NAME }}"
dest: "{{ UNZIP_DEST }}"
copy: yes
- name: create zabbix group
group:
gid: 10050
name: zabbix
state: present
- name: create zabbix user
user:
uid: 10050
name: zabbix
shell: /sbin/nologin
group: zabbix
append: yes
- name: install rely on package
yum:
name: gcc
state: installed
- name: compile and install zabbix-agentd
shell: cd "{{ UNZIP_PATH }}";./configure "--prefix={{ PREFIX_PATH }}" --enable-agent;make;make install
- name: copy startup file zabbix_agentd
template:
src: zabbix_agentd.j2
dest: /etc/init.d/zabbix_agentd
mode: 0755
- name: copy config file template
template:
src: zabbix_agentd.conf.j2
dest: "{{ PREFIX_PATH }}/etc/zabbix_agentd.conf"
- name: create rely on path
file:
name: "{{ PREFIX_PATH }}/logs"
state: directory
- name: modify path attribute
file:
name: "{{ PREFIX_PATH }}"
owner: zabbix
group: zabbix
state: directory
recurse: yes
- name: startup and enable zabbix-agentd
shell: service zabbix_agentd start;chkconfig zabbix_agentd on
·
变量的 main.yml
PS: 这里的变量值不要加双引号。
cat roles/install_zabbix_agentd/vars/main.yml
---
# vars file for install_zabbix_agentd
ZIP_NAME: zabbix-2.4.7.tar.gz
ZIP_DEST: /usr/local/src
UNZIP_DEST: /usr/local/src
UNZIP_PATH: /usr/local/src/zabbix-2.4.7
PREFIX_PATH: /usr/local/zabbix-2.4.7
·
zabbix_agentd 配置文件模板
cat roles/install_zabbix_agentd/templates/zabbix_agentd.conf.j2
PidFile={{ PREFIX_PATH }}/zabbix_agentd.pid
LogFile={{ PREFIX_PATH }}/logs/zabbix_agentd.log
Server=10.0.10.201
ListenPort=10050
ListenIP=0.0.0.0
ServerActive=10.0.10.201:10051
Hostname={{ ansible_eth0.ipv4.address }}
Include={{ PREFIX_PATH }}/etc/zabbix_agentd.conf.d/*.conf
·
zabbix_agentd 启动文件模板
PS: 这里只展示出需要获取变量的位置。
原文件在源码包中: misc/init.d/fedora/core/zabbix_agentd
cat roles/install_zabbix_agentd/templates/zabbix_agentd.j2
......
# Zabbix-Directory
#BASEDIR=/usr/local
BASEDIR={{ PREFIX_PATH }}
......
·
之前还分享过服务器配置初始化的剧本,有需要可参考文章:使用 Ansible 批量初始化服务器(最终版)