python3 haproxy配置文件操作练习
哈哈 老规矩 先来一个NLP第六条:咳咳!
六,重复旧的做法,只会得到旧的结果
做法有不同,结果才会有不同。
如果,你的事没有结果,改变你的做法。任何新的做法,都比旧的多一份成功的机会。
想明天比昨天更好,必须用与昨天不同的做法。
改变自己,别人才有可能改变。
世界上本来便是每样事物都在不停地改变中,不肯改变的便面临淘汰或失败的威胁。
因此只有不断地改变做法,才能保持与其他事物关系有理想状态。
“做法”是规条,目的是取得价值,实现信念。维持最有效果地规条,就是灵活地不断修正做法,才能保证取得价值,实现信念。
改变是所有进步的起点。
然后是今天的学习内容。。。也没干啥,最近有点飘还是沉不下心来,把以前的一个文件操作的作业给做了haproxy是啥,不知道。。。 然后还有个ATM机的作业,动不了手,得慢慢琢磨。草稿如下:
这是配置文件:
global
log 127.0.0.1 local2
daemon
maxconn 256
log 127.0.0.1 local2 info
defaults
log global
mode http
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
option dontlognull listen stats :8888
stats enable
stats uri /admin
stats auth admin:1234 frontend oldboy.org
bind 0.0.0.0:80
option httplog
option httpclose
option forwardfor
log global
acl www hdr_reg(host) -i www.oldboy.org
use_backend www.oldboy.org if www backend www.oldboy.org
server 100.1.7.9 100.1.7.9 weight 20 maxconn 3000 backend www.baidu.com
server 100.1.7.8 100.1.7.8 weight 20 maxconn 3000 backend www.4399.com
server 100.1.7.8 100.1.7.8 weight 20 maxconn 3000 backend www.7k7k.com
server 100.1.7.8 100.1.7.8 weight 29 maxconn 3080
这是草稿代码:
#!usr/bin/env/ python
# -*- coding:utf-8 -*-
# Author: XiaoFeng def print_list():
for index, i in enumerate(list1):
print(index, i) def search(): # 查
website = input("请输入您要查询的内容: (就输这个:www.oldboy.org)")
find_str = "backend {}".format(website) # format() 与{}配合使用
with open("config_test", "r", encoding="utf-8") as f:
for line in f:
if find_str == line.strip(): # strip()用来去除左右两端的字符,空格换行啥的
line = next(f)
while line.strip().startswith("server"): # startswith() 判断以啥开头
try:
print(line)
line = next(f)
except StopIteration:
break
break
else:
print("没得你要滴东西") def add(): # eval() 用来把字符转换成字典
arg = eval(input("请输入您要写入的内容:"
"例如:{'backend': 'www.4399.com',"
"'record': {'server': '100.1.7.8',"
"'weight': 20,"
"'maxconn': 3000}}").strip())
backend = "backend {}".format(arg["backend"])
record = arg["record"]
record_context = "server {0} {0} weight {1} maxconn {2}"\
.format(record["server"], record["weight"], record["maxconn"])
add_flag = True
with open("config_test", "r+", encoding="utf-8") as f:
for line in f:
if line.strip() == backend:
print("此网址已存在!")
add_flag = False
if add_flag: # 经过循环 文件指针已经在最下方了
f.write("\n{}".format(backend))
f.write("\n\t\t{}".format(record_context)) def update():
arg = eval(input("请输入您要写入的内容:"
"例如:{'backend': 'www.7k7k.com',"
"'record': {'server': '100.1.7.8',"
"'weight': 20,"
"'maxconn': 3000}}").strip())
backend = "backend {}".format(arg["backend"])
record = arg["record"]
record_context = "server {0} {0} weight {1} maxconn {2}" \
.format(record["server"], record["weight"], record["maxconn"]) update_flag = False
reupdate_flag = False
with open("config_test", "r", encoding="utf-8") as f, \
open("config_test_bak", "w", encoding="utf-8") as f1:
for line in f:
if line.strip() == backend:
update_flag = True
continue
if line.strip().startswith("backend") and backend != line.strip():
update_flag = False
if not update_flag:
f1.write(line)
if update_flag and not reupdate_flag:
f1.write(backend)
f1.write("\n\t\t{}".format(record_context))
reupdate_flag = True
with open("config_test", "w", encoding="utf-8") as f, \
open("config_test_bak", "r", encoding="utf-8") as f1:
for line in f1:
f.write(line) def delete(): # 删
arg = input("请输入您要删除的内容:"
"例如:www.4399.com").strip()
delet_flage = False
with open("config_test", "r", encoding="utf-8") as f,\
open("config_test_bak", "w", encoding="utf-8") as f1:
for line in f:
if "backend {}".format(arg) == line.strip():
print(line)
delet_flage = True
continue
if line.strip().startswith("backend") and "backend {}".format(arg) != line.strip():
delet_flage = False
if not delet_flage:
f1.write(line)
with open("config_test", "w", encoding="utf-8") as f, \
open("config_test_bak", "r", encoding="utf-8") as f1:
for line in f1:
f.write(line) def ifcontinue():
key = input("\033[41;1m还试不试??? 【y/n】\033[0m")
if key == "y":
pass
else:
exit() list1 = ["search", "add", "update", "delete", "quit"]
while True:
print("欢迎使用本草稿 哈哈哈".center(50, "-")) # center() 用来把字符串放中间
print_list()
choice = input("请输入操作选择:")
if choice == "":
search()
ifcontinue()
if choice == "":
add()
ifcontinue()
if choice == "":
update()
ifcontinue()
if choice == "":
delete()
ifcontinue()
if choice == "":
break
勉强实现功能,事实是很抠脚。。。 慢慢来吧唉
最后解决一个第一天留下来的问题,什么是环境变量,百度上说是指在操作系统中用来指定操作系统运行环境的一些参数,如:临时文件夹位置和系统文件夹位置等。当要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统除了在当前目录下面寻找此程序外,还应到path中指定的路径去找。
比如path,是告诉系统,当要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统除了在当前目录下面寻找此程序外,还应到哪些目录下去寻找;
额 还是不是很理解。。。
python3 haproxy配置文件操作练习的更多相关文章
- python之haproxy配置文件操作(第三天)
作业: 对haproxy配置文件进行操作 要求: 对haproxy配置文件中backend下的server实现增删改查的功能 一.这个程序有二个版本 1. python2.7版本见haproxy_py ...
- python作业:HAproxy配置文件操作(第三周)
一.作业需求: 1. 根据用户输入输出对应的backend下的server信息 2. 可添加backend 和sever信息 3. 可修改backend 和sever信息 4. 可删除backend ...
- HAproxy配置文件操作
要求 1. 根据用户输入输出对应的backend下的server信息2. 可添加backend 和sever信息3. 可修改backend 和sever信息4. 可删除backend 和sever信息 ...
- 第三周作业HAproxy文件操作
#coding:utf-8 #Author:Mr Zhi """ HAproxy配置文件操作: 1. 根据用户输入输出对应的backend下的server信息 2. 可添 ...
- Python3.5 day3作业二:修改haproxy配置文件。
需求: 1.使python具体增删查的功能. haproxy的配置文件. global log 127.0.0.1 local2 daemon maxconn 256 log 127.0.0.1 lo ...
- haproxy配置文件简单管理
版本:python3功能:对haproxy配置文件进行简单的查询.添加以及删除功能操作流程:1.根据提示选择相应的选项2.进入所选项后,根据提示写入相应的参数3.查询功能会返回查询结果,添加.删除以及 ...
- s12-day03-work01 python修改haproxy配置文件(初级版本)
#!/usr/local/env python3 ''' Author:@南非波波 Blog:http://www.cnblogs.com/songqingbo/ E-mail:qingbo.song ...
- haproxy 配置文件详解 之 综述
HAProxy 配置文件根据功能和用途,主要有5 个部分组成,但有些部分并不是必须的,可以根据需要选择相应的部分进行配置. 1.global 部分 用来设定全局配置参数,属于进程级的配置,通常和操作系 ...
- 配置文件操作(ini、cfg、xml、config等格式)
配置文件的格式主要有ini.xml.config等,现在对这些格式的配置文件的操作(C#)进行简单说明. INI配置文件操作 调用系统函数GetPrivateProfileString()和Write ...
随机推荐
- idea解决Maven jar依赖冲突(四)
首先点击右侧的MavenProjects打开以下界面: 这个界面是maven的命令界面: 点击这个图标会进入如下界面: 左上角可以缩放,点击线可以取消冲突依赖,红色线为冲突依赖. 上图为无依赖冲突的s ...
- Python之路【第八篇】:Python模块
阅读目录 一.模块和包 模块(module)的概念: 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分别放到 ...
- Scala设计模式
尽管Scala还有一些基于语言特性的设计模式,单本文还是着重于介绍大家所周知的经典设计模式,因为这些设计模式被认为是开发者之间交流的工具. 创建型设计模式 1.工厂方法模式 2.延迟加载模式 3.单例 ...
- Linux下ps -ef和ps aux的区别
Linux下显示系统进程的命令ps,最常用的有ps -ef 和ps aux.这两个到底有什么区别呢?两者没太大差别,讨论这个问题,要追溯到Unix系统中的两种风格,System V风格和BSD 风格, ...
- Java集合框架详解(全)
一.Java集合框架概述 集合可以看作是一种容器,用来存储对象信息.所有集合类都位于java.util包下,但支持多线程的集合类位于java.util.concurrent包下. 数组与集合的区别如下 ...
- python中的编码与解码
编码与解码 首先,明确一点,计算机中存储的信息都是二进制的 编码/解码本质上是一种映射(对应关系),比如‘a’用ascii编码则是65,计算机中存储的就是00110101,但是显示的时候不能显 ...
- springboot项目容器化
创建一个简单的springboot项目,依赖中加入: 编写一个Restfull接口: 编写启动类: 启动项目,浏览器访问该接口,得到想要的结果.下面,就将这个项目进行Docker容器化(applica ...
- AppBoxFuture(五): 分布式文件存储-Store Everything
本来本篇是想介绍前端组件化开发用户界面,发现框架还未实现文件存储,原本计划是后续设计开发的,索性把计划提前,所以本篇将介绍基于Raft实现分布式的文件存储引擎. 一. 实现思路 既然是分布式存 ...
- 痞子衡嵌入式:串口调试工具Jays-PyCOM诞生记 - 索引
大家好,我是痞子衡,是正经搞技术的痞子.本系列痞子衡给大家介绍的是串口调试工具Jays-PyCOM诞生. 串口调试助手是嵌入式开发里非常常用的小工具,市面上有非常多流行的串口调试工具,比如TeraTe ...
- cocos creator主程入门教程(九)—— 瓦片地图
五邑隐侠,本名关健昌,10年游戏生涯,现隐居五邑.本系列文章以TypeScript为介绍语言. 这一篇介绍瓦片地图,在开发模拟经营类游戏.SLG类游戏.RPG游戏,都会使用到瓦片地图.瓦片地图地面是通 ...