运维过程中,经常会对一些服务的配置文件进行修改,因此,用flask实现修改后的配置文件对比还是比较直观的。本文中介绍使用flask框架实现对文本文件的对比。
python使用difflib模块的HtmlDiff可以生成网页格式的对比,对比的结果还是比较好看的,截取其中部分对比的截图如下:
实现方法:
在flask的view上直接return对比的结果就行,view的代码如下:
#测试diff接口
@app.route('/test/diff', methods=['GET', 'POST'])
def test_diff():
diffresult = modules.web_diff_file('/etc/ssh/sshd_config', '/etc/ssh/sshd_config.bak20161101')
return diffresult
有时候对比出来可能会出现乱码现象,可使用
return diffresult, 200, {'Content-Type': 'text/html; charset=gbk'}
解决乱码问题。
使用的modules中的函数定义如下:
#读文件
def readfile(filename):
try:
fileHandle = open(filename, 'rb')
text = fileHandle.read().splitlines()
fileHandle.close()
return text
except IOError as error:
print('Read file Error:' + str(error))
sys.exit()
#对两个文件进行对比
def web_diff_file(file1, file2):
text1_lines = readfile(file1)
text2_lines = readfile(file2)
d = difflib.HtmlDiff()
return d.make_file(text1_lines, text2_lines)
对配置文件进行读取,然后直接使用python的difflib库的HtmlDiff方法即可在网页实现比较直观的对比结果,更新配置自动化的时候,可以在配置下发前进行对比。
实现完成对vim /etc/ssh/sshd_config.bak20161101进行编辑,修改些内容,就可以看出对比的效果了,如下:
最后附上本人的网络课堂地址,如有兴趣请点击: 实践哥