停止某个机房所有机器上包的脚本 pack_idc_stop.py
2015-11-13 16:08
411 查看
一、初衷:
鉴于公司的进程包package都是冗余多点部署的,一般一个idc机房有多台机器部署同一个package。当机房网络出问题的时候,我们不得不查到本机房部署了哪些package,并在包发布系统中一个个查询并停掉。这样就很费时费力。
利用包发布系统提供的一些接口stop.do等,做了个停掉某个机房所有package的脚本。只需之前把所有包名,机房名写入配置文件pack_idc.json,执行脚本时通过带不同的配置文件做为参数,即可实现批量停掉包的目的。
二、原理:
因为包发布系统的接口返回都是json,所以本脚本主要就是用post/get方法调用接口,处理json,利用dict、list做一些匹配、过滤、组合的操作。
主要用到:
python的urllib模块的urlopen(): http://www.cnblogs.com/langdashu/p/4963053.html
python解析json : http://www.cnblogs.com/langdashu/p/4963098.html
python判断内网IP : /article/5636205.html
python的字典、列表的应用
python脚本传参数、处理文件、json注释方法
三、实例:
pack_idc.json pack_idc_start.py pack_idc_stop.py
执行方法 python pack_idc_stop.py pack_idc.json
1、配置文件pack_idc.json
pack_name可以是任意多个,idc_name必须唯一。若pack_name有一个不存在本idc上会自动过滤掉。
通过事先配置好不同的json文件,当需要停某个机房的package的时候,只需执行脚本带上相应的配置文件即可。
2、脚本pack_idc_stop.py
鉴于公司的进程包package都是冗余多点部署的,一般一个idc机房有多台机器部署同一个package。当机房网络出问题的时候,我们不得不查到本机房部署了哪些package,并在包发布系统中一个个查询并停掉。这样就很费时费力。
利用包发布系统提供的一些接口stop.do等,做了个停掉某个机房所有package的脚本。只需之前把所有包名,机房名写入配置文件pack_idc.json,执行脚本时通过带不同的配置文件做为参数,即可实现批量停掉包的目的。
二、原理:
因为包发布系统的接口返回都是json,所以本脚本主要就是用post/get方法调用接口,处理json,利用dict、list做一些匹配、过滤、组合的操作。
主要用到:
python的urllib模块的urlopen(): http://www.cnblogs.com/langdashu/p/4963053.html
python解析json : http://www.cnblogs.com/langdashu/p/4963098.html
python判断内网IP : /article/5636205.html
python的字典、列表的应用
python脚本传参数、处理文件、json注释方法
三、实例:
pack_idc.json pack_idc_start.py pack_idc_stop.py
执行方法 python pack_idc_stop.py pack_idc.json
1、配置文件pack_idc.json
{ "pack_name":["yc_agent","duang_agent"], "idc_name":"北京鲁谷BGP-01", "comment":"这是注释" }
pack_name可以是任意多个,idc_name必须唯一。若pack_name有一个不存在本idc上会自动过滤掉。
通过事先配置好不同的json文件,当需要停某个机房的package的时候,只需执行脚本带上相应的配置文件即可。
2、脚本pack_idc_stop.py
#!/usr/bin/python #-*-coding:utf8-*- import urllib2 import json import os import sys vid = [] real_host = {} real_match = {} #判断内网IP def ip_into_int(ip): return reduce(lambda x,y:(x<<8)+y,map(int,ip.split('.'))) def is_internal_ip(ip): ip = ip_into_int(ip) net_a = ip_into_int('10.255.255.255') >> 24 net_b = ip_into_int('172.31.255.255') >> 20 net_c = ip_into_int('192.168.255.255') >> 16 return ip >> 24 == net_a or ip >>20 == net_b or ip >> 16 == net_c def match_idc(real_host, hname): for key in real_host.keys(): match_ip = [] t3 = len(real_host[key]) for n in range(t3): name_url = 'http://www.google.com/getIp.do?ip=%s' % real_host[key] name = urllib2.urlopen(name_url) name_json = json.loads(name.read()) if name_json['object']['name'] == hname: match_ip.append(real_host[key] ) if len(match_ip) != 0: real_match[key]=match_ip name.close() return real_match def get_ips(vid): t = len(vid) for i in range(t): host_ip = [] ips_url = 'http://www.google.com/IP.do?versionId=%d ' % vid[i] ips =urllib2.urlopen(ips_url) ips_json = json.loads(ips.read()) t2 = len(ips_json['object']) for k in range(t2): flag = 0 ip_list = ips_json['object'][k].split(',') t3 =len(ip_list) for m in range(t3): if flag ==0 and is_internal_ip(ip_list[m]) == False: host_ip.append(ip_list[m]) flag = 1 real_host[vid[i]] = host_ip ips.close() return real_host def get_vid(pname): vid_url = 'http://www.google.com/Version.do?name=%s' % pname html = urllib2.urlopen(vid_url) hjson = json.loads(html.read()) t = len(hjson['object']) if t == 0: print "...................." print "%s is not exist,please check the pack_name !!!" % pname print "all pack start faild !!" sys.exit() for i in range(t): count = hjson['object'][i]['count'] if count > 0: vid.append(hjson['object'][i]['versionId']) html.close() return vid def start_pack(real_match): for x in real_match.keys(): start_url = 'http://www.google.com/start.do?ips=%s&versionId=%s&operator=dw_%s' % (",".join(real_match[x]), x,os.getlogin()) start_html = urllib2.urlopen(start_url) start_json = json.loads(start_html.read()) task_url = 'http://www.google.com/TaskId.do?task_id=%s' % start_json['object']['taskId'] task_html = urllib2.urlopen(task_url) task_json = json.loads(task_html.read()) if start_json['code'] == 0: print "package %s start succees!" % task_json['object'][0]['package_name'] else: print "package %s start error!" % task_json['object'][0]['package_name'] start_html.close() task_html.close() if __name__=='__main__': if len(sys.argv) != 2: print "Usage: python pack_idc_stop.py xxxx.json" sys.exit() with open(sys.argv[1]) as f: data = f.read() pack_idc = json.loads(data) t = len(pack_idc['pack_name']) hname = pack_idc['idc_name'] for n in range(t): pname = pack_idc['pack_name'] print "starting %s on %s ...... " % (pname, hname) vid = get_vid(pname) print '..............' real_host = get_ips(vid) real_match = match_idc(real_host, hname) start_pack(real_match)
相关文章推荐
- 在Ubuntu中安装软件遇到的问题
- 【NVIDIA Jetson TK1】二,TK1开发板安装CUDA与opencv
- Hadoop 深入浅出学习记录1
- php 操作linux Crontab ,设定定时任务
- Solr5.3.1部署到tomcat7
- linux下find(文件查找)命令的用法总结
- myeclipse debug模式启动tomcat巨慢无比解决办法
- AOP
- Linux secure boot(安全启动)时添加Nvidia显卡驱动
- Linux下Tomcat的启动、关闭、杀死进程
- rotatelogs分割apache日志文件
- Kafka-2.11学习笔记(二)Shell脚本介绍
- nginx防盗链设置
- Tomcat的class加载的优先顺序
- 【鸟哥的linux私房菜-学习笔记】Linux 的启动流程分析
- Linux终端杀手、程序员利器-Tmux
- Linux常用命令大全
- centos 利用crontab定时任务设计
- SSH Secure Shell Client 工具的使用
- 在 CentOS 5.8 上安装 Graphite