#!/usr/bin/env/python

# -*- coding: utf-8 -*-

 

import os

import time

import re

import commands

 

zabbix_dir = os.path.dirname(os.path.realpath(__file__))

 

cron_file = '/var/spool/cron/crontabs/root'

 

 

zabbix_cmds=[

    'useradd zabbix',

    'mkdir /var/log/zabbix-agent/ -pv',

    'chmod a+rw /var/log/zabbix-agent/',

    'mkdir /var/run/zabbix/ -pv',

    'chmod a+rw /var/run/zabbix/',

    'ufw allow 10050/tcp',

    '/etc/init.d/cron restart'

]

 

load_cmds = [

    # 'docker load <zabbix-mysql.tar',

    'docker load <zabbix-server.tar',

    'docker load <zabbix-web.tar',

]

 

mysql_cmds=[

    'docker run --restart=always --name zabbix-mysql -v %s:/opt -e MYSQL_DATABASE=zabbix -e MYSQL_ROOT_PASSWORD=\"test\" -e TZ=Asia/Shanghai -d storage-shshukun:5050/mysql:latest --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max-allowed-packet=33554432'%(zabbix_dir),

    # 'docker run --name zabbix-mysql -d  -v %s:/opt -e MYSQL_ROOT_PASSWORD=\"test\" storage-shshukun:5050/mysql:latest'%(zabbix_dir),

]

 

start_cmds = ['ufw allow 10050/tcp',

              '/etc/init.d/cron restart',

              'docker exec zabbix-mysql sh -c \"exec mysql -uroot -ptest zabbix < /opt/zabbix.sql\"',

              'docker run --name zabbix-server -p10051:10051 --link zabbix-mysql:mysql -e DB_SERVER_HOST="zabbix-mysql" -e MYSQL_USER="root" -e MYSQL_PASSWORD="test" -d storage-shshukun:5050/zabbix-server:latest',

              'docker run --name zabbix-web --link zabbix-mysql:mysql -p6984:80 -p8443:443 --link zabbix-server:zabbix-server  -e DB_SERVER_HOST="zabbix-mysql" -e MYSQL_USER="root" -e MYSQL_PASSWORD="test" -e ZBX_SERVER_HOST="zabbix-server" -e PHP_TZ="Asia/Shanghai" -d storage-shshukun:5050/zabbix-web:latest'

 

              ]

 

 

def cron():

    with open(cron_file) as f:

        if len(re.findall('\n\*/1 \* \* \* \* python \/home\/devops1\/sk\/delivering-toolset\/zabbix\/ping_aws.py',f.read()))==0:

            commands.getoutput('echo \"*/1 * * * * python /home/devops1/sk/delivering-toolset/zabbix/ping_aws.py\">>/var/spool/cron/crontabs/root')

            print "crontable add ping asw"

        else:

            print "ping aws in crontable "

 

def offline_install_zabbix_agent():

    os.chdir(zabbix_dir)

    executes(zabbix_cmds)

    os.popen('mkdir -p /etc/zabbix/')

    # 拷贝zabbix 配置文件到/etc/zabbix/下

    print os.popen('cp zabbix_agentd.conf /etc/zabbix/ ')

    # 解压zabbix 二进制包到/usr/

    print os.popen('tar -zxvf zabbix-3.2.11.tar.gz -C /usr/local').read()

    os.chdir('/usr/local/zabbix-3.2.11')

    output = commands.getoutput('./configure  --enable-agent')

    print output

    time.sleep(3)

    output = commands.getoutput('make install')

    print output

 

 

def executes(cmds):

    for cmd in cmds:

        output = commands.getoutput(cmd)

        print(output)

        time.sleep(3)

 

 

def get_service_ip():

    ifconfig_info = os.popen('docker exec zabbix-server bash -c \"ifconfig\"').read()

    ip = re.findall(r'inet addr:(172+.\d+.\d+.\d+)', ifconfig_info)[0]

    return ip

 

 

def zabbix_agent_restart():

    cmd = 'netstat -ltpn | grep 10050'

    result = os.popen(cmd).read()

    if result == '':

        os.popen('zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf').read()

    else:

        os.popen('killall -9 zabbix_agentd').read()

        os.popen('zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf').read()

 

 

def install():

    print os.popen("python stop_zabbix_docker.py").read()

    #添加ping_aws定时任务

    cron()

    # 导入docker镜像

    executes(load_cmds)

    # 启动zabbix-mysql

    executes(mysql_cmds)

    time.sleep(30)

    # 启动zabbix-web-nginx-mysql、mysql

    executes(start_cmds)

    # 查看docker 容器状态

    cmd = 'docker ps -a'

    print(os.popen(cmd).read())

    # 获取zabbix server ip

    ip = get_service_ip()

    cmd = 'docker exec zabbix-server bash -c "echo \\"172.17.0.1  zabbix\\" >>/etc/hosts"'

    print(os.popen(cmd).read())

    # 安装zabbix——agent 客户端

    offline_install_zabbix_agent()

    os.chdir(zabbix_dir)

    # 拷贝配置文件

    cmd = 'cp zabbix_agentd.conf /etc/zabbix/'

    print os.popen(cmd).read()

    cmd = 'sed -i \'s/172.17.0.8/%s/g\' /etc/zabbix/zabbix_agentd.conf' % (ip)

    print(os.popen(cmd).read())

    # 启动zabbix

    zabbix_agent_restart()

    print os.popen('netstat -ltpn | grep 10050').read()

    print 'install done'

 

 

if __name__ == '__main__':

    install()

 

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐