角色功能说明:
- 该角色实现对客户端主机的zabbix agent部署启动
- 该角色可以反复执行以达到zabbix agent软件升级或配置升级的功能
角色部署:
- 创建目录结构,创建软连接,关联默认变量文件
WorkDir=~/devops/ansible/os_init && cd ${WorkDir}
RoleName=zabbix
mkdir -pv roles/${RoleName}/{defaults,files,handlers,meta,tasks,templates,vars}
ln -s ${WorkDir}/defaults_var.yml roles/${RoleName}/defaults/main.yml
- 配置zabbix模版文件,如果环境中包含多个机房,每个机房的zabbix配置不同时,为每个机房配置各自的zabbix模版文件
cat >roles/${RoleName}/templates/zabbix_192.168.j2<<EOF
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=192.168.1.112
ServerActive=192.168.1.112:10051
Hostname={{ local_hostname.stdout }}
Include=/etc/zabbix/zabbix_agentd.d/
EOF
- 创建角色任务
cat >roles/${RoleName}/tasks/main.yml<<EOF
---
- name: "分发 zabbix agent centos6 rpm"
copy:
src: ${WorkDir}/software/{{ zabbix_agent_6_name }}
dest: /tmp
owner: root
group: root
mode: 0644
when: ansible_distribution_major_version == "6"
- name: "分发 zabbix agent centos7 rpm"
copy:
src: ${WorkDir}/software/{{ zabbix_agent_7_name }}
dest: /tmp
owner: root
group: root
mode: 0644
when: ansible_distribution_major_version == "7"
- name: "安装 zabbix agent centos6 rpm"
yum:
name: /tmp/{{ zabbix_agent_6_name }}
state: present
when: ansible_distribution_major_version == "6"
- name: "安装 zabbix agent centos7 rpm"
yum:
name: /tmp/{{ zabbix_agent_7_name }}
state: present
when: ansible_distribution_major_version == "7"
- name: "获取主机名"
shell:
"hostname"
register: local_hostname
- name: "定位网段"
shell:
"echo {{ ansible_ssh_host }}|awk -F'.' '{print \$1\".\"\$2}'"
register: local
- name: "根据网段匹配zabbix模版"
template:
src: zabbix_{{ local.stdout }}.j2
dest: /etc/zabbix/zabbix_agentd.conf
force: yes
owner: root
group: root
mode: 0644
- name: "设置 zabbix agent 开机启动"
service:
name: zabbix-agent
enabled: yes
- name: "重启 zabbix agent"
service:
name: zabbix-agent
state: restarted
EOF
- 创建任务playbook并执行
cat >os-init-5-${RoleName}.yml<<EOF
---
- hosts: all
remote_user: root
gather_facts: true
become: no
roles:
- ${RoleName}
EOF
ansible-playbook -i inventory/hosts os-init-5-${RoleName}.yml
[TOC]