docker_net.py

# # -*- coding: utf-8 -*- #获取路由器下可用ip,分配给各个容器,循环检查分配是否正常 import os import time from itertools import islice import os.path #网关 ip_gate = "192.168.124.1" mask = "" #可用ip列表 ip1 = "" ip2 = "" ip3 = "" ip4 = "" # docker容器列表 docker_list = ["in1","in2","in3","in4"] #log logfile = "/root/cron/docker_net_check.log" def save_file(file,data,type): t = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())) f = open(file, type) f.write(str(t)) f.write(data) f.close() # init 初始化 def init_ip(): if os.path.isfile("/root/cron/ping_ip.sh"): print("init_ip: find ping_ip.sh ok") else: f = open("/root/cron/ping_ip.sh", "a+") f.write("#!/bin/sh\n") f.write("for i in `seq 211 229`\n") f.write("do\n") f.write("ping -c 1 $1$i | grep -q 'ttl=' || echo \"$1$i\" &\n") f.write("done\n") f.close() print("init_ip: create ping_ip.sh ok") if os.path.isfile("/root/cron/pip_ip.txt"): os.remove("/root/cron/pip_ip.txt") print("init_ip: del ping_ip.log") ping_str = "/usr/bin/ping " + ip_gate +" -c 1 -W 1" ping_gateway = os.popen(ping_str) strr = ping_gateway.read().find("1 packets transmitted, 1 received") print("init_ip: ping test gate:" + str(strr)) if int(strr) > 0: sh_str = "/usr/bin/sh /root/cron/ping_ip.sh " + str(ip_gate[:-1]) + " >> /root/cron/pip_ip.txt" os.popen(sh_str) else: while True: print("init_ip: gate err, please check ip_gate") # test bad time.sleep(1) # 读取可用ip def read_ip(): global ip1 global ip2 global ip3 global ip4 if os.path.isfile("/root/cron/pip_ip.txt"): print("read_ip: find pip_ip.txt") for i in range(10): f = open("/root/cron/pip_ip.txt", "r") ip = f.readlines() f.close() if len(ip) < 4: print("read_ip: -for") time.sleep(1) else: continue #print(ip) print("read_ip : len(ip)" ,str(len(ip))) if len(ip) > 3: k = list(islice(ip, 4)) ip1 = k[0][:-1] ip2 = k[1][:-1] ip3 = k[2][:-1] ip4 = k[3][:-1] print(ip1, ip2, ip3, ip4) else: print("read_ip : ip < 4 ") save_file("/root/cron/pip_py.log"," ip < 4 \n","a+") else: print("read_ip : no find ") save_file("/root/cron/pip_py.log", "no find ip.log", "a+") print("read_ip: ",ip1,ip2,ip3,ip3) # 防火墙添加 def firewalld(ip1, ip2, ip3, ip4): str1 = "/usr/bin/firewall-cmd --add-forward-port=port=8201:proto=tcp:toport=8080:toaddr=" + str(ip1) str2 = "/usr/bin/firewall-cmd --add-forward-port=port=8202:proto=tcp:toport=8080:toaddr=" + str(ip2) str3 = "/usr/bin/firewall-cmd --add-forward-port=port=8203:proto=tcp:toport=8080:toaddr=" + str(ip3) str4 = "/usr/bin/firewall-cmd --add-forward-port=port=8204:proto=tcp:toport=8080:toaddr=" + str(ip4) os.popen("/usr/bin/firewall-cmd --reload") os.popen(str1) os.popen(str2) os.popen(str3) os.popen(str4) os.popen("/usr/bin/firewall-cmd --list-all") print("firewalld :ok") #重启所有容器 def restart_docker(): for docker_name in docker_list: sh_str = "/usr/bin/docker restart " + docker_name r = os.popen(sh_str) r = r.read() print("restart_docker: ", r) #使用pipework给容器分配ip def pipework_ip(docker_name,ip,ip_gate): sh_str = "/usr/bin/docker restart " + docker_name r = os.popen(sh_str) r = r.read() print("restart_docker: ", r) str1 = "/usr/local/bin/pipework br0 " + docker_name + " " + str(ip) + "/24" + "@" + str(ip_gate) os.popen(str1) print("pipework_ip: ",docker_name) #检查ip分配情况,分配失败的容器重新分配 def check(): sh_str1 = "/usr/bin/docker exec -i " + "in1" + " sh -c 'ip addr' |grep 'inet 192'" sh_str2 = "/usr/bin/docker exec -i " + "in2" + " sh -c 'ip addr' |grep 'inet 192'" sh_str3 = "/usr/bin/docker exec -i " + "in3" + " sh -c 'ip addr' |grep 'inet 192'" sh_str4 = "/usr/bin/docker exec -i " + "in4" + " sh -c 'ip addr' |grep 'inet 192'" r1 = os.popen(sh_str1) r1 = r1.read() r2 = os.popen(sh_str2) r2 = r2.read() r3 = os.popen(sh_str3) r3 = r3.read() r4 = os.popen(sh_str4) r4 = r4.read() #print("check_net: r.read():",r) if "inet 192" in r1: print("check: " +"in1" + " net is ok") else: print("check: " + "in1" + " net is err") save_file(logfile, "in1 bad", "a+") pipework_ip("in1", ip1, ip_gate) if "inet 192" in r2: print("check: " +"in2" + " net is ok") else: print("check: " + "in2" + " net is err") save_file(logfile, "in2 bad", "a+") pipework_ip("in2", ip2, ip_gate) if "inet 192" in r3: print("check: " +"in3" + " net is ok") else: print("check: " + "in3" + " net is err") save_file(logfile, "in3 bad", "a+") pipework_ip("in3", ip3, ip_gate) if "inet 192" in r4: print("check: " +"in4" + " net is ok") else: print("check: " + "in4" + " net is err") save_file(logfile, "in4 bad", "a+") pipework_ip("in4", ip4, ip_gate) time.sleep(1) #运行 def start(): init_ip() read_ip() restart_docker() firewalld(ip1, ip2, ip3, ip4) while True: print("start: check") check() time.sleep(10) start()
上一篇:字符串->树 3.重建二叉树(已知中序后序)106


下一篇:leetcode105 从前序与中序遍历序列构造二叉树