ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

docker_net.py

2022-01-25 12:02:09  阅读:105  来源: 互联网

标签:ip py sh str print docker os net


# # -*- 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()

标签:ip,py,sh,str,print,docker,os,net
来源: https://www.cnblogs.com/tangshow/p/15842387.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有