Ansible-playbook 源码安装 Zabbix_agent
·· 先来了解一下目录结构[*]root@Ansible:[/root]# cd /etc/ansible/ ; tree .
[*].
[*]├── ansible.cfg
[*]├── delete_zabbix_agent.yml
[*]├── hosts
[*]├── install_zabbix_agent.yml
[*]└── roles
[*] ├── delete_zabbix_agent
[*] │ ├── tasks
[*] │ │ └── main.yml
[*] │ └── vars
[*] │ └── main.yml
[*] └── install_zabbix_agent
[*] ├── files
[*] │ └── zabbix-2.4.5.tar.gz
[*] ├── tasks
[*] │ └── main.yml
[*] ├── templates
[*] │ ├── zabbix_agentd
[*] │ └── zabbix_agentd.conf
[*] └── vars
[*] └── main.yml
## ansible.cfg此文件为 ansible 的主配置文件
## hosts 用于定义主机组
## roles 定义不同的角色
## install_zabbix_agent.yml用于安装 zabbix_agent 的引导文件
## delete_zabbix_agent.yml 用于删除已安装的 zabbix_agent 的引导文件
[*]└── install_zabbix_agent
[*] ├── files
[*] │ └── zabbix-2.4.5.tar.gz
[*] ├── tasks
[*] │ └── main.yml
[*] ├── templates
[*] │ ├── zabbix_agentd
[*] │ └── zabbix_agentd.conf
[*] └── vars
[*] └── main.yml
## 其中,install_zabbix_agent 为一个角色,用于安装 zabbix_agent
## file 目录:用于存放将要拷贝到远程主机的安装包等
## tasks 目录:将要执行的所有任务,如果比较复杂,可以单独定义不同的任务,最后在 main.yml 文件中引用即可
## templates 目录:模板目录,这里存放着一些可变的文件,即:每台主机上的这些文件中的内容都不完全相同
## vars 目录:用于存放变量
## 这是一个比较简单的结构,其实一个角色中还可以有 meta 、handlers 等
·· 实现 playbook 安装软件需要的步骤
1、定义 hosts( 给哪些主机安装软件 )
[*]vim /etc/ansible/hosts
[*]
[*][mini]
[*]
[*]129.139.153.78:16283
[*]155.139.190.94:12573
2、定义入口文件 install_zabbix_agent.yml
[*]vim /etc/ansible/install_zabbix_agent.yml
[*]---
[*]- hosts: mini
[*]roles:
[*]- install_zabbix_agent
## 可以看到将要安装的主机组为 mini 组,角色为 install_zabbix_agent
3、定义角色 install_zabbix_agent
[*]tree /etc/ansible/roles/install_zabbix_agent/
[*]
[*]├── files
[*]│ └── zabbix-2.4.5.tar.gz
[*]├── tasks
[*]│ └── main.yml
[*]├── templates
[*]│ ├── zabbix_agentd
[*]│ └── zabbix_agentd.conf
[*]└── vars
[*] └── main.yml
## 建立 files 目录,存放编译安装过的 zabbix_agent 目录的压缩文件,用于拷贝到远程主机
## 建立 tasks 目录,用于编写将要执行的任务
## 建立 templates 目录,用于存放可变的模板文件
## 建立 vars 目录,用于存放变量信息
[*]cat /etc/ansible/roles/install_zabbix_agent/tasks/main.yml
[*]---
[*]- name: Install Software
[*]yum: name={{ item }} state=latest
[*]with_items:
[*] - libcurl-devel
[*]- name: Create Zabbix User
[*]user: name={{ zabbix_user }} state=present createhome=no shell=/sbin/nologin
[*]- name: Copy Zabbix.tar.gz
[*]copy: src=zabbix-{{ zabbix_version }}.tar.gz dest={{ zabbix_dir }}/src/zabbix-{{ zabbix_version }}.tar.gz owner=root group=root
[*]- name: Uncompression Zabbix.tar.gz
[*]shell: tar zxf {{ zabbix_dir }}/src/zabbix-{{ zabbix_version }}.tar.gz -C {{ zabbix_dir }}/
[*]- name: Copy Zabbix Start Script
[*]template: src=zabbix_agentd dest=/etc/init.d/zabbix_agentd owner=root group=root mode=0755
[*]- name: Copy Zabbix Config File
[*]template: src=zabbix_agentd.conf dest={{ zabbix_dir }}/zabbix/etc/zabbix_agentd.conf owner={{ zabbix_user }} group={{ zabbix_user }} mode=0644
[*]- name: Modify Zabbix Dir Permisson
[*]file: path={{ zabbix_dir }}/zabbix owner={{ zabbix_user }} group={{ zabbix_user }} mode=0755 recurse=yes
[*]- name: Start Zabbix Service
[*]shell: /etc/init.d/zabbix_agentd start
[*]- name: Add Boot Start Zabbix Service
[*]shell: chkconfig --level 35 zabbix_agentd on
[*]cat /etc/ansible/roles/install_zabbix_agent/vars/main.yml
[*]
[*]zabbix_dir: /usr/local
[*]zabbix_version: 2.4.5
[*]zabbix_user: zabbix
[*]zabbix_port: 10050
[*]zabbix_server_ip: 131.142.101.120
[*]cat /etc/ansible/roles/install_zabbix_agent/templates/zabbix_agentd
[*]
[*]#!/bin/bash
[*]#
[*]# chkconfig: - 90 10
[*]# description: Starts and stops Zabbix Agent using chkconfig
[*]# Tested on Fedora Core 2 - 5
[*]# Should work on all Fedora Core versions
[*]#
[*]# @name: zabbix_agentd
[*]# @author: Alexander Hagenah
[*]# @created: 18.04.2006
[*]#
[*]# Modified for Zabbix 2.0.0
[*]# May 2012, Zabbix SIA
[*]#
[*]# Source function library.
[*]. /etc/init.d/functions
[*]
[*]# Variables
[*]# Edit these to match your system settings
[*]
[*]
[*] # Zabbix-Directory
[*] BASEDIR={{ zabbix_dir }}/zabbix ## 引用 vars/main.yml 定义的变量
[*]
[*]
[*] # Binary File
[*] BINARY_NAME=zabbix_agentd
[*]
[*]
[*] # Full Binary File Call
[*] FULLPATH=$BASEDIR/sbin/$BINARY_NAME
[*]
[*]
[*] # PID file
[*] PIDFILE=/tmp/$BINARY_NAME.pid
[*]
[*]
[*] # Establish args
[*] ERROR=0
[*] STOPPING=0
[*]
[*]#
[*]# No need to edit the things below
[*]#
[*]
[*]# application checking status
[*]if [ -f $PIDFILE ] && [ -s $PIDFILE ]
[*] then
[*] PID=`cat $PIDFILE`
[*]
[*]
[*] if [ "x$PID" != "x" ] && kill -0 $PID 2>/dev/null && [ $BINARY_NAME == `ps -e | grep $PID | awk '{print $4}'` ]
[*] then
[*] STATUS="$BINARY_NAME (pid `pidof $APP`) running.."
[*] RUNNING=1
[*] else
[*] rm -f $PIDFILE
[*] STATUS="$BINARY_NAME (pid file existed ($PID) and now removed) not running.."
[*] RUNNING=0
[*] fi
[*]else
[*] if [ `ps -e | grep $BINARY_NAME | head -1 | awk '{ print $1 }'` ]
[*] then
[*] STATUS="$BINARY_NAME (pid `pidof $APP`, but no pid file) running.."
[*] else
[*] STATUS="$BINARY_NAME (no pid file) not running"
[*] fi
[*] RUNNING=0
[*]fi
[*]
[*]# functions
[*]start() {
[*] if [ $RUNNING -eq 1 ]
[*] then
[*] echo "$0 $ARG: $BINARY_NAME (pid $PID) already running"
[*] else
[*] action $"Starting $BINARY_NAME: " $FULLPATH
[*] touch /var/lock/subsys/$BINARY_NAME
[*] fi
[*]}
[*]
[*]stop() {
[*] echo -n $"Shutting down $BINARY_NAME: "
[*] killproc $BINARY_NAME
[*] RETVAL=$?
[*] echo
[*] [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$BINARY_NAME
[*] RUNNING=0
[*]}
[*]
[*]# logic
[*]case "$1" in
[*] start)
[*] start
[*] ;;
[*] stop)
[*] stop
[*] ;;
[*] status)
[*] status $BINARY_NAME
[*] ;;
[*] restart)
[*] stop
[*] sleep 10
[*] start
[*] ;;
[*] help|*)
[*] echo $"Usage: $0 {start|stop|status|restart|help}"
[*] cat (item=libcurl-devel)
[*]
[*]TASK: [install_zabbix_agent | Create Zabbix User] *****************************
[*]changed: [129.139.153.78]
[*]changed: [155.139.190.94]
[*]
[*]TASK: [install_zabbix_agent | Copy Zabbix.tar.gz] *****************************
[*]changed: [129.139.153.78]
[*]changed: [155.139.190.94]
[*]
[*]TASK: [install_zabbix_agent | Uncompression Zabbix.tar.gz] ********************
[*]changed: [129.139.153.78]
[*]changed: [155.139.190.94]
[*]
[*]TASK: [install_zabbix_agent | Copy Zabbix Start Script] ***********************
[*]changed: [155.139.190.94]
[*]changed: [129.139.153.78]
[*]
[*]TASK: [install_zabbix_agent | Copy Zabbix Config File] ************************
[*]changed: [129.139.153.78]
[*]changed: [155.139.190.94]
[*]
[*]TASK: [install_zabbix_agent | Modify Zabbix Dir Permisson] ********************
[*]changed: [155.139.190.94]
[*]changed: [129.139.153.78]
[*]
[*]TASK: [install_zabbix_agent | Start Zabbix Service] ***************************
[*]changed: [129.139.153.78]
[*]changed: [155.139.190.94]
[*]
[*]TASK: [install_zabbix_agent | Add Boot Start Zabbix Service] ******************
[*]changed: [129.139.153.78]
[*]changed: [155.139.190.94]
[*]
[*]PLAY RECAP ********************************************************************
[*]155.139.190.94 : ok=10 changed=9 unreachable=0 failed=0
[*]129.139.153.78 : ok=10 changed=9 unreachable=0 failed=0
## 关注一下,启动脚本跟配置文件中变量的引用。
## 完成安装,可以去客户机检查效果了 !
附上:delete_zabbix_agent.yml 相关内容
[*]vim /etc/ansible/delete_zabbix_agent.yml
[*]
[*]---
[*]- hosts: mini
[*]roles:
[*]- delete_zabbix_agent
[*]vim /etc/ansible/roles/delete_zabbix_agent/tasks/main.yml
[*]
[*]---
[*]- name: Stop Zabbix_agent
[*]shell: pgrep zabbix_agentd | xargs kill
[*]ignore_errors: yes
[*]- name: Delete Boot Start
[*]shell: chkconfig --del zabbix_agentd
[*]- name: Delete Start Script
[*]shell: rm -rf /etc/init.d/zabbix_agentd
[*]- name: Delete Install Dir
[*]shell: rm -rf {{ zabbix_dir }}/zabbix
[*]- name: Delete Software
[*]shell: rm -rf {{ zabbix_dir }}/src/zabbix-{{ zabbix_version }}.tar.gz
[*]- name: Delete Log File
[*]shell: rm -rf /tmp/zabbix_agentd.log
[*]- name: Delete Zabbix User
[*]user: name={{ zabbix_user }} state=absent remove=yes
[*]vim /etc/ansible/roles/delete_zabbix_agent/vars/main.yml
[*]
[*]zabbix_dir: /usr/local
[*]zabbix_version: 2.4.5
[*]zabbix_user: zabbix
页:
[1]