Part1 - 修改haproxy配置文件

README:

  查看、添加、修改、删除分别是用不同函数实现,

  运行程序时,有选择列表,并且每项功能都有example提示

流程图:

代码:

#!/usr/bin/env python
# coding:utf8

import sys
import os
import shutil
import time
import re
import json

if os.path.exists(‘tab.py‘):
    import tab

class handleHaproxyConf(object):
    "search, add, update and delete functions."
    def __init__(self, lines):
        self.lines = lines

    def check(self, b):
        lines = self.lines.copy()
        for i in lines:
            if re.match(r‘^backend %s$‘ % b, i):
                return True
        return False

    def check_dict(self, d):
        backend = d.get(‘backend‘)
        record = d.get(‘record‘)
        if backend and record:
            if record.get(‘server‘) and record.get(‘weight‘) and record.get(‘maxconn‘):
                return True
            else:
                return False
        else:
            return False

    def search(self, b):
        sList = []
        lines = self.lines.copy()
        for i in lines:
            if re.match(r‘^backend %s$‘ % b, i):
                for k in lines[(lines.index(i)+1):]:
                    if not re.search(r‘^\s+server‘, k):
                        break
                    sList.append(k)
        return sList

    def add(self, n):
        if not self.check_dict(n):
            return False
        if self.check(n.get(‘backend‘)):
            return self.update(n)
        else:
            a = []
            lines = self.lines.copy()
            lines.append(‘backend ‘ + n.get(‘backend‘) + ‘\n‘)
            for i in n.get(‘record‘).items():
                for k in i:
                    a.append(str(k))
            a.insert(1, a[1])
            lines.append(‘\t‘ + ‘ ‘.join(a) + ‘\n‘)
            return lines

    def update(self, n):
        if not self.check_dict(n):
            return False
        lines = self.lines.copy()
        for i in self.lines.copy():
            if re.match(r‘^backend %s$‘ % n.get(‘backend‘), i):
                for k in lines[(lines.index(i)+1):]:
                    if re.search(r‘^\s+server‘, k):
                        klist = k.strip(‘ |\t|\n‘).split(‘ ‘)
                        if klist[1] == n.get(‘record‘).get(‘server‘):
                            print(‘already exists.‘)
                            return False
                        klist[1:3] = [str(n.get(‘record‘).get(‘server‘))] * 2
                        klist[4] = str(n.get(‘record‘).get(‘weight‘))
                        klist[6] = str(n.get(‘record‘).get(‘maxconn‘))
                        lines[lines.index(k)] = ‘\t‘ + ‘ ‘.join(klist) + ‘\n‘
                        return lines
        return False

    def delete(self, n):
        d = []
        lines = oldlines = self.lines.copy()
        if self.check(n):
            for i in oldlines:
                if re.match(r‘^backend %s$‘ % n, i):
                    s = oldlines.index(i)
                    lines.pop(s)
                    for k in oldlines[s:]:
                        if re.search(r‘^\s+server‘, k):
                            lines.pop(s)
                        else:
                            break
            return lines
        else:
            return False

def main():

    def writeConf(lines, hfile):
        shutil.copy2(hfile, ‘%s.%s‘ % (hfile, time.strftime("%Y%m%d_%H%M", time.localtime())))
        with open(hfile, ‘w‘) as f:
            f.write(‘‘.join(lines))
        print("success.")

    example1 = ‘www.centos.org‘
    example2 = {‘backend‘: ‘www.centos.org‘, ‘record‘: {‘server‘: ‘100.1.1.1‘, ‘weight‘: 20, ‘maxconn‘: 3000}}
    display = "1) Search\n2) Add\n3) Update\n4) Delete\nq) Exit"
    print("--Handle haproxy.conf--\n%s" % display)

    while True:
        try:
            haproxyConf = ‘haproxy.conf‘
            with open(haproxyConf, ‘r‘) as f:
                lines = f.readlines()

            hhc = handleHaproxyConf(lines)

            choice = input(">> ").strip()
            if choice == ‘1‘: # search
                print("example: %s\n" % example1)
                s = input("Search backend: ").strip()
                s_result = hhc.search(s)
                if s_result:
                    for i in s_result:
                        print(i.strip(‘\n‘))
                else:
                    print("not found...")
            elif choice == ‘2‘: # add
                print("example: %s\n" % example2)
                a = eval(input("Add backend (dict): "))
                a_result = hhc.add(a)
                #print(‘‘.join(a_result))
                if a_result:
                    writeConf(a_result, haproxyConf)
                else:
                    print("format error..")
                    continue
            elif choice == ‘3‘: # update
                print("example: %s\n" % example2)
                u = eval(input("Update backend (dict): "))
                u_result = hhc.update(u)
                if u_result:
                    writeConf(u_result, haproxyConf)
                else:
                    print("not found...")
            elif choice == ‘4‘: # delete
                print("example: %s\n" % example1)
                d = input("Delete backend: ")
                d_result = hhc.delete(d)
                if d_result:
                    writeConf(d_result, haproxyConf)
                else:
                    print("not found...")
            elif choice == ‘q‘: # exit
                print("exit...")
                break
            continue
        except:
            print("error...\n")
            print(display)
            continue

if __name__ == ‘__main__‘:
    main()

时间: 2024-10-06 13:50:40

Part1 - 修改haproxy配置文件的相关文章

Python小程序—修改haproxy配置文件

程序2:修改haproxy配置文件  需求: 1 1.查 2 输入:www.oldboy.org 3 获取当前backend下的所有记录 4 5 2.新建 6 输入: 7 arg = { 8 'bakend': 'www.oldboy.org', 9 'record':{ 10 'server': '100.1.7.9', 11 'weight': 20, 12 'maxconn': 30 13 } 14 } 15 16 3.删除 17 输入: 18 arg = { 19 'bakend': '

修改haproxy配置文件

HAproxy配置文件操作: 1. 根据用户输入输出对应的backend下的server信息 2. 可添加backend 和sever信息,如果存在则不添加,不修改 4. 可删除backend 和sever信息 5. 首先选择要进入哪种模式(查询,增加,删除),按q退出整个操作,在某种模式内时按b退出重新选择,不退出则 一直处于某种模式内 #Auther:He Jianhan #查def hanshu(names,fliens): print(fliens[names].rstrip()) if

Python3.5 day3作业二:修改haproxy配置文件。

需求: 1.使python具体增删查的功能. haproxy的配置文件. 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 sta

用python修改haproxy配置文件

需求: 当用户输入域名的时候,显示出来下面的记录 当用户需要输入添加纪录的时候,添加到你需要的那个域名下面 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 liste

Python-Day5修改haproxy配置文件

需求: 1.查 输入:www.oldboy.org 获取当前backend下的所有记录 2.新建 输入: {'backend': 'www.oldboy','record': {'server': '100.1.7.9','weight': 20,'maxconn': 30}} arg = { 'backend': 'www.oldboy.org', 'record':{ 'server': '100.1.7.9', 'weight': 20, 'maxconn': 30 } } 3.删除 输入

Registrator+Consul+Consul-template+HaProxy实现动态修改Haproty配置文件

实现需求: 用Haproxy做负载均衡,手动方式在配置文件中添加或删除节点服务器信息,比较麻烦. 通过Registrator收集需要注册到Consul作为Haproxy节点服务器的信息,然后注册到Consul key/value. Consul-template去Consul key/value中读取信息,然后自动修改Haproxy配置文件,并重载Haproxy.不需要修改haproxy.cfg. 集群环境: Postil:Mesos集群搭建过程此处省略 关闭selinux和防火墙 setenf

初学 python 之 HAproxy配置文件操作

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

作业:老板现在给你任务,公司有haproxy配置文件,希望通过python程序可以对ha配置文件进行增删改

1 # 老板现在给你任务,公司有haproxy配置文件,希望通过python程序可以对ha配置文件进行增删改 2 #分析:对文件进行增删改,首先需要找到需要修改文件的位置,即必须先把文件读取出来,找到对应 3 #位置,进行内容的修改,增加和删除: 4 import json,os #json模块用于将用户输入的字符串转换为字典 5 6 #首先定义fetch函数,同时传入指定参数backend,用来将修改的地方找出来 7 def fetch(backend): 8 flag=False #定义fl

haproxy配置文件解释

haproxy配置文件各项解释 ####################全局配置信息######################## #######参数是进程级的,通常和操作系统(OS)相关######### global log 127.0.0.1 local0 info      #日志格式 chroot /var/haproxy              #chroot运行的路径 group haproxy                   #所属运行的用户 user haproxy