haproxy 文件操作,操作属于简单操作,不复杂

  1. # -*- coding:utf-8 -*-
  2. # LC
  3.  
  4. def search(*args): #查找Haproxy文件中的服务器
  5. list1 = []
  6. with open("haproxyfile","r") as f:
  7. flag = False
  8. for line in f:
  9. if line.strip() == "backend %s" % args: #查找第一个以backend + 输入域名的起头的backend,将相关信息记录list中
  10. flag = True
  11. list1.append(line.strip())
  12. continue #并继续循环,为了将backend下一行执行,即按着flag = True执行
  13. if line.strip().startswith("backend") or line.strip() == "": #查到第二个backend这将flag置于Fasle,如果是空行,也将flag置于Fasle中,(防止文章末尾有多个空行)
  14. flag = False
  15. if flag:
  16. list1.append(line.strip()) #将正确backend的后续信息继续记录至list中
  17. return list1
  18.  
  19. def delete(string):
  20. dict = eval(string)
  21. backend = dict["backend"]
  22. record = dict["record"]
  23. new_file_list = []
  24. if backend in domain_list(): #判读要删除的域名是否在文件内
  25. with open("haproxyfile","r",encoding="utf-8") as f_read:
  26. for line in f_read:
  27. new_file_list.append(line) #读取文件的每行,将每行写入列表
  28. if line.strip() == "backend %s" %backend: #如果有符合的backend,则将最近的写入列表弹出
  29. new_file_list.pop()
  30. if line.strip() == "server %s weight %s maxconn %s" %(record["server"],record["weight"],record["maxconn"]):#如果有符合的server信息,则将最近的写入列表弹出
  31. new_file_list.pop()
  32. with open("haproxyfile1", "a") as f_write: #将删除后的写入文件中
  33. for line in new_file_list:
  34. f_write.write(line)
  35. else:
  36. print("The Domain not in this file!")
  37.  
  38. def add(string): #增加ha文件配置服务器信息
  39. dict = eval(string)
  40. backend = dict["backend"]
  41. record = dict["record"]
  42. with open("haproxyfile","a") as f_write:
  43. f_write.write("backend %s\n"%backend)
  44. f_write.write("\t\tserver %s %s weight %s maxconn %s"%(record["server"][0],record["server"][1],
  45. record["weight"],
  46. record["maxconn"]))
  47.  
  48. def domain_list(): #将文件中所有的domain都摘出来
  49. backend_name = []
  50. with open("haproxyfile","r") as f_read:
  51. for line in f_read:
  52. if line.startswith("backend"):
  53. domain_name = line.split()[1]
  54. backend_name.append(domain_name)
  55. return backend_name
  56.  
  57. #域名信息查找
  58. domain_search_name = input("Please input the domain your search:")
  59. if domain_search_name in domain_list():
  60. domain_info = search(domain_search_name)
  61. print(domain_info)
  62.  
  63. #域名信息删除
  64.  
  65. string = "{'backend': 'www.yst.com.cn','record':{'server':'1.1.1.1','weight': 30,'maxconn': 2300}}"
  66. delete(string)
  67.  
  68. #域名信息增加
  69. string = "{'backend': 'www.yst.com.cn','record':{'server':'1.1.1.1','weight': 30,'maxconn': 2300}}"
  70. add(string)
  1. 收集backend信息和对应server的信息
  1. def backend_info():
  2. with open("haproxyfile","r") as f_read:
  3. backend_list = []
  4. dict_all = {}
  5. dict_ser = {}
  6. server_list = []
  7. for line in f_read:
  8. if line.strip().startswith("backend"):
  9. backend_name = line.split()[1]
  10. backend_list.append(backend_name)
  11. server_list = []
  12. if line.strip().startswith("server"):
  13. dict_ser['server'] = line.strip().split()[1]
  14. dict_ser['weight'] = line.strip().split()[3]
  15. dict_ser['maxconn'] = line.strip().split()[5]
  16. server_list.append(dict_ser)
  17. dict_all[backend_name] = server_list
  18. return backend_list,dict_all #返回backend的所有域名信息和域名包含的服务器信息

 

python---haproxy---文件操作的更多相关文章

  1. Python :open文件操作,配合read()使用!

    python:open/文件操作 open/文件操作f=open('/tmp/hello','w') #open(路径+文件名,读写模式) 如何打开文件 handle=open(file_name,a ...

  2. Python 常见文件操作的函数示例(转)

    转自:http://www.cnblogs.com/txw1958/archive/2012/03/08/2385540.html # -*-coding:utf8 -*- ''''' Python常 ...

  3. 孤荷凌寒自学python第三十五天python的文件操作之针对文件操作的os模块的相关内容

     孤荷凌寒自学python第三十五天python的文件操作之针对文件操作的os模块的相关内容 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.打开文件后,要务必记得关闭,所以一般的写法应当 ...

  4. 孤荷凌寒自学python第三十三天python的文件操作初识

     孤荷凌寒自学python第三十三天python的文件操作初识 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 今天开始自学python的普通 文件操作部分的内容. 一.python的文件打开 ...

  5. python中文件操作的六种模式及对文件某一行进行修改的方法

    一.python中文件操作的六种模式分为:r,w,a,r+,w+,a+ r叫做只读模式,只可以读取,不可以写入 w叫做写入模式,只可以写入,不可以读取 a叫做追加写入模式,只可以在末尾追加内容,不可以 ...

  6. python中文件操作的其他方法

    前面介绍过Python中文件操作的一般方法,包括打开,写入,关闭.本文中介绍下python中关于文件操作的其他比较常用的一些方法. 首先创建一个文件poems: p=open('poems','r', ...

  7. Python常见文件操作的函数示例

    # -*-coding:utf8 -*- ''''' Python常见文件操作示例 os.path 模块中的路径名访问函数 分隔 basename() 去掉目录路径, 返回文件名 dirname() ...

  8. python的文件操作及简单的用例

    一.python的文件操作介绍 1.文件操作函数介绍 open() 打开一个文件 语法:open(file, mode='r', buffering=-1, encoding=None, errors ...

  9. python基本文件操作

    python文件操作 python的文件操作相对于java复杂的IO流简单了好多,只要关心文件的读和写就行了 基本的文件操作 要注意的是,当不存在某路径的文件时,w,a模式会自动新建此文件夹,当读模式 ...

  10. [转]python file文件操作--内置对象open

    python file文件操作--内置对象open   说明: 1. 函数功能打开一个文件,返回一个文件读写对象,然后可以对文件进行相应读写操作. 2. file参数表示的需要打开文件的相对路径(当前 ...

随机推荐

  1. 程序员大牛 Jeff Atwood 的两本中文书

    程序员大牛,StackOverflow.com创始人之一--Jeff Atwood 英文博客:http://blog.codinghorror.com <高效能程序员的修炼>,人民邮电出版 ...

  2. [GitHub]第七讲:GitHub issues

    文章转载自:http://blog.csdn.net/loadsong/article/details/51591701 Github 上的每个项目仓库,都有三套基础设置可供使用:一个是通过 Gith ...

  3. MariaDB存储引擎

    MariaDB存储引擎 存储引擎就是指表的类型.数据库的存储引擎决定了表在计算机中的存储方式.存储引擎的概念是MariaDB的特点,而且是一种插入式的存储引擎概念.这决定了MariaDB数据库中的表可 ...

  4. Android读取/dev/graphics/fb0 屏幕截图

    Android屏幕截图有很多方式这里只使用其中一种截图 主要是读取/dev/graphics/fb0,进行转换,复杂点就在如何把读取的数据进行转换. 可以参考一下这篇文章:http://blog.ch ...

  5. 海量数据挖掘MMDS week5: 计算广告Computational Advertising

    http://blog.csdn.net/pipisorry/article/details/49428053 海量数据挖掘Mining Massive Datasets(MMDs) -Jure Le ...

  6. ROS_Kinetic_03 ROS入门向导

    ROS_Kinetic_03 ROS入门向导 每个人都有不同的学习习惯和爱好并针对不同的应用进行ROS相关设计与开发, 没有固定不变的学习模式,但以下的内容是通常都会用到的. 1. ROS基础教程 1 ...

  7. 谈谈Ext JS的组件——组件基类:Ext.Component

    概述 Ext.Component是所有Ext组件的基类,这在Ext.Component的API中第一句话就提到了.然后第二段说明了它包含的基本功能:隐藏/显示.启用/禁用以及尺寸控制等.除了以上这些基 ...

  8. 关于React Native 报Export declarations are not supported by current JavaScript version错误的解决问题

    设置.js文件默认以jsx的语法打开 在没有进行设置的情况下,每次打开WebStorm的时候打开包含jsx语法的.js文件都会有以下提示: 当然我们点击转换后就可以了,但是每次都会提示,所以还是来一个 ...

  9. Volley学习小结

    1.概述 volley英文即是"齐射,并发",是谷歌在2013年推出的网络通信库,有如下特点: [1]通信更快,更简单 [2]Get.Post网络请求以及网络数据图像的高效的异步请 ...

  10. Android开源项目——带图标文字的底部导航栏IconTabPageIndicator

    接下来的博客计划是,在<Android官方技术文档翻译>之间会发一些Android开源项目的介绍,直接剩下的几篇Android技术文档发完,然后就是Android开源项目和Gradle翻译 ...