python--如何在线上环境优雅的修改配置文件?
1、如何在线上环境优雅的修改配置文件?
原配置文件
- #原配置文件
- 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.cnblogs.com/chenlin163/
- use_backend www.cnblogs.com/chenlin163/ if www
- backend www.cnblogs.com/chenlin163/
- server 100.1.7.9 100.1.7.9 weight 20 maxconn 3000
- 原配置文件
- 1、查
- 输入:www.cnblogs.com/chenlin163/
- 获取当前backend下的所有记录
- 2、新建
- 输入:
- arg = {
- 'bakend': 'www.cnblogs.com/chenlin163/',
- 'record':{
- 'server': '100.1.7.9',
- 'weight': 20,
- 'maxconn': 30
- }
- }
- 3、删除
- 输入:
- arg = {
- 'bakend': 'www.cnblogs.com/chenlin163/',
- 'record':{
- 'server': '100.1.7.9',
- 'weight': 20,
- 'maxconn': 30
- }
- }
- 需求
- #!/usr/bin/env python
- # -*- coding:utf-8 -*-
- import json
- import os
- def fetch(backend):
- backend_title = 'backend %s' % backend
- record_list = []
- with open('ha') as obj:
- flag = False
- for line in obj:
- line = line.strip()
- if line == backend_title:
- flag = True
- continue
- if flag and line.startswith('backend'):
- flag = False
- break
- if flag and line:
- record_list.append(line)
- return record_list
- def add(dict_info):
- backend = dict_info.get('backend')
- record_list = fetch(backend)
- backend_title = "backend %s" % backend
- current_record = "server %s %s weight %d maxconn %d" % (dict_info['record']['server'], dict_info['record']['server'], dict_info['record']['weight'], dict_info['record']['maxconn'])
- if not record_list:
- record_list.append(backend_title)
- record_list.append(current_record)
- with open('ha') as read_file, open('ha.new', 'w') as write_file:
- flag = False
- for line in read_file:
- write_file.write(line)
- for i in record_list:
- if i.startswith('backend'):
- write_file.write(i+'\n')
- else:
- write_file.write("%s%s\n" % (8*" ", i))
- else:
- record_list.insert(0, backend_title)
- if current_record not in record_list:
- record_list.append(current_record)
- with open('ha') as read_file, open('ha.new', 'w') as write_file:
- flag = False
- has_write = False
- for line in read_file:
- line_strip = line.strip()
- if line_strip == backend_title:
- flag = True
- continue
- if flag and line_strip.startswith('backend'):
- flag = False
- if not flag:
- write_file.write(line)
- else:
- if not has_write:
- for i in record_list:
- if i.startswith('backend'):
- write_file.write(i+'\n')
- else:
- write_file.write("%s%s\n" % (8*" ", i))
- has_write = True
- os.rename('ha','ha.bak')
- os.rename('ha.new','ha')
- def remove(dict_info):
- backend = dict_info.get('backend')
- record_list = fetch(backend)
- backend_title = "backend %s" % backend
- current_record = "server %s %s weight %d maxconn %d" % (dict_info['record']['server'], dict_info['record']['server'], dict_info['record']['weight'], dict_info['record']['maxconn'])
- if not record_list:
- return
- else:
- if current_record not in record_list:
- return
- else:
- del record_list[record_list.index(current_record)]
- if len(record_list) > 0:
- record_list.insert(0, backend_title)
- with open('ha') as read_file, open('ha.new', 'w') as write_file:
- flag = False
- has_write = False
- for line in read_file:
- line_strip = line.strip()
- if line_strip == backend_title:
- flag = True
- continue
- if flag and line_strip.startswith('backend'):
- flag = False
- if not flag:
- write_file.write(line)
- else:
- if not has_write:
- for i in record_list:
- if i.startswith('backend'):
- write_file.write(i+'\n')
- else:
- write_file.write("%s%s\n" % (8*" ", i))
- has_write = True
- os.rename('ha','ha.bak')
- os.rename('ha.new','ha')
- if __name__ == '__main__':
- """
- print '1、获取;2、添加;3、删除'
- num = raw_input('请输入序号:')
- data = raw_input('请输入内容:')
- if num == '1':
- fetch(data)
- else:
- dict_data = json.loads(data)
- if num == '2':
- add(dict_data)
- elif num == '3':
- remove(dict_data)
- else:
- pass
- """
- #data = "www.cnblogs.com/chenlin163/"
- #fetch(data)
- #data = '{"backend": "tettst.oldboy.org","record":{"server": "100.1.7.90","weight": 20,"maxconn": 30}}'
- #dict_data = json.loads(data)
- #add(dict_data)
- #remove(dict_data)
- demo
2、文件处理中xreadlines的内部是如何实现的呢?
python--如何在线上环境优雅的修改配置文件?的更多相关文章
- Python的在线编辑环境
另外,再提供几个Python的在线编辑环境,可以直接写代码并且运行的环境. 在线Python实验室:http://www.pythoner.cn/labs/ 在线Python编辑器:http://ww ...
- BUG在线上环境中出现的原因总结
1.线上环境数据的复杂度以及数据量是测试环境不能比拟的. 2.业务操作的不可控性,用户错误的使用习惯. 3.实际场景的复杂性. 上线之后,测试人员需要做好以下二件事: 第一,灰度测试 项目上线之后 ...
- Appium+python自动化15-在Mac上环境搭建
前言 mac上搭建appium+python的环境还是有点复杂的,需要准备的软件 1.nodejs 2.npm 3.cnpm 4.appium 5.pip 6.Appium-Python-Client ...
- Appium+python自动化15-在Mac上环境搭建【转载】
前言 mac上搭建appium+python的环境还是有点复杂的,需要准备的软件 1.nodejs 2.npm 3.cnpm 4.appium 5.pip 6.Appium-Python-Client ...
- python的线上环境配置
1.安装python 2.7 http://www.cnblogs.com/strikebone/p/3970512.html 2.安装相关前置工具 pip, Django http://www ...
- Appium+python自动化16-appium1.6在mac上环境搭建启动ios模拟器上Safari浏览器
前言 在mac上搭建appium踩了不少坑,先是版本低了,启动后无限重启模拟器.后来全部升级最新版本,就稳稳的了. 环境准备: 1.OS版本号10.12 2.xcode版本号8.3.2 3.appiu ...
- appium1.6在mac上环境搭建启动ios模拟器上Safari浏览器 转自:上海-悠悠
前言 在mac上搭建appium踩了不少坑,先是版本低了,启动后无限重启模拟器.后来全部升级最新版本,就稳稳的了. 环境准备: 1.OS版本号10.12 2.xcode版本号8.3.2 3.appiu ...
- [Nginx笔记]关于线上环境CLOSE_WAIT和TIME_WAIT过高
运维的同学和Team里面的一个同学分别遇到过Nginx在线上环境使用中会遇到TIME_WAIT过高或者CLOSE_WAIT过高的状态 先从原因分析一下为什么,问题就迎刃而解了. 首先是TIME_WAI ...
- python查询修改配置文件功能
阅读目录 一.python查询功能代码 1.查询修改配置文件 global log 127.0.0.1 local2 daemon maxconn 256 log 127.0.0.1 local2 i ...
随机推荐
- vue+typescript入门学习
最近想要结合vue学习typescript,了解到vue2.5之后开始支持typescript,就像拿vue学习一下,首先要解决的就是环境的搭建,略微麻烦,如果想要自己体验一把,可以参考这篇文章htt ...
- php中三元运算符用法
代码如下: <?php $handle=fopen("../good/html/1.txt", "r"); while(!feof($handle)) / ...
- 利用layui的load模块解决图片上传
首先肯定要参考layui官网的upload模块文档:http://www.layui.com/doc/modules/upload.html 讲讲思路:在一份添加表单中,我们有个图片上传的模块,然后我 ...
- 149 Max Points on a Line 直线上最多的点数
给定二维平面上有 n 个点,求最多有多少点在同一条直线上. 详见:https://leetcode.com/problems/max-points-on-a-line/description/ Jav ...
- Oozie是什么?
但是,一般用Azkaban了.(具体见我写的另一篇博客:) 官网:https://oozie.apache.org/ Oozie is a workflow scheduler system ...
- AJPFX关于Java内部类及其实例化
public class Outer { private int size; public class Inner { private int counter = 10; ...
- AJPFX循环结构整理资料
Java语言基础(循环结构概述和for语句的格式及其使用)* A:循环结构的分类 * for,while,do...while * B:循环结构for语句的格式:* ...
- AJPFX总结java开发常用类(包装,数字处理集合等)(一)
一:首谈java中的包装类 Java为基本类型提供包装类,这使得任何接受对象的操作也可以用来操作基本类型,直接将简单类型的变量表示为一个类,在执行变量类型的相互转换时,我们会大量使用这些包装类.jav ...
- 如何正确理解关键字"with"与上下文管理器
转自:https://foofish.net/with-and-context-manager.html 如果你有阅读源码的习惯,可能会看到一些优秀的代码经常出现带有 “with” 关键字的语句,它通 ...
- python+selenium(环境的安装)
前言:网上的资料层次不齐,且资料也不全,容易误导新手,所以笔者愿意把你的知识免费分享给大家,笔者用的版本为:python3 此时可能新手就会问了,为什么不用python2呢,因为道理很简单,人要往前走 ...