公司对haproxy进行了配置的拆分,将每个backend的serverlist独立拆分成一个静态文件,对每个静态文件可以独立修改..

现有的haproxy.cfg配置文件数量很多且每个文件的内容也非常的多, 人工拆分太苦逼, 因此写过一个小脚本用来完成这项任务.

今天在浏览系统文件夹的时候, 将此程序最初的一个版本贴上...

#!/usr/bin/ruby#2014/05/24#codingbykevinhacfg=ARGV[0]ifARGV.empty?puts'Pleaseinputhaproxy.cfgparameter'exitendif!File.exists?(hacfg)puts'Filenotexists,pleasecheck'exitendif!File.directory?('backend.d')Dir::mkdir('backend.d')endfile=File.readlines(hacfg).to_sfile.gsub!("\t","")#解析backendarea=file.scan(/^(backend.*(\s+[a-z].*)+)/)#对提取的backend解析serverlistarea.eachdo|i|i.popn=i.to_st=i.to_sconent=n.split("\n")name=conent[0].split("")#解析server条目写入到backend.d目录serverlist=n.scan(/\s?#?\s?server.*/)f=File.open("backend.d/#{name[1]}","w")ifconent.to_s=~/(\s+source\s+\d+\.\d+\.\d+\.\d+|\s+backup\Z|\s+id\s+\w+)/putsnameputs"havekeyword...sonext..."nextendserverlist.eachdo|line|ip=line.scan(/(\d+\.\d+\.\d+\.\d+):/)port=line.scan(/\d+\.\d+\.\d+\.\d+\:(\d+)/)weight=line.scan(/weight\s+(\d+)/)maxconn=line.scan(/maxconn\s+(\d+)/)check_inter=line.scan(/checkinter\s+(\d+)/)fall=line.scan(/fall\s+(\d+)/)source=line.scan(/source/)backup=line.scan(/backup/)ifip.empty?orip.nil?puts"#{name[1]}serverlist发现有ip获取为空,请检查"exitendifport.empty?orport.nil?puts"#{name[1]}serverlist发现有port获取为空,请检查"exitendifweight.empty?orweight.nil?puts"#{name[1]}serverlist发现有weight获取为空,请检查"exitendifmaxconn.empty?ormaxconn.nil?puts"#{name[1]}serverlist发现有maxconn获取为空,请检查"exitendifcheck_inter.empty?orcheck_inter.nil?puts"#{name[1]}serverlist发现有checkinter获取为空,请检查"exitendiffall.empty?orfall.nil?puts"#{name[1]}serverlist发现有fall获取为空,请检查"exitendif!source.empty?puts"notice:havekeywords<source>"endif!backup.empty?puts"notice:havekeywords<backup>"endifline!~/\#/f.puts("#{ip},#{port},#{weight},#{maxconn},#{check_inter},#{fall}")endifserverlist[0]==linet.gsub!(/()+#{line}/,"optionserver_from_file\nserver_file#{name[1]}")elset.gsub!(/#{line}/,'kevin')endendf.closefile.gsub!("#{n}","#{t}")endf=File.open("haproxy.cfg.aa","w")f.puts(file)f.closea=File.readlines("haproxy.cfg.aa")file=a.delete_if{|i|i=~/kevin/}f=File.open("haproxy.cfg.aa","w")f.puts(file)f.close