1. 开发要求

实现对 haproxy.cfg 增删改查操作

2. 程序介绍

# 作者:hkey

# 博客地址:https://www.cnblogs.com/hukey/p/9288279.html

# 功能实现:对 haproxy.cfg 增删改查

# 目录结构:
haproxy/
├── haproxy.cfg # haproxy 主配置文件
└── ops.py # 操作程序 # 使用说明: 1. 查询
2. 新增
3. 修改
4. 删除
5. 退出

README

3. 程序逻辑图

4. 程序代码

global
log 127.0.0.1 local2 chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn
user haproxy
group haproxy
daemon # turn on stats unix socket
stats socket /var/lib/haproxy/stats defaults
mode http
log global
option httplog
option dontlognull
#option http-server-close
#option forwardfor except 127.0.0.0/
option redispatch
retries
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
maxconn backend www.super.com
server 10.0.10.1 weight maxconn
server 10.0.10.2 weight maxconn backend www.super1.com
server 10.0.10.1 weight maxconn
server 10.0.10.2 weight maxconn
server 10.0.10.3 weight maxconn backend www.super2.com
server 10.0.10.2 weight maxconn
server 10.0.10.20 weight maxconn
server 10.0.10.3 weight maxconn
backend www.super20.com
server 10.0.0.10 10.0.10.10 weight maxconn

haproxy.cfg

# -*- coding: utf-8 -*-
# Author: hkey
import os def file_handle(backend_data, src=None, type='fetch'):
'''解耦函数'''
if type == 'fetch':
with open('haproxy.cfg', 'r') as read_f:
ret = []
Flag = False
for read_line in read_f:
if backend_data == read_line.strip():
Flag = True
continue
if Flag == True and read_line.startswith('backend'):
break
if Flag:
print('\33[42;1m%s\33[0m' % read_line, end='')
ret.append(read_line)
return ret elif type == 'change':
with open('haproxy.cfg', 'r') as read_f, open('haproxy.conf', 'w') as write_f:
flag = False
has_write = False
for read_line in read_f:
if read_line.strip() == backend_data:
flag = True
continue
if flag and read_line.startswith('backend'):
flag = False
if not flag:
write_f.write(read_line)
else:
if not has_write:
for record in src:
write_f.write(record)
has_write = True
os.rename('haproxy.cfg', 'haproxy.cfg_bak')
os.rename('haproxy.conf', 'haproxy.cfg')
os.remove('haproxy.cfg_bak') def fetch(find_str):
'''查询功能'''
backend_str = 'backend %s' % find_str
return file_handle(backend_str) def add(backend):
'''新增功能'''
print('这是新增功能.')
backend_list = fetch(backend)
if not backend_list:
return '\33[41;1mbackend不存在。\33[0m'
new_server = input('输入新增server:')
backend_data = 'backend %s' % backend
backend_list.insert(0, '%s\n%s\n' % (backend_data, new_server))
return file_handle(backend_data, src=backend_list, type='change') def change(modify_data):
'''修改功能'''
print('这是修改功能.')
modify_data = eval(modify_data)
backend = modify_data[0]['backend']
backend_data = 'backend %s' % backend
backend_list = fetch(backend)
old_server = '%sserver %s weight %s maxconn %s\n' %(' ' *4, modify_data[0]['record']['server'],
modify_data[0]['record']['weight'], modify_data[0]['record']['maxconn'])
new_server = '%sserver %s weight %s maxconn %s\n' %(' ' *4, modify_data[1]['record']['server'],
modify_data[1]['record']['weight'], modify_data[1]['record']['maxconn']) if not backend_list and old_server not in backend_list:
return '修改的记录不存在。'
else:
index = backend_list.index(old_server)
backend_list[index] = new_server
backend_list.insert(0, '%s\n' % backend_data)
return file_handle(backend_data, src=backend_list, type='change') def delete(backend):
'''删除功能'''
print('这是删除功能.')
backend_list = fetch(backend)
if not backend_list:
return '\33[41;1mbackend 【%s】不存在。\33[0m' % backend
del_server = input('输入要删除的server:') + '\n'
if del_server not in backend_list:
return '\33[41;1m输入的server不存在。\33[0m'
else:
backend_data = 'backend %s' % backend
backend_list.insert(0, '%s\n' %backend_data)
backend_list.remove(del_server)
return file_handle(backend_data, src=backend_list, type='change') if __name__ == '__main__':
msg = '''
1. 查询
2. 新增
3. 修改
4. 删除
5. 退出
''' msg_dict = {
'': fetch,
'': add,
'': change,
'': delete,
} while True:
print(msg)
choice = input('>>>').strip()
if not choice: continue
if choice == '': break
find_str = input('请输入你的数据:').strip()
res = msg_dict[choice](find_str)
print(res)

ops.py

5. 程序运行展示

(1)查询

(2)新增

server 1.1.1.1 weight 1 maxconn 1(前面4个空格)

(3)修改

[{'backend': 'www.super2.com', 'record':{'server': '10.0.10.20', 'weight': 30, 'maxconn': 40}}, {'backend': 'www.super2.com', 'record':{'server': '10.0.10.200', 'weight': 100, 'maxconn': 100}}]

(4)删除

server 1.1.1.1 weight 1 maxconn 1(开头4个空格)

(5)退出

[ python ] 项目:haproxy配置文件增删改查的更多相关文章

  1. python操作mysql数据库增删改查的dbutils实例

    python操作mysql数据库增删改查的dbutils实例 # 数据库配置文件 # cat gconf.py #encoding=utf-8 import json # json里面的字典不能用单引 ...

  2. django之创建第8-1个项目-数据库之增删改查/数据库数据显示在html页面

    1.为test.DB数据库预先创建下面数据 1    张三    16    2015-01-02    12    李四    17    2015-01-04    13    王五    14  ...

  3. winform 配置文件增删改查

    winform 配置文件是  App.config webform   的配置文件 是web.config 其实基本操作都一样    设置个配置文件  全局文件 访问者个配置文件  对这个配置文件增删 ...

  4. Asp.net WebApi 项目示例(增删改查)

    1.WebApi是什么 ASP.NET Web API 是一种框架,用于轻松构建可以由多种客户端(包括浏览器和移动设备)访问的 HTTP 服务.ASP.NET Web API 是一种用于在 .NET ...

  5. python学习(list增删改查、及常用方法)

    1.Python多条件判断: 多条件判断if: passelse: pass循环 while for i = 0 while i > 1: print('hello') else: print( ...

  6. Python之注册表增删改查(干货)

    在Windows平台下,对注册表的增删改查的需求比较多,微软提供了很多用于访问,修改注册表等的API,我们可以使用诸如bat,或者C++等各种方式去访问修改注册表.无所不能的python下如何完成这些 ...

  7. Python实现mysql数据库增删改查

    利用python操作mysql数据库用法简单,环境配置容易,本文将实现对库增.删.改.查的简易封装!   1. 环境配置 安装第三方包  ,导入模块 mysql.connector  pip inst ...

  8. DAY4(python)打印字符串以及增删改查

    用while循环打印字符串 #if i in s: # print ( i ) s='nanfjkhndaol' index = 0 while 1 : print (s[index]) index+ ...

  9. 2018.8.1 python中字典的增删改查及其它操作

    一.字典的简单介绍 1.dict 用{}来表示       键值对数据           {key:value} 唯一性 2.键都必须是可哈希,不可变的数据类型就可以当做字典中的键 值没有任何限制 ...

随机推荐

  1. [ZJOI2011]最小割 & [CQOI2016]不同的最小割 分治求最小割

    题面: [ZJOI2011]最小割 [CQOI2016]不同的最小割 题解: 其实这两道是同一道题.... 最小割是用的dinic,不同的最小割是用的isap 其实都是分治求最小割 简单讲讲思路吧 就 ...

  2. BZOJ5322:[JXOI2018]排序问题——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=5322 https://loj.ac/problem/2543 <-可以看数据,要没有这数据我 ...

  3. C++中static用法

    本文为个人学习笔记,参考<C++ Primer(中文第五版)>和<王道程序员求职宝典> 本文分为两个部分:不考虑类.类中static的作用 一.不考虑类,static的作用 1 ...

  4. 2017-7-19-每日博客-关于Linux下的CentOS中文件夹基本操作命令.doc

    CentOS中文件夹基本操作命令 文件(夹)查看类命令 ls--显示指定目录下内容 说明:ls 显示结果以不同的颜色来区分文件类别.蓝色代表目录,灰色代表普通文件,绿色代表可执行文件,红色代表压缩文件 ...

  5. 什么是static?什么是final?

    由static修饰的变量.常量.和方法被称为是静态变量.常量和 方法. 静态数据和静态方法的作用通常是为了提供共享数据或方法,如数学计算公式等,以static声明并且实现,这样当需要使用时,直接使用类 ...

  6. CentOS 6.5 下安装配置 mysql

    如果要在Linux上做j2ee开发,首先得搭建好j2ee的开发环境,包括了jdk.tomcat.eclipse的安装(这个在之前的一篇随笔中已经有详细讲解了Linux学习之CentOS(七)--Cen ...

  7. bzoj 1106 [POI2007]立方体大作战tet 树状数组优化

    [POI2007]立方体大作战tet Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 821  Solved: 601[Submit][Status][ ...

  8. FreeRTOS ------ 栈、堆、任务栈

    1.任务的栈资源(创建任务分配的资源,单位是4字节)来自 configTOTAL_HEAP_SIZE 定义的堆,如果任务栈总量超过 configTOTAL_HEAP_SIZE,任务创建失败: 2.如果 ...

  9. Web前端工程师-优秀简历汇总

    Web前端工程师-优秀简历汇总   1. http://www.linqing07.com/resume.html   2.  http://www.flqin.com/#page2   3.  ht ...

  10. jq 数组定义,拼接~~~push应用

    var radio_checked_array = []; $("input[type='radio']").each(function(){ if($(this).attr('c ...