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 ...
随机推荐
- python线程(二)代码部分
使用threading创建线程: from threading import Thread def work(name): print(f"我是线程{name}") if __na ...
- bat脚本以管理员身份运行时,目录没有定位到当前目录问题的解决方法
我们时常使用bat脚本去处理一些事情,有事bat中的命令需要以管理员的身份运行,但是运行后文件的目录自动定位到了C:\Windows\system32下,而不再脚本所在的目录下. 这是我的文件目录,W ...
- Abp通用配置模块的设计
引言 约定优于配置,配置趋于灵活 约定优于配置(convention over configuration),也称作按约定编程,是一种软件设计范式,旨在减少软件开发人员需做决定的数量,获得简单的好处, ...
- ansible基础-task控制
1. 前言 很多情况下,一个play是否执行会依赖于某个(些)变量的值,这个变量可以来自自定义变量.facts,甚至是另一个task的执行结果. ansible通过变量判定task是否执行,我们称之为 ...
- java中并发下的集合类
java中常见的集合类大部分是非线程安全的,在多线程情况下会报并发修改异常(ConcurrentModificationException) 并发下的ArrayList类: //集合类不安全的例子 p ...
- 【反编译系列】二、反编译代码(jeb)
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 一般情况下我们都是使用dex2jar + jd-gui的方式反编译代码,在实际使用过程中,有时候发现反编译出来的代码阅读效果不是很好 ...
- ACache【轻量级的开源缓存框架】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 官方介绍 ASimpleCache 是一个为android制定的 轻量级的 开源缓存框架.轻量到只有一个java文件(由十几个类精简 ...
- Kubernetes知识小普及
大部分概念Kubernetes官网都有详细介绍,Kubernetes中文官网 https://kubernetes.io/zh/docs/tutorials/kubernetes-basics/ 官网 ...
- Python:游戏:扫雷(附源码)
这次我们基于 pygame 来做一个扫雷,上次有园友问我代码的 python 版本,我说明一下,我所有的代码都是基于 python 3.6 的. 先看截图,仿照 XP 上的扫雷做的,感觉 XP 上的样 ...
- SQL优化 MySQL版 - 索引分类、创建方式、删除索引、查看索引、SQL性能问题
SQL优化 MySQL版 - 索引分类.创建方式.删除索引.查看索引.SQL性能问题 作者 Stanley 罗昊 [转载请注明出处和署名,谢谢!] 索引分类 单值索引 单的意思就是单列的值,比如说有 ...