TOUVE 发表于 2015-12-24 12:12:26

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]
查看完整版本: Ansible-playbook 源码安装 Zabbix_agent