#coding:utf-8
 #Author:Mr Zhi
 """
 HAproxy配置文件操作:

 1. 根据用户输入输出对应的backend下的server信息

 2. 可添加backend 和sever信息

 3. 可修改backend 和sever信息

 4. 可删除backend 和sever信息

 5. 操作配置文件前进行备份

 6 添加server信息时,如果ip已经存在则修改;如果backend不存在则创建;若信息与已有信息重复则不操作

 配置文件 参考 http://www.cnblogs.com/alex3714/articles/5717620.html
 """
 import shutil
 def Menu(): #定于关于菜单函数
     menu = (
         """\033[35;1m
         1.增加
         2.删除
         3.修改
         4.查询
         \033[0m""")
     print(menu.strip('\n'))

 def Backup_proxy(): #定于关于备份文件的函数
     shutil.copyfile("HAproxy.conf","HAproxy.conf.bak")

 def Add_haproxy():  #定义关于增加加数据的函数
     domain = input('输入你要添加的域名:')
     domain_ip = input("输入你要添加的ip:")
     domain_weight = input("输入weight值:")
     domain_maxconn = input("输入maxconn值:")
     Backup_proxy()  # 写入数据前执行备份文件的函数
     with open("HAproxy.conf","a+",encoding="utf-8") as f: #打开文件追加模式
         f_w = "backend %s\n\t\t server %s %s weight %s maxconn %s" % (domain,domain_ip,domain_ip,domain_weight,domain_maxconn)
         f.write('\n' + f_w), f.flush() ##把数据写入文件
         print("\033[36;1m添加成功!\033[0m")

 def Alter_haproxy(): #定义关于修改数据的函数
     domain_old1 = input("输入你要修改的域名:")
     print(type(domain_old1))
     domain_new1 = input("输入新域名:")
     ip_new1 = input("输入修改后的ip:")
     weight_new1 = input("输入修改后的weight值:")
     maxconn_new1 = input("输入修改后的maxconn值:")
     with open("HAproxy.conf", "r", encoding="utf-8") as f:
         lines = f.readlines()
         num = lines.index("backend %s\n" %domain_old1) #赋值域名对应的列表索引号
         lines[num] = "backend %s\n" %domain_new1 #根据索引号修改对应的backend
         lines[num + 1] = "\t\tserver %s %s weight %s maxconn %s\n" % (ip_new1,ip_new1,weight_new1,maxconn_new1) #根据索引号修改对应的server
         Backup_proxy()  # 写入数据前执行备份文件的函数
     with open("HAproxy.conf", "w", encoding="utf-8") as f_w:
         for line in lines:
             f_w.write(line) #把修改后的列表写入文件中
         print("\033[32;1m修改成功!\033[0m")

 def Search_haproxy():  #定义关于查看数据的函数
     domain= input("输入你要查看的域名:")
     with open("HAproxy.conf", "r", encoding="utf-8") as f:
         lines = f.readlines()
         num = lines.index("backend %s\n" %domain) #赋值域名对应的列表索引号
         lines[num] = "backend %s\n" %domain #根据索引号修改对应的backend
         print(lines[num],lines[num + 1])

 def Delete_haproxy(): #定义关于删除数据的函数
     domain = input("输入你要删除的域名节点:")
     with open("HAproxy.conf", "r", encoding="utf-8") as f:
         lines = f.readlines()
         num = lines.index("backend %s\n" %domain) #赋值域名对应的列表索引号
         lines.pop(num)
         lines.pop(num) #这里不用num + 1,因为上面已经删除了一个索引号
     Backup_proxy()  # 写入数据前执行备份文件的函数
     with open("HAproxy.conf", "w", encoding="utf-8") as f_w: #打开文件
         for line in lines:
             f_w.write(line)
         print("\033[37;1m删除成功!\033[0m")

 while True:
     Menu()
     number = int(input("input number:"))
     if number == 1:
         Add_haproxy()
     elif number == 2:
         Delete_haproxy()
     elif number == 3:
         Alter_haproxy()
     elif number == 4:
         Search_haproxy()
     else:
         print("\033[31;1mInput is woring\033[0m")
         continue

第三周作业HAproxy文件操作的更多相关文章

  1. 2017-2018-1 20179205《Linux内核原理与设计》第三周作业

    <Linux内核原理与分析>第三周作业 教材学习总结 第三章 进程管理 进程是Unix操作系统抽象概念中最基本的一种,是正在执行的程序代码的实时结果:线程,是在进程中活动的对象.而Linu ...

  2. 第三周作业-课本&&视频学习

    <网络攻防技术与实践>第三周作业 Part I 寻找自己留在互联网上的足迹并消除隐私 1.1 google/baidu搜索自己的qq号 搜索结果如图,搜到的有用信息其实就是图上这么几条,能 ...

  3. 第三周作业、实时操作系统µC/OS介绍及其它内容

    作业要求 见<实时控制软件设计>第三周作业 1 阅读笔记--µC/OS 1.1 基本介绍 µC/OS是由Micrium公司研发的实时操作系统,以µC/OS-II或µC/OS-III为内核, ...

  4. 2017-2018-1 JAVA实验站 第三周作业

    2017-2018-1 JAVA实验站 第三周作业 团队展示 队名 JAVA实验站 拟作的团队项目描述 (2048)增加其他模式,使得2048更加丰富多彩 团队的首次合照 团队的特色描述 团队内部很团 ...

  5. 2019-2020-1 20199329《Linux内核原理与分析》第三周作业

    <Linux内核原理与分析>第三周作业 一.上周问题总结: 第二周头脑风暴完成较慢 虚拟机libc配置错误 书本知识使用不够熟练 二.本周学习内容: 1.实验楼环境虚拟一个x86的CPU硬 ...

  6. JAVA第三周作业(从键盘输入若干数求和)

    JAVA第三周作业(从键盘输入若干数求和) 在新的一周,我学习了JAVA的IO编程.下面的代码实现了从键盘输入若干数求和的目标.import java.util.Scanner; public cla ...

  7. 2018-2019-1 20189221《Linux内核原理与分析》第三周作业

    2018-2019-1 20189221<Linux内核原理与分析>第三周作业 实验二 完成一个简单的时间片轮转多道程序内核代码 实验过程 在实验楼中编译内核 编写mymain.c函数和m ...

  8. 2017-2018-2 1723《程序设计与数据结构》第三周作业 & 实验一 总结

    作业地址 第三周作业:https://edu.cnblogs.com/campus/besti/CS-IMIS-1723/homework/1667 提交情况如图: 实验一:https://edu.c ...

  9. 第三周作业(一)VS安装及单元测试练习

    第三周作业(一) 需求:练习教科书第22~25页单元测试练习,要求自行安装Visual Studio开发平台,版本至少在2010以上,要求把程序安装过程和练习过程写到博客上,越详细越好,要图文并茂,没 ...

随机推荐

  1. iOS UI基础 - 20 UITextField

    //找到已经创建好的UITextField UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(, , RFS ...

  2. Selenium基础知识(八)文本域处理textarea

    textarea文本域selenium有时处理不了,但是我们可以采用迂回,解决这个问题 那么,我们用到了execute_script()方法来调用javascript来解决这个问题 这其中涉及DOM, ...

  3. UML学习笔记(五)--顺序图

    顺序图是用来描述对象自身及对象间信息传递顺序的视图.它用来表示用例中的行为顺序.当执行一个用例行为时,顺序图中的每条消息对应了一个类操作或状态机中引起转换的触发事件.它着重显示了参与相互作用的对象和所 ...

  4. react native中使用ScrollableTabView

    第一步,下载依赖 npm install react-native-scrollable-tab-view --save 第二步,引入 import ScrollableTabView, { Scro ...

  5. strlen实现

    1.strlen函数. 普通版实现方法, int strlen( char *s) { int length = 0; while(*s++) length++; return length; } 优 ...

  6. spring boot 知识点

    spring boot 好处 1. 简化配置,spring boot 提供了默认配置 例如 日志 默认logback日志  info级别 2. 简化部署,内嵌容器,tomcat,jetty,直接部署j ...

  7. 编写python的程序

    执行python程序有两种方式:      1.交互式环境:输入代码立即执行              优点:调试程序方便              缺点:无法永久保存程序      2.代码写入文件 ...

  8. hdu 5126 cdq+Treap+BIT

    这题说的是给了三维空间然后操作 寻求在 x1,y1,z1    x2, y2, z2; (x1<x2, y1<y2,z1<z2) 计算出在 以这两个端点为右下和左上端点的方体内的点的 ...

  9. codeforces 979B Treasure Hunt

    题意: 给出三个字符串,每个字符串长度相同,给出n,要求在n轮内,每一个字符串必须改变一个字符. 问最后哪个字符串中拥有最多相同的字符,即美丽度最大. 思路: 首先,很不容易想到的一点是从a变到a,有 ...

  10. 20155228 2016-2017-2 《Java程序设计》第4周学习总结

    20155228 2016-2017-2 <Java程序设计>第4周学习总结 教材学习内容总结 继承与多态 继承:在Java中,子类只能继承一个父类,关键字为extends,子类和父类之间 ...