02-日常管理腳本-ansible 程序斷電修復;
阿新 • • 發佈:2018-07-25
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-->各個模塊應用
(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 程序斷電修復;