PYTHON学习第一模块 Haproxy配置操作

购物车模拟

需求:

  • 根据用户输入输出对应的backend下的
  • server信息可添加backend 和
  • sever信息可删除backend 和sever信息
  • 添加server信息时,信息与已有信息重复则不操作

说明:

  • python版本为3.6
  • 增删查的结果均在haproxy.conf内可以验证

haproxy.conf配置文件内容:

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 weight 20 maxconn 3000
backend www.qq.com
        server 100.1.7.10 weight 20 maxconn 3000
backend www.cnblog.com
        server 100.1.7.14 weight 20 maxconn 3000

代码:

# /usr/bin/env python
# -*- coding: utf-8 -*-
# AUTHOR:Fio
import os
import json
arg = {
    ‘backend‘: ‘www.yahoo.com‘,
    ‘record‘: {
        ‘ip‘: ‘100.1.7.13‘,
        ‘weight‘: ‘20‘,
        ‘maxconn‘: ‘3000‘
    }
}

def select_info(url):
    flag = False
    with open(‘./haproxy.conf‘, ‘r‘) as conf:
        for line in conf:
            if line.strip().startswith("backend %s" % url):
                flag = True
                continue
            if flag:
                record_info = line.strip()
                flag = False
                print(record_info)

def insert_info(info):
    server_info = eval(info)
    url = server_info[‘backend‘]
    ip = server_info[‘record‘][‘ip‘]
    weight = server_info[‘record‘][‘weight‘]
    maxconn = server_info[‘record‘][‘maxconn‘]
    flag = False
    with open(‘./haproxy.conf‘, ‘r‘) as conf1:
        for line in conf1:
            if line.strip().startswith(‘backend %s‘ % url):
                print("配置已存在")
                flag = False
                break
            else:
                flag = True
                continue
    if flag:
        with open(‘./haproxy.conf‘, ‘a‘) as conf2:
            conf2.write(‘backend ‘ + url + ‘\n‘)
            conf2.write(‘        server %s weight %s maxconn %s\n‘ % (ip, weight, maxconn))
            print("配置%s插入成功" % url)

def delete_info(url):
    flag = False
    with open(‘./haproxy.conf‘, ‘r+‘) as conf1:
        with open(‘./haproxy_tmp.conf‘, ‘w‘) as conf2:
            for line1 in conf1:
                if line1.strip().startswith(‘backend %s‘ % url):
                    conf2.write("")
                    flag = True
                    continue
                elif flag and line1.strip().startswith(‘server‘):
                    conf2.write("")
                    flag = False
                    continue
                else:
                    conf2.write(line1)
                    continue
    os.remove(‘./haproxy.conf‘)
    os.rename(‘./haproxy_tmp.conf‘, ‘./haproxy.conf‘)
    print(‘backend %s内容已删除‘ % url)

if __name__ == "__main__":
    print(‘‘‘
    ###############################
    #   请选择操作方法:
    #   1.  查询
    #   2.  插入
    #   3.  删除
    ###############################
    ‘‘‘)
    order_num = input("选择的序号:")
    if order_num == ‘1‘:
        URL = input("请选择要查询的域名:")
        select_info(URL)
    elif order_num == ‘2‘:
        INFO = input(‘‘‘请输入完整的配置,
示例格式({    ‘backend‘: ‘www.yahoo.com‘,    ‘record‘: {        ‘ip‘: ‘100.1.7.13‘,        ‘weight‘: ‘20‘,        ‘maxconn‘: ‘3000‘    }})
:‘‘‘)
        insert_info(INFO)
    elif order_num == ‘3‘:
        URL = input("请输入要删除的域名配置:")
        delete_info(URL)
    else:
        print("请输入正确的序号!")

  

时间: 2024-08-09 21:59:43

PYTHON学习第一模块 Haproxy配置操作的相关文章

Python学习第一弹——Python环境搭建

一.Python简介: Python,是一种面向对象.解释型计算机程序设计语言,由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991年.Python语法简洁而清晰,具有丰富和强大的类库.它常被昵称为胶水语言,它能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一起.常见的一种应用情形是,使用Python快速生成程序的原型(有时甚至是程序的最终界面),然后对其中有特别要求的部分,用更合适的语言改写,比如3D游戏中的图形渲染模块,性能要求特别高,就可以用

Python学习--Selenium模块学习(2)

Selenium的基本操作 获取浏览器驱动寻找方式 1. 通过手动指定浏览器驱动路径2. 通过 `$PATH`环境变量找寻浏览器驱动 可参考Python学习--Selenium模块简单介绍(1) 控制浏览器访问URL browser.get(https://www.baidu.com/)   find系列函数定位元素 - `find_element_by_xxx` 返回第一个符合条件 `WebElement` - `find_elements_by_xxx` 返回符合条件所有元素包含了`WebE

python学习--创建模块

昨天做了python客户端和服务器端通信,并把接收到的信息写到数据库,因为对数据库进行操作是个经常调用的行为,所以我想把调用数据库的操作写成一个module来给其它python程序调用,所以将昨天的服务器端程序拆分为两个文件: 1.主程序python.py #!/usr/bin/env python import socket import json import connmysql s = socket.socket(socket.AF_INET,socket.SOCK_STREAM,0) h

python 学习第一天

python 学习了好久,发现还是个小白,python还是不会用,从今天起每天学写一点小程序,做个打不死的小强. 相关知识:列表,字典 #!/usr/bin/env python people = { 'yong':{'phone':'123', 'addr':'Shang hai' }, 'bu':{'phone':'456', 'addr':'Wu han' }, 'yan':{'phone':'789', 'addr':'He nan' } } lables = {'phone':'pho

Python学习--Selenium模块

1. Python学习--Selenium模块介绍(1) 2.Python学习--Selenium模块学习(2) 其他: 1. Python学习--打码平台 原文地址:https://www.cnblogs.com/ftl1012/p/seleniumAll.html

PYTHON学习第二模块 python内置模块介绍

1 >>> import time 2 >>> time.time() 3 1491064723.808669 4 >>> # time.time()返回当前时间的时间戳timestamp(定义为从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数)的方法,无参数 5 >>> time.asctime() 6 'Sun Apr 2 00:39:32 2017' 7 >>> # time.asctim

Python学习week7-OS模块与shutil模块

1.OS模块 # os模块主要功能:系统相关,目录及文件操作,执行命令和进程管理 1.1.系统相关 1.2.文件和目录操作 # os.getcwd() # 获取当前工作路径 # os.chdir('dirname') 其中dirname为路径: # 切换目录,相当于shell下的cd 命令 # os.makedirs('dir1/dir2') # 生成多层递归目录 # os.removedirs('dir1') # 递归删除空目录 # os.mkdir('dirname') # 生成单级目录 #

Python学习(22):模块

转自 http://www.cnblogs.com/BeginMan/p/3183656.html 一.模块基础 1.模块 自我包含,且有组织的代码片段就是模块 模块是Pyhon最高级别的程序组织单元,它将程序代码和数据封装起来以便重用.实际的角度,模块往往对应Python程序文件. 每个文件都是一个模块,并且模块导入其他模块之后就可以使用导入模块定义的变量名.模块可以由两个语句和一个重要的内置函数进行处理. import: 使客户端(导入者)以一个整体获取一个模块. from:容许客户端从一个

17.3.12---logging日志模块level配置操作

1----logging日志记录模块的使用和配置 logging模块我们不需要单独再安装,经常要调试程序,记录程序运行过程中的一些信息,手工记录调试信息很麻烦,所以python的logging模块,会把你想记录的日志信息保存到一个自己设定格式的文件中. 2---logging模块日志级别