您的位置:首页 > 编程语言 > Python开发

python 处理haproxy 添加backend 备忘

2018-11-30 17:29 218 查看
# -*- coding:utf-8 -*-

import re,os
from io import BytesIO
from saltapiauth import SaltApi
from jinja2 import Template

salta = SaltApi()

# contents is dict
def Tempdrawing(contents, flag='proxy'):
try:
if flag == 'proxy':

tempfile = os.path.join('static','nginx_models','nginx_proxy_model')

elif flag == 'sshcon':

tempfile = os.path.join('static','nginx_models','nginx_ssh_model')

else:

raise Exception()

with open(tempfile) as f:

temp_str = f.read()

template = Template(temp_str)

result = template.render(contents)

return result

except Exception as e:
print(str(e))
return str(e)

class OptHaproxy():

def __init__(self):
self.filename = '/etc/haproxy/haproxy.cfg.ori'
self.hostname = 'Min-Centos1'
self.statename = 'haproxy'
self.pre_modelfile = 'haproxy_model_pre'
self.after_modelfile = 'haproxy_model_after'

def getinfo(self):

command = 'cat %s' %self.filename
res = salta.host_remote_execution_module(self.hostname,'cmd.run',command)
# try:
#     os.remove(self.pre_modelfile)
# except Exception as e:
#     pass

with open(self.pre_modelfile,'w') as f:
f.write(res[self.hostname])
return res[self.hostname]

def showinfo(self):
sh = self.getinfo()
print(sh)

def modify(self,itname,*value):
flag = 1
preflag = 1
finflag = 1
server_set = []

# 将需要修改的部分提取出,并去重

with open(self.pre_modelfile,'r') as pre:
for line in pre:
if line.startswith('backend'):
preflag = 1

if preflag == 2:
if line.strip() != '':
server_set.append(line)

if re.search(itname,line) and line.startswith('backend'):
preflag = 2
continue

for i in value:
fina = '%s%s%s'%('\t',i,'\n')
if fina not in server_set:
server_set.append(fina)

print(server_set)

## 将需要修改的部分添加到配置文件中

with open(self.pre_modelfile,'r') as pref ,open(self.after_modelfile,'w') as afterf:
for line in pref:

if flag == 1 and finflag == 1:
afterf.write(line)

if re.search(itname,line) and line.startswith('backend'):
flag = 2
continue

if flag == 2 and finflag == 1:

for unit in server_set:
afterf.write(unit)
finflag = 2
flag = 1
continue

if line.startswith('backend'):
nline = '%s%s'%('\n',line)
afterf.write(nline)
finflag = 1

def deploy(self):
fio = BytesIO()
with open(self.after_modelfile,'r') as af:
for chunk in af:
fio.write(chunk)
depres = salta.server_hosts_pillar(self.hostname,self.statename,pillar={'config' : fio.getvalue()})
print(depres)

def check(self):
chkres = salta.host_remote_execution_module(self.hostname,'service.status',self.statename)
print(chkres)

if __name__ == '__main__':
ha = OptHaproxy()
ha.getinfo()
# ha.showinfo()
val = 'server web-node4 192.168.44.40:80 check  weight 80'
val2 = 'server web-node3 192.168.44.30:88 check  weight 50'
ha.modify('backend_www_example_com',val,val2)
ha.deploy()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  haproxy python salt