1. 程式人生 > >02-日常管理腳本-ansible 程序斷電修復;

02-日常管理腳本-ansible 程序斷電修復;

pre 研發 vmware requests 1.2 from watermark pen line

1.起因:
(1).公司內網機房很(操蛋) 時不時機房意外斷電,所有內網研發環境和devops 平臺運行 VMware vCenter 平臺上;;
(2).公司研發環境復雜: Nginx Tomcat Zookeeper mysql Eureka Rocketmq Codis 以及各個模塊的應用
(3).每一次斷電人肉運維啟動程序流程: 1.Vcenter--->虛擬機——>基礎服務Mysql/codis/Zk/Eureka/Rocketmq/監控---->Docker/k8s-->各個模塊應用


內網環境整體架構如下


技術分享圖片


2.優化方案思路如下;


1.程序和對應的基礎運維服務程序以及完全記錄在CMDB中,切對應有應用名稱和使用IP地址對應關系;

2.cmdb 提供對應的應用IP Restfu接口;

3.通過腳本讀取程序接口讀取應用名稱和對應ip地址,使用ansible 模塊執行對應的ip地址上 部署的應用;

4.本實例中cmdb 接口開發大神使用了sql 語句接口調用即可返回對應的數據;


3.腳本內容如下;

#!/usr/bin/env python
import sys
import json
import requests
import subprocess

url = 'http://192.168.1.200:80/sql'
data = {
    'sql': 'select app.ip,instance.app_name from app,instance where app.instance_id = instance.id and app.ip like "192.168.54.%"'}
Put_data = requests.post(url, json=data)
Data_text = Put_data.text
weatherJSON = json.loads(Data_text)
with open('/tmp/Docker_Test_ip_txt','w') as f:      ###落地磁盤保存###
   j = 0
for i in weatherJSON["data"]:
    j = j + 1
   # APP_ip = i['ip']  +" "+
    if j == 1 :
       ansible_host_name = "[Docker-Test]" + "\n"
       f.write(ansible_host_name)
    else:
       APP_ip = i['ip'] + "\n"
       f.write(APP_ip)
       APP_name=i['app_name'] + "\n"
       print "###", APP_name, APP_ip
       cmd = """ansible -i {}, all -m shell -a 'su - root -c "/chj/app/{}/bin/console restart"' -b """.format(APP_ip.strip(), APP_name.strip())
       print cmd
       p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT,universal_newlines=True)
       result = p.communicate()
       print result[0]











02-日常管理腳本-ansible 程序斷電修復;