第三周作业HAproxy文件操作

#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文件操作的更多相关文章
- 2017-2018-1 20179205《Linux内核原理与设计》第三周作业
<Linux内核原理与分析>第三周作业 教材学习总结 第三章 进程管理 进程是Unix操作系统抽象概念中最基本的一种,是正在执行的程序代码的实时结果:线程,是在进程中活动的对象.而Linu ...
- 第三周作业-课本&&视频学习
<网络攻防技术与实践>第三周作业 Part I 寻找自己留在互联网上的足迹并消除隐私 1.1 google/baidu搜索自己的qq号 搜索结果如图,搜到的有用信息其实就是图上这么几条,能 ...
- 第三周作业、实时操作系统µC/OS介绍及其它内容
作业要求 见<实时控制软件设计>第三周作业 1 阅读笔记--µC/OS 1.1 基本介绍 µC/OS是由Micrium公司研发的实时操作系统,以µC/OS-II或µC/OS-III为内核, ...
- 2017-2018-1 JAVA实验站 第三周作业
2017-2018-1 JAVA实验站 第三周作业 团队展示 队名 JAVA实验站 拟作的团队项目描述 (2048)增加其他模式,使得2048更加丰富多彩 团队的首次合照 团队的特色描述 团队内部很团 ...
- 2019-2020-1 20199329《Linux内核原理与分析》第三周作业
<Linux内核原理与分析>第三周作业 一.上周问题总结: 第二周头脑风暴完成较慢 虚拟机libc配置错误 书本知识使用不够熟练 二.本周学习内容: 1.实验楼环境虚拟一个x86的CPU硬 ...
- JAVA第三周作业(从键盘输入若干数求和)
JAVA第三周作业(从键盘输入若干数求和) 在新的一周,我学习了JAVA的IO编程.下面的代码实现了从键盘输入若干数求和的目标.import java.util.Scanner; public cla ...
- 2018-2019-1 20189221《Linux内核原理与分析》第三周作业
2018-2019-1 20189221<Linux内核原理与分析>第三周作业 实验二 完成一个简单的时间片轮转多道程序内核代码 实验过程 在实验楼中编译内核 编写mymain.c函数和m ...
- 2017-2018-2 1723《程序设计与数据结构》第三周作业 & 实验一 总结
作业地址 第三周作业:https://edu.cnblogs.com/campus/besti/CS-IMIS-1723/homework/1667 提交情况如图: 实验一:https://edu.c ...
- 第三周作业(一)VS安装及单元测试练习
第三周作业(一) 需求:练习教科书第22~25页单元测试练习,要求自行安装Visual Studio开发平台,版本至少在2010以上,要求把程序安装过程和练习过程写到博客上,越详细越好,要图文并茂,没 ...
随机推荐
- cocos2d-x 错误异常抛出捕获和崩溃拦截
Error对象 一旦代码解析或运行时发生错误,JavaScript引擎就会自动产生并抛出一个Error对象的实例,然后整个程序就中断在发生错误的地方. Error对象的实例有三个最基本的属性: nam ...
- pyqt常用窗口组件
扩展知识: 熟悉常用的窗口组件: 1 按钮类 QPushButton 普通按钮 QToolButton 工具按钮:通常在工具栏使用 QRadioButton 单选框 QCheckBox ...
- shell编程:if语句
条件判断式的两边的空格不能生
- ssh简单入门级案例教程
准备工作:struts2.3.34+spring4.2.2+hibernate3.3.2 导入需要的开发包: struts开发包---注意:javassist-3.18.1-GA.jar包与hiber ...
- C# 如何批量修改集合元素的属性值?
我们往往会遇到要批量修改集合中元素的值,最笨的办法就是foreach循环,但本文介绍几种优雅的方法. 首先,我们准备好元素类和初始集合: 下面就是几种方法,目前并没有对性能做进一步的测试,有兴趣的童鞋 ...
- java详解内部类
可以将一个类的定义放在另一个类的定义内部,这就是内部类. 内部类是一个非常有用的特性但又比较难理解使用的特性(鄙人到现在都没有怎么使用过内部类,对内部类也只是略知一二). 第一次见面 内部类我们从外面 ...
- Unity之fragment shader中如何获得视口空间中的坐标
2种方法: 1. 使用 VPOS 或 WPOS语义,如: Shader "Test/ScreenPos1" { SubShader { Pass { CGPROGRAM #prag ...
- sitecore系统教程之使用修补程序文件自定义Sitecore配置
您可以使用修补程序文件在Sitecore中添加或更改配置设置.Sitecore将修补程序文件与Sitecore.config 文件合并,以创建在运行时使用的配置文件. 本主题描述: 补丁文件放置 补丁 ...
- 即时通信系统中实现全局系统通知,并与Web后台集成【附C#开源即时通讯系统(支持广域网)——QQ高仿版IM最新源码】
像QQ这样的即时通信软件,时不时就会从桌面的右下角弹出一个小窗口,或是显示一个广告.或是一个新闻.或是一个公告等.在这里,我们将其统称为“全局系统通知”.很多使用C#开源即时通讯系统——GGTalk的 ...
- 【2017-03-13】Tsql 数学函数、字符串函数、转换函数、时间日期函数
一.数学函数(针对值类型操作) 1.ceiling():取上限 只要小数点后有数字大于0,整数位自动进1 2.floor():取下限 将小数点位舍去,不管小数点位大小 3.round(四舍五入的值,保 ...