• s13 day3作业


    ha_proxy配置文件修改程序
    ha_file 为存储配置信息的文件。运行的时候对该文件进行操作。
    1.查询信息:用户输入域名,获得域名相关信息
    2.修改配置文件:用户输入的格式应该为 {"backend": "test.oldboy.org","record":{"server": "100.1.7.9","weight": 20,"maxconn": 30}}
    然后执行判断,如果输入的backend存在,则判断对应的信息是否重复,如果重复,则提醒用户,同时对配置文件不做更改。
    如果输入的信息与原配置信息不符,则追加到相应的backend下。
    如果输入的backend不存在,则追加到文件末尾。
    3.删除信息:用户输入存在的域名,则删除域名和相应的配置文件。如果不存在,则提示错误。

    下面是ha_file文件信息

     1 global
     2         log 127.0.0.1 local2
     3         daemon
     4         maxconn 256
     5         log 127.0.0.1 local2 info
     6 defaults
     7         log global
     8         mode http
     9         timeout connect 5000ms
    10         timeout client 50000ms
    11         timeout server 50000ms
    12         option  dontlognull
    13 
    14 listen stats :8888
    15         stats enable
    16         stats uri       /admin
    17         stats auth      admin:1234
    18 
    19 frontend oldboy.org
    20         bind 0.0.0.0:80
    21         option httplog
    22         option httpclose
    23         option  forwardfor
    24         log global
    25         acl www hdr_reg(host) -i www.oldboy.org
    26         use_backend www.oldboy.org if www
    27 
    28 backend www.oldboy.org
    29         server 100.1.7.9 100.1.7.9 weight 20 maxconn 3000
    30         server 100.1.7.9 100.1.7.9 weight 20 maxconn 300
    31         server 100.1.7.9 100.1.7.9 weight 20 maxconn 3000
    ha_file

    下面是主要程序代码,

     1 #!/use/bin/env python
     2 #_*_ coding:utf_8 _*_
     3 import json,time,os,sys
     4 
     5 time_now=time.strftime('%Y-%m-%d %H:%M:%S')
     6 time_flag=time.strftime('%Y-%m-%d-%H-%M-%S')
     7 
     8 
     9 if __name__ =='__main__':
    10     """
    11     主函数,通过判断用户输入执行相应操作
    12     :return:
    13     """
    14     while True:
    15         print(
    16             '''
    17 ---------------------------------------
    18     请输入下列编号进行操作,按q退出:
    19         1:获取haproxy记录
    20         2:增加haproxy记录
    21         3: 删除haproxy记录
    22 ----------------------------------------
    23          ''')
    24         get_mun = input('请输入操作序号:')
    25         if get_mun == 'q':
    26             exit('bye')
    27         if get_mun.isdigit:
    28             get_mun = int(get_mun)
    29         if get_mun == 1: #如果选择1,则执行get_ha()
    30             read = input("请输入backend:(例如:www.oldboy.org)")
    31             ha_list = get_ha(read)
    32             if len(ha_list)!= 0:
    33                 print(ha_list)
    34             else:
    35                 print('没有找到相应记录,请检查输入是否正确')
    36         elif get_mun == 2:
    37             add_ha()
    38         elif get_mun == 3:
    39             del_domain = input('请输入想要删除的值:')
    40             del_ha(del_domain)
    main()

    main函数调用其他几个函数,分别为查询记录,增加记录和删除记录

    定义查询函数

     1 def get_ha(get_read):
     2     """
     3     定义查询函数
     4     :param get_read:用户输入想查询的信息
     5     :return:返回查询结果
     6     """
     7     get_flags = 0 #设置标识符,当匹配到输入时置为1
     8     get_list = [] #将匹配到的内容放在列表中
     9     with open('ha_file','r',encoding='utf-8') as f:
    10         for line in f.readlines():
    11             line = line.strip() #去掉多余的空格和换行符
    12             if line == 'backend %s'%get_read:
    13                 get_flags = 1
    14             elif line.startswith('backend'):
    15                 get_flags = 0
    16             elif get_flags == 1 and len(line)!= 0 :
    17                 get_list.append(line)
    18     return get_list
    get_ha()

    定义增加函数

     1 def add_ha():
     2     while True:
     3         add_resource_str = input('请输入想要增加的记录: ')
     4         result_check = check_input(add_resource_str)
     5         if result_check == False:
     6             print('请输入正确格式')
     7         if result_check == True:
     8             add_resource = json.loads(add_resource_str) #取得输入的值
     9             domain_info = add_resource['backend']
    10             server_info = add_resource['record']['server']
    11             weight_info = add_resource['record']['weight']
    12             maxcont_info = add_resource['record']['maxconn']
    13             match_info = ('server {} {} weight {} maxconn {}').format(server_info,server_info,weight_info,maxcont_info)
    14             #match_info 判断信息是否存在,不存在则添加进文件
    15             # print(match_info,type(match_info))
    16             # print(domain_info)
    17             get_match = get_ha(domain_info) #原文件已经存在的记录
    18             # print(get_match[0])
    19             if get_match != []:#域名信息存在
    20                 if get_match[0] == match_info:
    21                     print('信息已存在,不做更改')
    22                 else:
    23                     #域名信息存在,但是有更新,f1为原文件,f2为备份文件
    24                     with open('ha_file','r',encoding='utf-8') as f1:
    25                         all_config = f1.readlines()
    26                     match_item = 'backend {}
    '.format(domain_info) #获得更新后的配置信息
    27                     #print(match_item)
    28                     if str(match_item) in all_config:
    29                         update_index = all_config.index(str(match_item))
    30                         insert_record_index = int(update_index) +1
    31                         all_config.insert(int(insert_record_index),8*' '+match_info+'
    ') #将数据插入
    32                         with open('ha_new','w',encoding='utf-8') as f2:
    33                             f2.writelines(all_config)
    34                         os.rename('ha_file','ha_bak%s'%(time_flag))
    35                         os.rename('ha_new','ha_file')
    36             else:  #原文件不存在相同域名,追加到文件末尾
    37                 with open('ha_file','r',encoding='utf-8') as f1,open('ha_new','w',encoding='utf-8') as f2:
    38                     all_config = f1.readlines()
    39                     str_append = ('''
    40 backend %s
    41         %s
    42         '''%(domain_info,match_info))# 字符串预格式化
    43                     all_config.append(str_append)
    44                     f2.writelines(all_config)
    45                     os.rename('ha_file','ha_bak')
    46                     os.rename('ha_new','ha_file')
    47         return
    add_ha

    定义删除函数

     1 def get_ha(get_read):
     2     """
     3     定义查询函数
     4     :param get_read:用户输入想查询的信息
     5     :return:返回查询结果
     6     """
     7     get_flags = 0 #设置标识符,当匹配到输入时置为1
     8     get_list = [] #将匹配到的内容放在列表中
     9     with open('ha_file','r',encoding='utf-8') as f:
    10         for line in f.readlines():
    11             line = line.strip() #去掉多余的空格和换行符
    12             if line == 'backend %s'%get_read:
    13                 get_flags = 1
    14             elif line.startswith('backend'):
    15                 get_flags = 0
    16             elif get_flags == 1 and len(line)!= 0 :
    17                 get_list.append(line)
    18     return get_list
    del_ha

    由于本次为手动输入记录,对格式有严格的要求,所以定义一个检查输入的函数。实际环境中应该是从其他地方get到格式化好的值。

     1 def check_input(check_dir):
     2     """
     3     检查输入格式是否正确
     4     :param check_str:
     5     :return:
     6     """
     7     try:
     8         check = json.loads(check_dir)
     9         domain_info = check['backend']
    10         server_info = check['record']['server']
    11         weight_info = check['record']['weight']
    12         maxcont_info = check['record']['maxconn']
    13 
    14     except:
    15         return False
    16     else:
    17         return True
    check_input
  • 相关阅读:
    Oracle把表记录恢复到指定时间节点
    解决Idea配置文件不显示中文的问题
    maven过滤配置文件
    文件流字符串互转
    jax-rs下载文件
    Excel导入异常Cannot get a text value from a numeric cell解决及poi导入时注意事项
    oracle获取表字段及表注释的相关操作
    pb SendMessage
    pb datawindow的用法
    charindex函数的用法
  • 原文地址:https://www.cnblogs.com/ernest-zhang/p/5536538.html
Copyright © 2020-2023  润新知