专栏首页http://www.cnblogs.com第三周作业HAproxy文件操作

第三周作业HAproxy文件操作

 1 #coding:utf-8
 2 #Author:Mr Zhi
 3 """
 4 HAproxy配置文件操作:
 5 
 6 1. 根据用户输入输出对应的backend下的server信息
 7 
 8 2. 可添加backend 和sever信息
 9 
10 3. 可修改backend 和sever信息
11 
12 4. 可删除backend 和sever信息
13 
14 5. 操作配置文件前进行备份
15 
16 6 添加server信息时,如果ip已经存在则修改;如果backend不存在则创建;若信息与已有信息重复则不操作
17 
18 配置文件 参考 http://www.cnblogs.com/alex3714/articles/5717620.html
19 """
20 import shutil
21 def Menu(): #定于关于菜单函数
22     menu = (
23         """\033[35;1m
24         1.增加
25         2.删除
26         3.修改
27         4.查询
28         \033[0m""")
29     print(menu.strip('\n'))
30 
31 def Backup_proxy(): #定于关于备份文件的函数
32     shutil.copyfile("HAproxy.conf","HAproxy.conf.bak")
33 
34 def Add_haproxy():  #定义关于增加加数据的函数
35     domain = input('输入你要添加的域名:')
36     domain_ip = input("输入你要添加的ip:")
37     domain_weight = input("输入weight值:")
38     domain_maxconn = input("输入maxconn值:")
39     Backup_proxy()  # 写入数据前执行备份文件的函数
40     with open("HAproxy.conf","a+",encoding="utf-8") as f: #打开文件追加模式
41         f_w = "backend %s\n\t\t server %s %s weight %s maxconn %s" % (domain,domain_ip,domain_ip,domain_weight,domain_maxconn)
42         f.write('\n' + f_w), f.flush() ##把数据写入文件
43         print("\033[36;1m添加成功!\033[0m")
44 
45 def Alter_haproxy(): #定义关于修改数据的函数
46     domain_old1 = input("输入你要修改的域名:")
47     print(type(domain_old1))
48     domain_new1 = input("输入新域名:")
49     ip_new1 = input("输入修改后的ip:")
50     weight_new1 = input("输入修改后的weight值:")
51     maxconn_new1 = input("输入修改后的maxconn值:")
52     with open("HAproxy.conf", "r", encoding="utf-8") as f:
53         lines = f.readlines()
54         num = lines.index("backend %s\n" %domain_old1) #赋值域名对应的列表索引号
55         lines[num] = "backend %s\n" %domain_new1 #根据索引号修改对应的backend
56         lines[num + 1] = "\t\tserver %s %s weight %s maxconn %s\n" % (ip_new1,ip_new1,weight_new1,maxconn_new1) #根据索引号修改对应的server
57         Backup_proxy()  # 写入数据前执行备份文件的函数
58     with open("HAproxy.conf", "w", encoding="utf-8") as f_w:
59         for line in lines:
60             f_w.write(line) #把修改后的列表写入文件中
61         print("\033[32;1m修改成功!\033[0m")
62 
63 def Search_haproxy():  #定义关于查看数据的函数
64     domain= input("输入你要查看的域名:")
65     with open("HAproxy.conf", "r", encoding="utf-8") as f:
66         lines = f.readlines()
67         num = lines.index("backend %s\n" %domain) #赋值域名对应的列表索引号
68         lines[num] = "backend %s\n" %domain #根据索引号修改对应的backend
69         print(lines[num],lines[num + 1])
70 
71 def Delete_haproxy(): #定义关于删除数据的函数
72     domain = input("输入你要删除的域名节点:")
73     with open("HAproxy.conf", "r", encoding="utf-8") as f:
74         lines = f.readlines()
75         num = lines.index("backend %s\n" %domain) #赋值域名对应的列表索引号
76         lines.pop(num)
77         lines.pop(num) #这里不用num + 1,因为上面已经删除了一个索引号
78     Backup_proxy()  # 写入数据前执行备份文件的函数
79     with open("HAproxy.conf", "w", encoding="utf-8") as f_w: #打开文件
80         for line in lines:
81             f_w.write(line)
82         print("\033[37;1m删除成功!\033[0m")
83 
84 while True:
85     Menu()
86     number = int(input("input number:"))
87     if number == 1:
88         Add_haproxy()
89     elif number == 2:
90         Delete_haproxy()
91     elif number == 3:
92         Alter_haproxy()
93     elif number == 4:
94         Search_haproxy()
95     else:
96         print("\033[31;1mInput is woring\033[0m")
97         continue

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 模拟计算器

    #coding:utf-8 #Author:Mr Zhi """ 模拟计算器开发: 实现加减乘除及拓号优先级解析 用户输入 1 - 2 * ( (60-30 +...

    用户1679793
  • BASH输出着色显示

    通过将其输出着色,可以使BASH脚本更漂亮。使用ANSI转义序列设置文本属性,例如前景色和背景色。

    用户1679793
  • python传参是传值还是传引用

    在此之前先来看看变量和对象的关系:Python 中一切皆为对象,数字是对象,列表是对象,函数也是对象,任何东西都是对象。而变量是对象的一个引用(又称为名字或者标...

    用户1679793
  • 前端基础-正则表达式(环视)

    (?!B)[A-Z]这种写法,其实它是[A-Z]范围里,排除B的意思,前置的(?!B)只是对后面数据的一个限定,从而达到过滤匹配的效果。

    cwl_java
  • vc2017编译清净的函数体,不让编译器在函数头尾乱加东西

    另外,为了兼容GCC,可以设置:属性-常规-字符集:未设置(默认:unicode)

    战神伽罗
  • python--类属性的调用方法

    我们现在要在do_class.py这个文件里调用class_learn.py里的类

    py3study
  • C++反汇编第二讲,不同作用域下的构造和析构的识别

                   C++反汇编第二讲,不同作用域下的构造和析构的识别 目录大纲:   1.全局(静态)对象的识别,(全局静态全局一样的,都是编译期间...

    IBinary
  • 独家 | 一文为你解析神经网络(附实例、公式)

    原文标题:Introduction To Neural Networks 作者:Ben Gorman 翻译:申利彬 校对:和中华 本文长度为4000字,建议阅读...

    数据派THU
  • 错误cron导致linux宕机 原

    MAILTO是针对用户配置的,于是将该参数加入/var/spool/cron/internal下;

    阿dai学长
  • ElasticSearch Rest/RPC 接口解析

    早先ES的HTTP协议支持还是依赖Jetty的,现在不管是Rest还是RPC都是直接基于Netty了。

    用户2936994

扫码关注云+社区

领取腾讯云代金券