zhouying23 发表于 2018-9-29 12:19:03

etcd安装部署及数据同步MySQL

#!/usr/bin/env python  
#coding:utf-8
  

  
import etcd
  
import time
  
import json
  
import socket
  
importfcntl
  
import struct
  
import uuid
  
import commands
  
from optparse import OptionParser
  
import sys
  
import os
  
from collections import OrderedDict
  
from multiprocessing import cpu_count
  

  
ttl= 300
  
processname="cmdb_agent"
  

  
def uniquecheck(processname,pid):
  
    print commands.getstatusoutput("ps -ef|grep %s|grep -v grep|grep -v %s|awk '{print $2}'|xargs kill -9" %(processname,pid))
  

  

  
def setetcddata(hostname,pushjson,ttl):
  
    client = etcd.Client(host='172.16.110.47', port=2379,read_timeout=20)
  
    client.write('/cmdb/{0}'.format(hostname),pushjson, ttl=ttl)
  

  

  
def getoptparse():
  
    parser = OptionParser()
  
    parser.add_option("-p",dest="projectname",help=u"项目名称")
  
    parser.add_option("-i",dest="ifname",
  
                      help=u"默认网卡",default = "ens33")
  
    parser.add_option("-P", dest="pre",
  
                      help=u"hostname前缀", default="auto")
  
    (options, args) = parser.parse_args()
  
    if not options.projectname:
  
      print u"项目名称为空"
  
      sys.exit()
  
    projectname = options.projectname
  
    ifname = options.ifname
  
    hostnamepre=options.pre
  
    print projectname,ifname,hostnamepre
  
    returnprojectname,ifname,hostnamepre
  

  

  
def create_hostname(projectname,ip,hostnamepre):
  
    ipsplit = ip.split(".")
  
    if hostnamepre == "auto":
  
      if int(ipsplit) > 100:
  
            hostnamepre= "qm-hd2a"
  
      else:
  
            hostnamepre = "qm-hd2b"
  
    hostname = "{0}-{1}-{2}_{3}".format(hostnamepre,projectname,ipsplit,ipsplit)
  
    print hostname
  
    returnhostname
  

  

  
def get_ip_address(ifname):
  
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  
    return socket.inet_ntoa(fcntl.ioctl(
  
      s.fileno(),
  
      0x8915,# SIOCGIFADDR
  
      struct.pack('256s', ifname[:15])
  
    ))
  

  
def get_mac_address():
  
    mac=uuid.UUID(int = uuid.getnode()).hex[-12:]
  
    return ":".join( for e in range(0,11,2)])
  

  
def get_serverconfig():
  
    meminfo = OrderedDict()
  
    try:
  
      with open('/proc/meminfo') as f:
  
            for line in f:
  
                meminfo] = line.split(':').strip()
  
      MemTotal = meminfo.get("MemTotal")
  
      MemTotal = float(MemTotal.split()) / 1024 / 1024
  
    except:
  
      MemTotal = 0
  
    returnstr(cpu_count()),'%.2fG' %MemTotal
  

  

  
def set_hostname(hostname):
  
    locahostname = socket.getfqdn(socket.gethostname())
  
    if locahostname == hostname:
  
      return 1
  
    print commands.getstatusoutput('hostname {0}'.format(hostname))
  
    print commands.getstatusoutput("sed -i 's/^HOSTNAME=.*$/HOSTNAME={0}/' /etc/sysconfig/network".format(hostname))
  

  
if __name__=='__main__':
  
    selfpid = str(os.getpid())
  
    uniquecheck(processname,selfpid)
  
    projectname, ifname, hostnamepre = getoptparse()
  
    ip = get_ip_address(ifname)
  
    hostname=create_hostname(projectname,ip,hostnamepre)
  
    macaddr = get_mac_address()
  
    cputotal,memtotal = get_serverconfig()
  
    print set_hostname(hostname)
  
    pushjson = json.dumps({"macaddr":macaddr,"ip":ip,"hostname":hostname,"projectname":projectname,"cputotal":cputotal,"memtotal":memtotal})
  
    setetcddata(hostname, pushjson, ttl)


页: [1]
查看完整版本: etcd安装部署及数据同步MySQL