# -*- 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()