mirror of https://github.com/Aidaho12/haproxy-wi
parent
0990588f52
commit
f6690609aa
|
@ -63,14 +63,14 @@ yum install haproxy-wi
|
||||||
For install just clone:
|
For install just clone:
|
||||||
```
|
```
|
||||||
CentOS:
|
CentOS:
|
||||||
$ sudo yum -y install git nmap-ncat net-tools python35u dos2unix python35u-pip mod_ssl httpd python35u-devel gcc-c++ openldap-devel python-devel python-jinja2 python35u-mod_wsgi
|
$ sudo yum -y install git nmap-ncat net-tools python35u dos2unix python35u-pip mod_ssl httpd python35u-devel gcc-c++ openldap-devel python-devel python-jinja2 python35u-mod_wsgi ansible
|
||||||
$ cd /var/www/
|
$ cd /var/www/
|
||||||
$ git clone https://github.com/Aidaho12/haproxy-wi.git /var/www/haproxy-wi
|
$ git clone https://github.com/Aidaho12/haproxy-wi.git /var/www/haproxy-wi
|
||||||
$ chown -R apache:apache haproxy-wi/
|
$ chown -R apache:apache haproxy-wi/
|
||||||
|
|
||||||
Or if use Debian/Ubuntu:
|
Or if use Debian/Ubuntu:
|
||||||
|
|
||||||
$ sudo apt-get install git net-tools lshw dos2unix apache2 gcc netcat python3.5 python3.5-mod_wsgi mod_ssl python3-pip g++ freetype2-demos libatlas-base-dev openldap-dev libpq-dev python-dev libxml2-dev libxslt1-dev libldap2-dev libsasl2-dev libffi-dev python3-dev libssl-dev -y
|
$ sudo apt-get install git net-tools lshw dos2unix apache2 gcc netcat python3.5 python3.5-mod_wsgi mod_ssl python3-pip g++ freetype2-demos libatlas-base-dev openldap-dev libpq-dev python-dev libxml2-dev libxslt1-dev libldap2-dev libsasl2-dev libffi-dev python3-dev libssl-dev ansible -y
|
||||||
$ chown -R www-data:www-data haproxy-wi/
|
$ chown -R www-data:www-data haproxy-wi/
|
||||||
|
|
||||||
Both
|
Both
|
||||||
|
|
|
@ -69,7 +69,7 @@ if form.getvalue('mode') is not None:
|
||||||
end_name = form.getvalue('listner')
|
end_name = form.getvalue('listner')
|
||||||
elif form.getvalue('frontend') is not None:
|
elif form.getvalue('frontend') is not None:
|
||||||
name = "frontend " + form.getvalue('frontend')
|
name = "frontend " + form.getvalue('frontend')
|
||||||
backend = " default_backend " + form.getvalue('backend') + "\n"
|
backend = " default_backend " + form.getvalue('backends') + "\n"
|
||||||
end_name = form.getvalue('frontend')
|
end_name = form.getvalue('frontend')
|
||||||
elif form.getvalue('new_backend') is not None:
|
elif form.getvalue('new_backend') is not None:
|
||||||
name = "backend " + form.getvalue('new_backend')
|
name = "backend " + form.getvalue('new_backend')
|
||||||
|
|
20
app/funct.py
20
app/funct.py
|
@ -353,7 +353,10 @@ def install_haproxy(serv, **kwargs):
|
||||||
|
|
||||||
os.system("cp scripts/%s ." % script)
|
os.system("cp scripts/%s ." % script)
|
||||||
|
|
||||||
proxy_serv = proxy if proxy is not None else ""
|
if hapver is None:
|
||||||
|
hapver = '2.0.7-1'
|
||||||
|
|
||||||
|
proxy_serv = proxy if proxy is not None else ''
|
||||||
syn_flood_protect = '1' if kwargs.get('syn_flood') == "1" else ''
|
syn_flood_protect = '1' if kwargs.get('syn_flood') == "1" else ''
|
||||||
|
|
||||||
commands = [ "chmod +x "+script +" && ./"+script +" PROXY=" + proxy_serv+
|
commands = [ "chmod +x "+script +" && ./"+script +" PROXY=" + proxy_serv+
|
||||||
|
@ -367,9 +370,17 @@ def install_haproxy(serv, **kwargs):
|
||||||
logging('localhost', error, haproxywi=1)
|
logging('localhost', error, haproxywi=1)
|
||||||
print('error: '+error)
|
print('error: '+error)
|
||||||
else:
|
else:
|
||||||
print(output[0])
|
for l in output:
|
||||||
|
if "msg" in l or "FAILED" in l:
|
||||||
|
l = l.split(':')[1]
|
||||||
|
l = l.split('"')[1]
|
||||||
|
print(l+"<br>")
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
print('success: HAProxy was installed<br>')
|
||||||
|
|
||||||
|
os.system("rm -f %s" % script)
|
||||||
|
|
||||||
|
|
||||||
def waf_install(serv, **kwargs):
|
def waf_install(serv, **kwargs):
|
||||||
import sql
|
import sql
|
||||||
|
@ -412,6 +423,7 @@ def check_haproxy_version(serv):
|
||||||
ver = line
|
ver = line
|
||||||
return ver
|
return ver
|
||||||
|
|
||||||
|
|
||||||
def upload(serv, path, file, **kwargs):
|
def upload(serv, path, file, **kwargs):
|
||||||
error = ""
|
error = ""
|
||||||
full_path = path + file
|
full_path = path + file
|
||||||
|
@ -618,7 +630,6 @@ def show_backends(serv, **kwargs):
|
||||||
back = json.dumps(line).split("\"")
|
back = json.dumps(line).split("\"")
|
||||||
if kwargs.get('ret'):
|
if kwargs.get('ret'):
|
||||||
ret.append(back[1])
|
ret.append(back[1])
|
||||||
#ret += ","
|
|
||||||
else:
|
else:
|
||||||
print(back[1], end="<br>")
|
print(back[1], end="<br>")
|
||||||
|
|
||||||
|
@ -676,7 +687,6 @@ def check_new_version():
|
||||||
|
|
||||||
res = response.content.decode(encoding='UTF-8')
|
res = response.content.decode(encoding='UTF-8')
|
||||||
except requests.exceptions.RequestException as e:
|
except requests.exceptions.RequestException as e:
|
||||||
#print(e)
|
|
||||||
e = str(e)
|
e = str(e)
|
||||||
logging('localhost', ' '+e, haproxywi=1)
|
logging('localhost', ' '+e, haproxywi=1)
|
||||||
|
|
||||||
|
|
294
app/options.py
294
app/options.py
|
@ -4,7 +4,6 @@ import cgi
|
||||||
import os, sys
|
import os, sys
|
||||||
import funct
|
import funct
|
||||||
import sql
|
import sql
|
||||||
import asyncio
|
|
||||||
|
|
||||||
form = cgi.FieldStorage()
|
form = cgi.FieldStorage()
|
||||||
serv = form.getvalue('serv')
|
serv = form.getvalue('serv')
|
||||||
|
@ -123,7 +122,7 @@ if form.getvalue('ip') is not None and serv is not None:
|
||||||
|
|
||||||
|
|
||||||
if form.getvalue('showif'):
|
if form.getvalue('showif'):
|
||||||
commands = ["sudo ip link|grep 'UP' | awk '{print $2}' |awk -F':' '{print $1}'"]
|
commands = ["sudo ip link|grep 'UP' |grep -v 'lo'| awk '{print $2}' |awk -F':' '{print $1}'"]
|
||||||
funct.ssh_command(serv, commands, ip="1")
|
funct.ssh_command(serv, commands, ip="1")
|
||||||
|
|
||||||
|
|
||||||
|
@ -147,116 +146,118 @@ if form.getvalue('action_waf') is not None and serv is not None:
|
||||||
funct.ssh_command(serv, commands)
|
funct.ssh_command(serv, commands)
|
||||||
|
|
||||||
|
|
||||||
async def async_get_overview(serv1, serv2):
|
if act == "overview":
|
||||||
server_status = ()
|
import asyncio
|
||||||
commands2 = [ "ps ax |grep waf/bin/modsecurity |grep -v grep |wc -l" ]
|
async def async_get_overview(serv1, serv2):
|
||||||
cmd = 'echo "show info" |nc %s %s -w 1|grep -e "Process_num"' % (serv2, sql.get_setting('haproxy_sock_port'))
|
server_status = ()
|
||||||
server_status = (serv1,
|
commands2 = [ "ps ax |grep waf/bin/modsecurity |grep -v grep |wc -l" ]
|
||||||
serv2,
|
cmd = 'echo "show info" |nc %s %s -w 1|grep -e "Process_num"' % (serv2, sql.get_setting('haproxy_sock_port'))
|
||||||
funct.server_status(funct.subprocess_execute(cmd)),
|
server_status = (serv1,
|
||||||
sql.select_servers(server=serv2, keep_alive=1),
|
serv2,
|
||||||
funct.ssh_command(serv2, commands2),
|
funct.server_status(funct.subprocess_execute(cmd)),
|
||||||
sql.select_waf_servers(serv2))
|
sql.select_servers(server=serv2, keep_alive=1),
|
||||||
return server_status
|
funct.ssh_command(serv2, commands2),
|
||||||
|
sql.select_waf_servers(serv2))
|
||||||
|
return server_status
|
||||||
|
|
||||||
async def get_runner_overview():
|
|
||||||
import http.cookies
|
async def get_runner_overview():
|
||||||
from jinja2 import Environment, FileSystemLoader
|
import http.cookies
|
||||||
env = Environment(loader=FileSystemLoader('templates/ajax'),extensions=['jinja2.ext.loopcontrols', 'jinja2.ext.do'])
|
from jinja2 import Environment, FileSystemLoader
|
||||||
|
env = Environment(loader=FileSystemLoader('templates/ajax'),extensions=['jinja2.ext.loopcontrols', 'jinja2.ext.do'])
|
||||||
servers = []
|
|
||||||
template = env.get_template('overview.html')
|
servers = []
|
||||||
cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE"))
|
template = env.get_template('overview.html')
|
||||||
user_id = cookie.get('uuid')
|
cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE"))
|
||||||
futures = [async_get_overview(server[1], server[2]) for server in sql.get_dick_permit()]
|
user_id = cookie.get('uuid')
|
||||||
for i, future in enumerate(asyncio.as_completed(futures)):
|
futures = [async_get_overview(server[1], server[2]) for server in sql.get_dick_permit()]
|
||||||
result = await future
|
for i, future in enumerate(asyncio.as_completed(futures)):
|
||||||
servers.append(result)
|
result = await future
|
||||||
servers_sorted = sorted(servers, key=funct.get_key)
|
servers.append(result)
|
||||||
template = template.render(service_status=servers_sorted, role=sql.get_user_role_by_uuid(user_id.value))
|
servers_sorted = sorted(servers, key=funct.get_key)
|
||||||
print(template)
|
template = template.render(service_status=servers_sorted, role=sql.get_user_role_by_uuid(user_id.value))
|
||||||
|
print(template)
|
||||||
|
|
||||||
|
|
||||||
if act == "overview":
|
|
||||||
ioloop = asyncio.get_event_loop()
|
ioloop = asyncio.get_event_loop()
|
||||||
ioloop.run_until_complete(get_runner_overview())
|
ioloop.run_until_complete(get_runner_overview())
|
||||||
ioloop.close()
|
ioloop.close()
|
||||||
|
|
||||||
|
|
||||||
async def async_get_overviewWaf(serv1, serv2):
|
|
||||||
haproxy_dir = sql.get_setting('haproxy_dir')
|
|
||||||
server_status = ()
|
|
||||||
commands = [ "ps ax |grep waf/bin/modsecurity |grep -v grep |wc -l" ]
|
|
||||||
commands1 = [ "cat %s/waf/modsecurity.conf |grep SecRuleEngine |grep -v '#' |awk '{print $2}'" % haproxy_dir ]
|
|
||||||
|
|
||||||
server_status = (serv1,serv2, funct.ssh_command(serv2, commands), funct.ssh_command(serv2, commands1).strip(), sql.select_waf_metrics_enable_server(serv2))
|
if act == "overviewwaf":
|
||||||
return server_status
|
import asyncio
|
||||||
|
async def async_get_overviewWaf(serv1, serv2):
|
||||||
|
haproxy_dir = sql.get_setting('haproxy_dir')
|
||||||
|
server_status = ()
|
||||||
|
commands = [ "ps ax |grep waf/bin/modsecurity |grep -v grep |wc -l" ]
|
||||||
|
commands1 = [ "cat %s/waf/modsecurity.conf |grep SecRuleEngine |grep -v '#' |awk '{print $2}'" % haproxy_dir ]
|
||||||
|
|
||||||
|
server_status = (serv1,serv2, funct.ssh_command(serv2, commands), funct.ssh_command(serv2, commands1).strip(), sql.select_waf_metrics_enable_server(serv2))
|
||||||
|
return server_status
|
||||||
|
|
||||||
|
|
||||||
async def get_runner_overviewWaf(url):
|
async def get_runner_overviewWaf(url):
|
||||||
import http.cookies
|
import http.cookies
|
||||||
from jinja2 import Environment, FileSystemLoader
|
from jinja2 import Environment, FileSystemLoader
|
||||||
env = Environment(loader=FileSystemLoader('templates/ajax'),extensions=['jinja2.ext.loopcontrols', 'jinja2.ext.do'])
|
env = Environment(loader=FileSystemLoader('templates/ajax'),extensions=['jinja2.ext.loopcontrols', 'jinja2.ext.do'])
|
||||||
template = env.get_template('overivewWaf.html')
|
template = env.get_template('overivewWaf.html')
|
||||||
|
|
||||||
|
servers = []
|
||||||
|
cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE"))
|
||||||
|
user_id = cookie.get('uuid')
|
||||||
|
futures = [async_get_overviewWaf(server[1], server[2]) for server in sql.get_dick_permit()]
|
||||||
|
for i, future in enumerate(asyncio.as_completed(futures)):
|
||||||
|
result = await future
|
||||||
|
servers.append(result)
|
||||||
|
servers_sorted = sorted(servers, key=funct.get_key)
|
||||||
|
template = template.render(service_status=servers_sorted, role=sql.get_user_role_by_uuid(user_id.value), url=url)
|
||||||
|
print(template)
|
||||||
|
|
||||||
servers = []
|
|
||||||
cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE"))
|
|
||||||
user_id = cookie.get('uuid')
|
|
||||||
futures = [async_get_overviewWaf(server[1], server[2]) for server in sql.get_dick_permit()]
|
|
||||||
for i, future in enumerate(asyncio.as_completed(futures)):
|
|
||||||
result = await future
|
|
||||||
servers.append(result)
|
|
||||||
servers_sorted = sorted(servers, key=funct.get_key)
|
|
||||||
template = template.render(service_status=servers_sorted, role=sql.get_user_role_by_uuid(user_id.value), url=url)
|
|
||||||
print(template)
|
|
||||||
|
|
||||||
|
|
||||||
if act == "overviewwaf":
|
|
||||||
ioloop = asyncio.get_event_loop()
|
ioloop = asyncio.get_event_loop()
|
||||||
ioloop.run_until_complete(get_runner_overviewWaf(form.getvalue('page')))
|
ioloop.run_until_complete(get_runner_overviewWaf(form.getvalue('page')))
|
||||||
ioloop.close()
|
ioloop.close()
|
||||||
|
|
||||||
|
|
||||||
async def async_get_overviewServers(serv1, serv2):
|
|
||||||
server_status = ()
|
|
||||||
commands = [ "top -u haproxy -b -n 1" ]
|
|
||||||
cmd = 'echo "show info" |nc %s %s -w 1|grep -e "Ver\|CurrConns\|Maxco\|MB\|Uptime:"' % (serv2, sql.get_setting('haproxy_sock_port'))
|
|
||||||
out = funct.subprocess_execute(cmd)
|
|
||||||
out1 = ""
|
|
||||||
|
|
||||||
for k in out:
|
|
||||||
if "Ncat:" not in k:
|
|
||||||
for r in k:
|
|
||||||
out1 += r
|
|
||||||
out1 += "<br />"
|
|
||||||
else:
|
|
||||||
out1 = "Can\'t connect to HAproxy"
|
|
||||||
|
|
||||||
server_status = (serv1,serv2, out1, funct.ssh_command(serv2, commands))
|
|
||||||
return server_status
|
|
||||||
|
|
||||||
|
|
||||||
async def get_runner_overviewServers(**kwargs):
|
|
||||||
import http.cookies
|
|
||||||
from jinja2 import Environment, FileSystemLoader
|
|
||||||
env = Environment(loader=FileSystemLoader('templates/ajax'),extensions=['jinja2.ext.loopcontrols', 'jinja2.ext.do'])
|
|
||||||
template = env.get_template('overviewServers.html')
|
|
||||||
|
|
||||||
servers = []
|
|
||||||
cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE"))
|
|
||||||
user_id = cookie.get('uuid')
|
|
||||||
role = sql.get_user_role_by_uuid(user_id.value)
|
|
||||||
futures = [async_get_overviewServers(kwargs.get('server1'), kwargs.get('server2'))]
|
|
||||||
|
|
||||||
for i, future in enumerate(asyncio.as_completed(futures)):
|
|
||||||
result = await future
|
|
||||||
servers.append(result)
|
|
||||||
servers_sorted = sorted(servers, key=funct.get_key)
|
|
||||||
template = template.render(service_status=servers_sorted, role=role, id=kwargs.get('id'))
|
|
||||||
print(template)
|
|
||||||
|
|
||||||
|
|
||||||
if act == "overviewServers":
|
if act == "overviewServers":
|
||||||
|
import asyncio
|
||||||
|
async def async_get_overviewServers(serv1, serv2):
|
||||||
|
server_status = ()
|
||||||
|
commands = [ "top -u haproxy -b -n 1" ]
|
||||||
|
cmd = 'echo "show info" |nc %s %s -w 1|grep -e "Ver\|CurrConns\|Maxco\|MB\|Uptime:"' % (serv2, sql.get_setting('haproxy_sock_port'))
|
||||||
|
out = funct.subprocess_execute(cmd)
|
||||||
|
out1 = ""
|
||||||
|
|
||||||
|
for k in out:
|
||||||
|
if "Ncat:" not in k:
|
||||||
|
for r in k:
|
||||||
|
out1 += r
|
||||||
|
out1 += "<br />"
|
||||||
|
else:
|
||||||
|
out1 = "Can\'t connect to HAproxy"
|
||||||
|
|
||||||
|
server_status = (serv1,serv2, out1, funct.ssh_command(serv2, commands))
|
||||||
|
return server_status
|
||||||
|
|
||||||
|
|
||||||
|
async def get_runner_overviewServers(**kwargs):
|
||||||
|
import http.cookies
|
||||||
|
from jinja2 import Environment, FileSystemLoader
|
||||||
|
env = Environment(loader=FileSystemLoader('templates/ajax'),extensions=['jinja2.ext.loopcontrols', 'jinja2.ext.do'])
|
||||||
|
template = env.get_template('overviewServers.html')
|
||||||
|
|
||||||
|
servers = []
|
||||||
|
cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE"))
|
||||||
|
user_id = cookie.get('uuid')
|
||||||
|
role = sql.get_user_role_by_uuid(user_id.value)
|
||||||
|
futures = [async_get_overviewServers(kwargs.get('server1'), kwargs.get('server2'))]
|
||||||
|
|
||||||
|
for i, future in enumerate(asyncio.as_completed(futures)):
|
||||||
|
result = await future
|
||||||
|
servers.append(result)
|
||||||
|
servers_sorted = sorted(servers, key=funct.get_key)
|
||||||
|
template = template.render(service_status=servers_sorted, role=role, id=kwargs.get('id'))
|
||||||
|
print(template)
|
||||||
|
|
||||||
id = form.getvalue('id')
|
id = form.getvalue('id')
|
||||||
name = form.getvalue('name')
|
name = form.getvalue('name')
|
||||||
ioloop = asyncio.get_event_loop()
|
ioloop = asyncio.get_event_loop()
|
||||||
|
@ -619,11 +620,11 @@ if form.getvalue('master'):
|
||||||
os.system("cp scripts/%s ." % script)
|
os.system("cp scripts/%s ." % script)
|
||||||
|
|
||||||
if form.getvalue('hap') == "1":
|
if form.getvalue('hap') == "1":
|
||||||
funct.install_haproxy(master, syn_flood='1')
|
funct.install_haproxy(master)
|
||||||
funct.install_haproxy(slave, syn_flood='1')
|
funct.install_haproxy(slave)
|
||||||
|
|
||||||
commands = [ "chmod +x "+script +" && ./"+script +" PROXY=" + proxy_serv+
|
commands = [ "chmod +x "+script +" && ./"+script +" PROXY=" + proxy_serv+
|
||||||
" ETH="+ETH+" IP="+str(IP)+" MASTER=MASTER"+" HOST="+str(master)+
|
" ETH="+ETH+" IP="+str(IP)+" MASTER=MASTER"+" SYN_FLOOD="+syn_flood+" HOST="+str(master)+
|
||||||
" USER="+str(ssh_user_name)+" PASS="+str(ssh_user_password)+" KEY="+str(ssh_key_name) ]
|
" USER="+str(ssh_user_name)+" PASS="+str(ssh_user_password)+" KEY="+str(ssh_key_name) ]
|
||||||
|
|
||||||
output, error = funct.subprocess_execute(commands[0])
|
output, error = funct.subprocess_execute(commands[0])
|
||||||
|
@ -632,7 +633,20 @@ if form.getvalue('master'):
|
||||||
logging('localhost', error, haproxywi=1)
|
logging('localhost', error, haproxywi=1)
|
||||||
print('error: '+error)
|
print('error: '+error)
|
||||||
else:
|
else:
|
||||||
print(output[0])
|
for l in output:
|
||||||
|
if "msg" in l or "FAILED" in l:
|
||||||
|
l = l.split(':')[1]
|
||||||
|
l = l.split('"')[1]
|
||||||
|
print(l+"<br>")
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
print('success: Master Keepalived was installed<br>')
|
||||||
|
|
||||||
|
for sshs in sql.select_ssh(serv=slave):
|
||||||
|
ssh_enable = sshs[3]
|
||||||
|
ssh_user_name = sshs[4]
|
||||||
|
ssh_user_password = sshs[5]
|
||||||
|
ssh_key_name = fullpath+'/keys/%s.pem' % sshs[2]
|
||||||
|
|
||||||
commands = [ "chmod +x "+script +" && ./"+script +" PROXY=" +proxy_serv+
|
commands = [ "chmod +x "+script +" && ./"+script +" PROXY=" +proxy_serv+
|
||||||
" ETH="+ETH+" IP="+IP+" MASTER=BACKUP"+" HOST="+str(slave)+
|
" ETH="+ETH+" IP="+IP+" MASTER=BACKUP"+" HOST="+str(slave)+
|
||||||
|
@ -644,31 +658,87 @@ if form.getvalue('master'):
|
||||||
logging('localhost', error, haproxywi=1)
|
logging('localhost', error, haproxywi=1)
|
||||||
print('error: '+error)
|
print('error: '+error)
|
||||||
else:
|
else:
|
||||||
print(output[0])
|
for l in output:
|
||||||
|
if "msg" in l or "FAILED" in l:
|
||||||
|
l = l.split(':')[1]
|
||||||
|
l = l.split('"')[1]
|
||||||
|
print(l+"<br>")
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
print('success: Slave Keepalived was installed<br>')
|
||||||
|
|
||||||
#os.system("rm -f %s" % script)
|
os.system("rm -f %s" % script)
|
||||||
sql.update_server_master(master, slave)
|
sql.update_server_master(master, slave)
|
||||||
|
|
||||||
|
|
||||||
if form.getvalue('masteradd'):
|
if form.getvalue('masteradd'):
|
||||||
master = form.getvalue('masteradd')
|
master = form.getvalue('masteradd')
|
||||||
slave = form.getvalue('slaveadd')
|
slave = form.getvalue('slaveadd')
|
||||||
interface = form.getvalue('interfaceadd')
|
ETH = form.getvalue('interfaceadd')
|
||||||
vrrpip = form.getvalue('vrrpipadd')
|
IP = form.getvalue('vrrpipadd')
|
||||||
kp = form.getvalue('kp')
|
kp = form.getvalue('kp')
|
||||||
tmp_config_path = sql.get_setting('tmp_config_path')
|
script = "install_keepalived.sh"
|
||||||
script = "add_vrrp.sh"
|
fullpath = funct.get_config_var('main', 'fullpath')
|
||||||
|
proxy = sql.get_setting('proxy')
|
||||||
|
ssh_enable = ''
|
||||||
|
ssh_port = ''
|
||||||
|
ssh_user_name = ''
|
||||||
|
ssh_user_password = ''
|
||||||
|
|
||||||
|
proxy_serv = proxy if proxy is not None else ""
|
||||||
|
|
||||||
|
for sshs in sql.select_ssh(serv=master):
|
||||||
|
ssh_enable = sshs[3]
|
||||||
|
ssh_user_name = sshs[4]
|
||||||
|
ssh_user_password = sshs[5]
|
||||||
|
ssh_key_name = fullpath+'/keys/%s.pem' % sshs[2]
|
||||||
|
|
||||||
os.system("cp scripts/%s ." % script)
|
os.system("cp scripts/%s ." % script)
|
||||||
|
|
||||||
error = str(funct.upload(master, tmp_config_path, script))
|
commands = [ "chmod +x "+script +" && ./"+script +" PROXY=" + proxy_serv+
|
||||||
if error:
|
" ETH="+ETH+" IP="+str(IP)+" MASTER=MASTER"+" RESTART="+kp+" ADD_VRRP=1 HOST="+str(master)+
|
||||||
print('error: '+error)
|
" USER="+str(ssh_user_name)+" PASS="+str(ssh_user_password)+" KEY="+str(ssh_key_name) ]
|
||||||
sys.exit()
|
|
||||||
funct.upload(slave, tmp_config_path, script)
|
|
||||||
|
|
||||||
funct.ssh_command(master, ["sudo chmod +x "+tmp_config_path+script, tmp_config_path+script+" MASTER "+interface+" "+vrrpip+" "+kp])
|
output, error = funct.subprocess_execute(commands[0])
|
||||||
funct.ssh_command(slave, ["sudo chmod +x "+tmp_config_path+script, tmp_config_path+script+" BACKUP "+interface+" "+vrrpip+" "+kp])
|
|
||||||
|
if error:
|
||||||
|
logging('localhost', error, haproxywi=1)
|
||||||
|
print('error: '+error)
|
||||||
|
else:
|
||||||
|
for l in output:
|
||||||
|
if "msg" in l or "FAILED" in l:
|
||||||
|
l = l.split(':')[1]
|
||||||
|
l = l.split('"')[1]
|
||||||
|
print(l+"<br>")
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
print('success: Master VRRP address was added<br>')
|
||||||
|
|
||||||
|
|
||||||
|
for sshs in sql.select_ssh(serv=slave):
|
||||||
|
ssh_enable = sshs[3]
|
||||||
|
ssh_user_name = sshs[4]
|
||||||
|
ssh_user_password = sshs[5]
|
||||||
|
ssh_key_name = fullpath+'/keys/%s.pem' % sshs[2]
|
||||||
|
|
||||||
|
commands = [ "chmod +x "+script +" && ./"+script +" PROXY=" + proxy_serv+
|
||||||
|
" ETH="+ETH+" IP="+str(IP)+" MASTER=BACKUP"+" RESTART="+kp+" ADD_VRRP=1 HOST="+str(slave)+
|
||||||
|
" USER="+str(ssh_user_name)+" PASS="+str(ssh_user_password)+" KEY="+str(ssh_key_name) ]
|
||||||
|
|
||||||
|
output, error = funct.subprocess_execute(commands[0])
|
||||||
|
|
||||||
|
if error:
|
||||||
|
logging('localhost', error, haproxywi=1)
|
||||||
|
print('error: '+error)
|
||||||
|
else:
|
||||||
|
for l in output:
|
||||||
|
if "msg" in l or "FAILED" in l:
|
||||||
|
l = l.split(':')[1]
|
||||||
|
l = l.split('"')[1]
|
||||||
|
print(l+"<br>")
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
print('success: Slave VRRP address was added<br>')
|
||||||
|
|
||||||
os.system("rm -f %s" % script)
|
os.system("rm -f %s" % script)
|
||||||
|
|
||||||
|
|
|
@ -1,51 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
CONF=/etc/keepalived/keepalived.conf
|
|
||||||
IP=`sudo cat $CONF |grep $3 |sed s/' '//g|sed s/'\t'//g| head -1`
|
|
||||||
VI=`sudo cat /etc/keepalived/keepalived.conf |grep VI |awk '{print $2}' |awk -F"_" '{print $2}' |tail -1`
|
|
||||||
VI=$(($VI+1))
|
|
||||||
|
|
||||||
if [[ $IP == $3 ]];then
|
|
||||||
echo -e "error: VRRP address alredy use"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
sudo bash -c cat << EOF >> $CONF
|
|
||||||
vrrp_instance VI_$VI {
|
|
||||||
state MASTER
|
|
||||||
interface eth1
|
|
||||||
virtual_router_id 101
|
|
||||||
priority 103
|
|
||||||
|
|
||||||
#check if we are still running
|
|
||||||
track_script {
|
|
||||||
chk_haproxy
|
|
||||||
}
|
|
||||||
|
|
||||||
advert_int 1
|
|
||||||
authentication {
|
|
||||||
auth_type PASS
|
|
||||||
auth_pass VerySecretPass2!
|
|
||||||
}
|
|
||||||
virtual_ipaddress {
|
|
||||||
0.0.0.1
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
EOF
|
|
||||||
if [ $? -eq 1 ]
|
|
||||||
then
|
|
||||||
echo "Can't read keepalived config"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
sudo sed -i "s/MASTER/$1/g" $CONF
|
|
||||||
sudo sed -i "s/eth1/$2/g" $CONF
|
|
||||||
sudo sed -i "s/0.0.0.1/$3/g" $CONF
|
|
||||||
|
|
||||||
if [[ $1 == "BACKUP" ]];then
|
|
||||||
sudo sed -i "s/103/104/g" $CONF
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ $4 == "1" ]];then
|
|
||||||
sudo systemctl restart keepalived
|
|
||||||
fi
|
|
||||||
echo "success"
|
|
|
@ -1,11 +1,26 @@
|
||||||
---
|
---
|
||||||
|
- name: check if HAProxy is installed
|
||||||
|
yum:
|
||||||
|
list=haproxy
|
||||||
|
register: is_installed
|
||||||
|
|
||||||
|
- name: HAProxy has already installed
|
||||||
|
debug:
|
||||||
|
msg: "HAProxy has already installed"
|
||||||
|
when: is_installed.results|selectattr("yumstate", "match", "installed")|list|length != 0
|
||||||
|
|
||||||
|
- name: Exiting
|
||||||
|
meta: end_play
|
||||||
|
when: is_installed.results|selectattr("yumstate", "match", "installed")|list|length != 0
|
||||||
|
|
||||||
- name: install HAProxy {{HAPVER}}
|
- name: install HAProxy {{HAPVER}}
|
||||||
yum:
|
yum:
|
||||||
name:
|
name:
|
||||||
- http://repo.haproxy-wi.org/haproxy-{{HAPVER}}.el6.x86_64.rpm
|
- http://repo.haproxy-wi.org/haproxy-{{HAPVER}}.el6.x86_64.rpm
|
||||||
- socat
|
- socat
|
||||||
state: present
|
state: present
|
||||||
when: (ansible_facts['os_family'] == "RedHat" or ansible_facts['os_family'] == 'CentOS') and ansible_facts['distribution_major_version']|int == 6
|
when: (ansible_facts['os_family'] == "RedHat" or ansible_facts['os_family'] == 'CentOS') and ansible_facts['distribution_major_version']|int == 6 and HAPVER|length > 0
|
||||||
|
register: install_result
|
||||||
environment:
|
environment:
|
||||||
http_proxy: "{{PROXY}}"
|
http_proxy: "{{PROXY}}"
|
||||||
https_proxy: "{{PROXY}}"
|
https_proxy: "{{PROXY}}"
|
||||||
|
@ -17,7 +32,7 @@
|
||||||
- http://repo.haproxy-wi.org/haproxy-{{HAPVER}}.el7.x86_64.rpm
|
- http://repo.haproxy-wi.org/haproxy-{{HAPVER}}.el7.x86_64.rpm
|
||||||
- socat
|
- socat
|
||||||
state: present
|
state: present
|
||||||
when: (ansible_facts['os_family'] == "RedHat" or ansible_facts['os_family'] == 'CentOS') and ansible_facts['distribution_major_version']|int == 7
|
when: ((ansible_facts['os_family'] == "RedHat" or ansible_facts['os_family'] == 'CentOS') and ansible_facts['distribution_major_version']|int == 7) and HAPVER|length > 0
|
||||||
environment:
|
environment:
|
||||||
http_proxy: "{{PROXY}}"
|
http_proxy: "{{PROXY}}"
|
||||||
https_proxy: "{{PROXY}}"
|
https_proxy: "{{PROXY}}"
|
||||||
|
@ -26,7 +41,7 @@
|
||||||
- name: set_fact from wi`
|
- name: set_fact from wi`
|
||||||
set_fact:
|
set_fact:
|
||||||
haproxy_from_wi: "yes"
|
haproxy_from_wi: "yes"
|
||||||
when: (ansible_facts['os_family'] == "RedHat" or ansible_facts['os_family'] == 'CentOS') and ansible_facts['distribution_major_version']|int == 7
|
when: (ansible_facts['os_family'] == "RedHat" or ansible_facts['os_family'] == 'CentOS') and ansible_facts['distribution_major_version']|int == 7 and HAPVER|length > 0
|
||||||
|
|
||||||
|
|
||||||
- name: install the latest version of HAProxy
|
- name: install the latest version of HAProxy
|
||||||
|
@ -35,7 +50,7 @@
|
||||||
- haproxy
|
- haproxy
|
||||||
- socat
|
- socat
|
||||||
state: latest
|
state: latest
|
||||||
when: (ansible_facts['os_family'] == "RedHat" or ansible_facts['os_family'] == 'CentOS') and ansible_facts['distribution_major_version']|int != 7
|
when: ((ansible_facts['os_family'] == "RedHat" or ansible_facts['os_family'] == 'CentOS') and ansible_facts['distribution_major_version']|int != 7) or ("'FAILED' in install_result.stderr")
|
||||||
environment:
|
environment:
|
||||||
http_proxy: "{{PROXY}}"
|
http_proxy: "{{PROXY}}"
|
||||||
https_proxy: "{{PROXY}}"
|
https_proxy: "{{PROXY}}"
|
||||||
|
@ -81,48 +96,15 @@
|
||||||
|
|
||||||
|
|
||||||
- name: Enable and start service HAProxy
|
- name: Enable and start service HAProxy
|
||||||
service:
|
systemd:
|
||||||
name: haproxy
|
name: haproxy
|
||||||
daemon_reload: yes
|
daemon_reload: yes
|
||||||
state: started
|
state: started
|
||||||
enabled: yes
|
enabled: yes
|
||||||
|
force: no
|
||||||
ignore_errors: yes
|
ignore_errors: yes
|
||||||
|
|
||||||
- name: Enable net.ipv4.tcp_syncookies
|
- name: Add syn_flood tasks
|
||||||
sysctl:
|
include: syn_flood.yml
|
||||||
name: net.ipv4.tcp_syncookies
|
when: (SYN_FLOOD is defined) and (SYN_FLOOD|length > 0)
|
||||||
value: '1'
|
|
||||||
sysctl_set: yes
|
|
||||||
state: present
|
|
||||||
reload: yes
|
|
||||||
when: (SYN_FLOOD is defined) and (SYN_FLOOD|length > 0)
|
|
||||||
|
|
||||||
|
|
||||||
- name: net.ipv4.conf.all.rp_filter
|
|
||||||
sysctl:
|
|
||||||
name: net.ipv4.conf.all.rp_filter
|
|
||||||
value: '1'
|
|
||||||
sysctl_set: yes
|
|
||||||
state: present
|
|
||||||
reload: yes
|
|
||||||
when: (SYN_FLOOD is defined) and (SYN_FLOOD|length > 0)
|
|
||||||
|
|
||||||
- name: Enable net.ipv4.tcp_max_syn_backlog
|
|
||||||
sysctl:
|
|
||||||
name: net.ipv4.tcp_max_syn_backlog
|
|
||||||
value: '1024'
|
|
||||||
sysctl_set: yes
|
|
||||||
state: present
|
|
||||||
reload: yes
|
|
||||||
when: (SYN_FLOOD is defined) and (SYN_FLOOD|length > 0)
|
|
||||||
|
|
||||||
- name: Enable net.ipv4.tcp_synack_retries
|
|
||||||
sysctl:
|
|
||||||
name: net.ipv4.tcp_synack_retries
|
|
||||||
value: '3'
|
|
||||||
sysctl_set: yes
|
|
||||||
state: present
|
|
||||||
reload: yes
|
|
||||||
when: (SYN_FLOOD is defined) and (SYN_FLOOD|length > 0)
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,36 @@
|
||||||
|
- name: Enable net.ipv4.tcp_syncookies
|
||||||
|
sysctl:
|
||||||
|
name: net.ipv4.tcp_syncookies
|
||||||
|
value: '1'
|
||||||
|
sysctl_set: yes
|
||||||
|
state: present
|
||||||
|
reload: yes
|
||||||
|
when: (SYN_FLOOD is defined) and (SYN_FLOOD|length > 0)
|
||||||
|
|
||||||
|
|
||||||
|
- name: net.ipv4.conf.all.rp_filter
|
||||||
|
sysctl:
|
||||||
|
name: net.ipv4.conf.all.rp_filter
|
||||||
|
value: '1'
|
||||||
|
sysctl_set: yes
|
||||||
|
state: present
|
||||||
|
reload: yes
|
||||||
|
when: (SYN_FLOOD is defined) and (SYN_FLOOD|length > 0)
|
||||||
|
|
||||||
|
- name: Enable net.ipv4.tcp_max_syn_backlog
|
||||||
|
sysctl:
|
||||||
|
name: net.ipv4.tcp_max_syn_backlog
|
||||||
|
value: '1024'
|
||||||
|
sysctl_set: yes
|
||||||
|
state: present
|
||||||
|
reload: yes
|
||||||
|
when: (SYN_FLOOD is defined) and (SYN_FLOOD|length > 0)
|
||||||
|
|
||||||
|
- name: Enable net.ipv4.tcp_synack_retries
|
||||||
|
sysctl:
|
||||||
|
name: net.ipv4.tcp_synack_retries
|
||||||
|
value: '3'
|
||||||
|
sysctl_set: yes
|
||||||
|
state: present
|
||||||
|
reload: yes
|
||||||
|
when: (SYN_FLOOD is defined) and (SYN_FLOOD|length > 0)
|
|
@ -6,9 +6,9 @@ After=network.target
|
||||||
EnvironmentFile=-/etc/default/haproxy
|
EnvironmentFile=-/etc/default/haproxy
|
||||||
EnvironmentFile=-/etc/sysconfig/haproxy
|
EnvironmentFile=-/etc/sysconfig/haproxy
|
||||||
Environment="CONFIG=/etc/haproxy/haproxy.cfg" "PIDFILE=/run/haproxy.pid" "EXTRAOPTS=-S /run/haproxy-master.sock"
|
Environment="CONFIG=/etc/haproxy/haproxy.cfg" "PIDFILE=/run/haproxy.pid" "EXTRAOPTS=-S /run/haproxy-master.sock"
|
||||||
ExecStartPre=/usr/sbin/haproxy -f $CONFIG -c -q $EXTRAOPTS
|
ExecStartPre=/sbin/haproxy -f $CONFIG -c -q $EXTRAOPTS
|
||||||
ExecStart=/usr/sbin/haproxy -Ws -f $CONFIG -p $PIDFILE $EXTRAOPTS
|
ExecStart=/sbin/haproxy -Ws -f $CONFIG -p $PIDFILE $EXTRAOPTS
|
||||||
ExecReload=/usr/sbin/haproxy -f $CONFIG -c -q $EXTRAOPTS
|
ExecReload=/sbin/haproxy -f $CONFIG -c -q $EXTRAOPTS
|
||||||
ExecReload=/bin/kill -USR2 $MAINPID
|
ExecReload=/bin/kill -USR2 $MAINPID
|
||||||
KillMode=mixed
|
KillMode=mixed
|
||||||
Restart=always
|
Restart=always
|
||||||
|
|
|
@ -0,0 +1,28 @@
|
||||||
|
---
|
||||||
|
- name: Creation config from template
|
||||||
|
template:
|
||||||
|
src: add_vrrp.conf.j2
|
||||||
|
dest: /etc/keepalived/keepalived.conf_temp
|
||||||
|
mode: 0644
|
||||||
|
force: no
|
||||||
|
|
||||||
|
|
||||||
|
- name: "Append keepalived.conf with content from temporary file"
|
||||||
|
shell: cat keepalived.conf_temp >> keepalived.conf
|
||||||
|
args:
|
||||||
|
chdir: "/etc/keepalived/"
|
||||||
|
|
||||||
|
|
||||||
|
- name: "Delete temporary file"
|
||||||
|
file:
|
||||||
|
path: /etc/keepalived/keepalived.conf_temp
|
||||||
|
state: absent
|
||||||
|
|
||||||
|
|
||||||
|
- name: Restart service keepalived
|
||||||
|
service:
|
||||||
|
name: keepalived
|
||||||
|
state: restarted
|
||||||
|
force: no
|
||||||
|
ignore_errors: yes
|
||||||
|
when: (RESTART is defined) and (RESTART|length > 0)
|
|
@ -0,0 +1,67 @@
|
||||||
|
---
|
||||||
|
- name: check if Keepalived is installed
|
||||||
|
yum:
|
||||||
|
list=keepalived
|
||||||
|
register: is_installed
|
||||||
|
|
||||||
|
- name: Keepalived has already installed
|
||||||
|
debug:
|
||||||
|
msg: "Keepalived has already installed"
|
||||||
|
when: is_installed.results|selectattr("yumstate", "match", "installed")|list|length != 0
|
||||||
|
|
||||||
|
- name: Exiting
|
||||||
|
meta: end_play
|
||||||
|
when: is_installed.results|selectattr("yumstate", "match", "installed")|list|length != 0
|
||||||
|
|
||||||
|
|
||||||
|
- name: install the latest version of Keepalived
|
||||||
|
yum:
|
||||||
|
name:
|
||||||
|
- keepalived
|
||||||
|
state: latest
|
||||||
|
when: (ansible_facts['os_family'] == "RedHat") or (ansible_facts['os_family'] == 'CentOS')
|
||||||
|
environment:
|
||||||
|
http_proxy: "{{PROXY}}"
|
||||||
|
https_proxy: "{{PROXY}}"
|
||||||
|
|
||||||
|
|
||||||
|
- name: Install keepalived
|
||||||
|
apt:
|
||||||
|
name:
|
||||||
|
- keepalived
|
||||||
|
state: present
|
||||||
|
when: (ansible_facts['os_family'] == 'Debian') or (ansible_facts['os_family'] == 'Ubuntu')
|
||||||
|
environment:
|
||||||
|
http_proxy: "{{PROXY}}"
|
||||||
|
https_proxy: "{{PROXY}}"
|
||||||
|
|
||||||
|
|
||||||
|
- name: Copy keepalived configuration in place.
|
||||||
|
template:
|
||||||
|
src: keepalived.conf.j2
|
||||||
|
dest: /etc/keepalived/keepalived.conf
|
||||||
|
mode: 0644
|
||||||
|
notify: restart keepalived
|
||||||
|
|
||||||
|
|
||||||
|
- name: Enable and start service keepalived
|
||||||
|
service:
|
||||||
|
name: keepalived
|
||||||
|
daemon_reload: yes
|
||||||
|
state: started
|
||||||
|
enabled: yes
|
||||||
|
ignore_errors: yes
|
||||||
|
|
||||||
|
|
||||||
|
- name: Enable net.ipv4.ip_forward
|
||||||
|
sysctl:
|
||||||
|
name: net.ipv4.ip_forward
|
||||||
|
value: '1'
|
||||||
|
sysctl_set: yes
|
||||||
|
state: present
|
||||||
|
reload: yes
|
||||||
|
|
||||||
|
|
||||||
|
- name: Add syn_flood tasks
|
||||||
|
include: ../../haproxy/tasks/syn_flood.yml
|
||||||
|
when: (SYN_FLOOD is defined) and (SYN_FLOOD|length > 0)
|
|
@ -1,39 +1,9 @@
|
||||||
---
|
---
|
||||||
- name: install the latest version of Keepalived
|
- name: Add installation tasks
|
||||||
yum:
|
include: install.yml
|
||||||
name:
|
when: (ADD_VRRP is not defined) or (ADD_VRRP != "1")
|
||||||
- keepalived
|
|
||||||
state: latest
|
|
||||||
when: ansible_facts['os_family'] == "RedHat" or ansible_facts['os_family'] == 'CentOS'
|
|
||||||
environment:
|
|
||||||
http_proxy: "{{PROXY}}"
|
|
||||||
https_proxy: "{{PROXY}}"
|
|
||||||
|
|
||||||
|
|
||||||
- name: Install keepalived
|
|
||||||
apt:
|
|
||||||
name:
|
|
||||||
- keepalived
|
|
||||||
state: present
|
|
||||||
when: ansible_facts['os_family'] == 'Debian' or ansible_facts['os_family'] == 'Ubuntu'
|
|
||||||
environment:
|
|
||||||
http_proxy: "{{PROXY}}"
|
|
||||||
https_proxy: "{{PROXY}}"
|
|
||||||
|
|
||||||
|
|
||||||
- name: Copy keepalived configuration in place.
|
|
||||||
template:
|
|
||||||
src: keepalived.conf.j2
|
|
||||||
dest: /etc/keepalived/keepalived.conf
|
|
||||||
mode: 0644
|
|
||||||
notify: restart keepalived
|
|
||||||
|
|
||||||
|
|
||||||
- name: Enable and start service keepalived
|
- name: Add add vrrp tasks
|
||||||
service:
|
include: add_vrrp.yml
|
||||||
name: keepalived
|
when: (ADD_VRRP is defined) and (ADD_VRRP|length > 0)
|
||||||
daemon_reload: yes
|
|
||||||
state: started
|
|
||||||
enabled: yes
|
|
||||||
ignore_errors: yes
|
|
||||||
|
|
|
@ -0,0 +1,25 @@
|
||||||
|
{% if MASTER == 'BACKUP' %}
|
||||||
|
{% set ID = '101' %}
|
||||||
|
{% else %}
|
||||||
|
{% set ID = '100' %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
vrrp_instance VI_{{ID}} {
|
||||||
|
state {{MASTER}}
|
||||||
|
interface {{ETH}}
|
||||||
|
virtual_router_id 101
|
||||||
|
priority 103
|
||||||
|
|
||||||
|
track_script {
|
||||||
|
chk_haproxy
|
||||||
|
}
|
||||||
|
|
||||||
|
advert_int 1
|
||||||
|
authentication {
|
||||||
|
auth_type PASS
|
||||||
|
auth_pass VerySecretPass2!
|
||||||
|
}
|
||||||
|
virtual_ipaddress {
|
||||||
|
{{IP}}
|
||||||
|
}
|
||||||
|
}
|
|
@ -26,4 +26,4 @@ vrrp_instance VI_1 {
|
||||||
virtual_ipaddress {
|
virtual_ipaddress {
|
||||||
{{IP}}
|
{{IP}}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
for ARGUMENT in "$@"
|
for ARGUMENT in "$@"
|
||||||
do
|
do
|
||||||
KEY=$(echo $ARGUMENT | cut -f1 -d=)
|
KEY=$(echo $ARGUMENT | cut -f1 -d=)
|
||||||
|
@ -21,21 +20,22 @@ do
|
||||||
*)
|
*)
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
|
||||||
export ANSIBLE_HOST_KEY_CHECKING=False
|
export ANSIBLE_HOST_KEY_CHECKING=False
|
||||||
|
export ANSIBLE_DISPLAY_SKIPPED_HOSTS=False
|
||||||
PWD=`pwd`
|
PWD=`pwd`
|
||||||
PWD=$PWD/scripts/ansible/
|
PWD=$PWD/scripts/ansible/
|
||||||
echo $HOST > $PWD/$HOST
|
echo $HOST > $PWD/$HOST
|
||||||
|
|
||||||
if [[ $KEY == "" ]]; then
|
if [[ $KEY == "" ]]; then
|
||||||
ansible-playbook $PWD/roles/haproxy.yml -e "ansible_user=$USER ansible_ssh_pass=$PASS variable_host=$HOST PROXY=$PROXY HAPVER=$HAPVER SOCK_PORT=$SOCK_PORT STAT_PORT=$STAT_PORT STATS_USER=$STATS_USER STATS_PASS=$STATS_PASS $STAT_FILE=$STAT_FILE SYN_FLOOD=$SYN_FLOOD" -i $PWD/$HOST > /tmp/install_haproxy.log
|
ansible-playbook $PWD/roles/haproxy.yml -e "ansible_user=$USER ansible_ssh_pass=$PASS variable_host=$HOST PROXY=$PROXY HAPVER=$HAPVER SOCK_PORT=$SOCK_PORT STAT_PORT=$STAT_PORT STATS_USER=$STATS_USER STATS_PASS=$STATS_PASS $STAT_FILE=$STAT_FILE SYN_FLOOD=$SYN_FLOOD" -i $PWD/$HOST
|
||||||
else
|
else
|
||||||
ansible-playbook $PWD/roles/haproxy.yml --key-file $KEY -e "ansible_user=$USER variable_host=$HOST PROXY=$PROXY HAPVER=$HAPVER SOCK_PORT=$SOCK_PORT STAT_PORT=$STAT_PORT STATS_USER=$STATS_USER STATS_PASS=$STATS_PASS STAT_FILE=$STAT_FILE SYN_FLOOD=$SYN_FLOOD" -i $PWD/$HOST > /tmp/install_haproxy.log
|
ansible-playbook $PWD/roles/haproxy.yml --key-file $KEY -e "ansible_user=$USER variable_host=$HOST PROXY=$PROXY HAPVER=$HAPVER SOCK_PORT=$SOCK_PORT STAT_PORT=$STAT_PORT STATS_USER=$STATS_USER STATS_PASS=$STATS_PASS STAT_FILE=$STAT_FILE SYN_FLOOD=$SYN_FLOOD" -i $PWD/$HOST
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ $? -eq 1 ]
|
if [ $? -gt 0 ]
|
||||||
then
|
then
|
||||||
echo "error: Can't install Haproxy service. Look log in the /tmp/install_haproxy.log<br /><br />"
|
echo "error: Can't install Haproxy service <br /><br />"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
echo "success"
|
|
||||||
rm -f $PWD/$HOST
|
rm -f $PWD/$HOST
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
for ARGUMENT in "$@"
|
for ARGUMENT in "$@"
|
||||||
do
|
do
|
||||||
KEY=$(echo $ARGUMENT | cut -f1 -d=)
|
KEY=$(echo $ARGUMENT | cut -f1 -d=)
|
||||||
|
@ -14,25 +13,28 @@ do
|
||||||
USER) USER=${VALUE} ;;
|
USER) USER=${VALUE} ;;
|
||||||
PASS) PASS=${VALUE} ;;
|
PASS) PASS=${VALUE} ;;
|
||||||
KEY) KEY=${VALUE} ;;
|
KEY) KEY=${VALUE} ;;
|
||||||
|
SYN_FLOOD) SYN_FLOOD=${VALUE} ;;
|
||||||
|
RESTART) RESTART=${VALUE} ;;
|
||||||
|
ADD_VRRP) ADD_VRRP=${VALUE} ;;
|
||||||
*)
|
*)
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
|
||||||
export ANSIBLE_HOST_KEY_CHECKING=False
|
export ANSIBLE_HOST_KEY_CHECKING=False
|
||||||
|
export ANSIBLE_DISPLAY_SKIPPED_HOSTS=False
|
||||||
PWD=`pwd`
|
PWD=`pwd`
|
||||||
PWD=$PWD/scripts/ansible/
|
PWD=$PWD/scripts/ansible/
|
||||||
echo $HOST > $PWD/$HOST
|
echo $HOST > $PWD/$HOST
|
||||||
|
|
||||||
if [[ $KEY == "" ]]; then
|
if [[ $KEY == "" ]]; then
|
||||||
ansible-playbook $PWD/roles/keepalived.yml -e "ansible_user=$USER ansible_ssh_pass=$PASS variable_host=$HOST PROXY=$PROXY MASTER=$MASTER ETH=$ETH IP=$IP" -i $PWD/$HOST > /tmp/install_keepalived.log
|
ansible-playbook $PWD/roles/keepalived.yml -e "ansible_user=$USER ansible_ssh_pass=$PASS variable_host=$HOST SYN_FLOOD=$SYN_FLOOD PROXY=$PROXY MASTER=$MASTER ETH=$ETH IP=$IP RESTART=$RESTART ADD_VRRP=$ADD_VRRP" -i $PWD/$HOST
|
||||||
else
|
else
|
||||||
ansible-playbook $PWD/roles/keepalived.yml --key-file $KEY -e "ansible_user=$USER variable_host=$HOST PROXY=$PROXY MASTER=$MASTER ETH=$ETH IP=$IP" -i $PWD/$HOST > /tmp/install_keepalived.log
|
ansible-playbook $PWD/roles/keepalived.yml --key-file $KEY -e "ansible_user=$USER variable_host=$HOST SYN_FLOOD=$SYN_FLOOD PROXY=$PROXY MASTER=$MASTER ETH=$ETH IP=$IP RESTART=$RESTART ADD_VRRP=$ADD_VRRP" -i $PWD/$HOST
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ $? -eq 1 ]
|
if [ $? -gt 0 ]
|
||||||
then
|
then
|
||||||
echo "error: Can't install keepalived service. Look log in the /tmp/install_keepalived.log<br /><br />"
|
echo "error: Can't install keepalived service <br /><br />"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
echo "success"
|
|
||||||
rm -f $PWD/$HOST
|
rm -f $PWD/$HOST
|
|
@ -894,7 +894,7 @@ def select_waf_servers_metrics(uuid, **kwargs):
|
||||||
|
|
||||||
def select_waf_metrics(serv, **kwargs):
|
def select_waf_metrics(serv, **kwargs):
|
||||||
con, cur = create_db.get_cur()
|
con, cur = create_db.get_cur()
|
||||||
sql = """ select * from (select * from waf_metrics where serv = '%s' order by `date` desc limit 30) order by `date`""" % serv
|
sql = """ select * from (select * from waf_metrics where serv = '%s' order by `date` desc limit 60) order by `date`""" % serv
|
||||||
try:
|
try:
|
||||||
cur.execute(sql)
|
cur.execute(sql)
|
||||||
except sqltool.Error as e:
|
except sqltool.Error as e:
|
||||||
|
@ -987,7 +987,7 @@ def delete_mentrics():
|
||||||
|
|
||||||
def select_metrics(serv, **kwargs):
|
def select_metrics(serv, **kwargs):
|
||||||
con, cur = create_db.get_cur()
|
con, cur = create_db.get_cur()
|
||||||
sql = """ select * from (select * from metrics where serv = '%s' order by `date` desc limit 30) order by `date` """ % serv
|
sql = """ select * from (select * from metrics where serv = '%s' order by `date` desc limit 60) order by `date` """ % serv
|
||||||
try:
|
try:
|
||||||
cur.execute(sql)
|
cur.execute(sql)
|
||||||
except sqltool.Error as e:
|
except sqltool.Error as e:
|
||||||
|
|
|
@ -58,10 +58,14 @@
|
||||||
<input type="hidden" value="{{ cfg }}.old" name="oldconfig">
|
<input type="hidden" value="{{ cfg }}.old" name="oldconfig">
|
||||||
<textarea name="config" class="config" rows="35" cols="100">{{ config }}</textarea>
|
<textarea name="config" class="config" rows="35" cols="100">{{ config }}</textarea>
|
||||||
<p>
|
<p>
|
||||||
|
{% if not keepalived %}
|
||||||
<button type="submit" value="test" name="save" class="btn btn-default">Just test</button>
|
<button type="submit" value="test" name="save" class="btn btn-default">Just test</button>
|
||||||
|
{% endif %}
|
||||||
<button type="submit" value="save" name="save" class="btn btn-default">Just save</button>
|
<button type="submit" value="save" name="save" class="btn btn-default">Just save</button>
|
||||||
<button type="submit" value="" name="" class="btn btn-default">Save and restart</button>
|
<button type="submit" value="" name="" class="btn btn-default">Save and restart</button>
|
||||||
|
{% if not keepalived %}
|
||||||
<button type="submit" value="reload" name="save" class="btn btn-default">Save and reload</button>
|
<button type="submit" value="reload" name="save" class="btn btn-default">Save and reload</button>
|
||||||
|
{% endif %}
|
||||||
</p>
|
</p>
|
||||||
</form>
|
</form>
|
||||||
{% if note %}
|
{% if note %}
|
||||||
|
|
|
@ -7,9 +7,9 @@
|
||||||
<tr class="overviewHead">
|
<tr class="overviewHead">
|
||||||
<td class="padding10 first-collumn">Master</td>
|
<td class="padding10 first-collumn">Master</td>
|
||||||
<td>Slave</td>
|
<td>Slave</td>
|
||||||
<td>VRRP interface</td>
|
<td><span title="Interface for VRRP addreess">Interface(?)</span></td>
|
||||||
<td>VRRP IP</td>
|
<td>VRRP IP</td>
|
||||||
<td><span title="Haproxy-WI will try install haproxy-1.18.5, if it does not work then haproxy-1.15">Install HAProxy(?)</span></td>
|
<td><span title="HAProxy-WI will try install HAProxy">HAProxy(?)</span></td>
|
||||||
<td>SYN flood protect</td>
|
<td>SYN flood protect</td>
|
||||||
<td></td>
|
<td></td>
|
||||||
</tr>
|
</tr>
|
||||||
|
@ -30,8 +30,8 @@
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</select>
|
</select>
|
||||||
</td>
|
</td>
|
||||||
<td>{{ input('interface') }}</td>
|
<td>{{ input('interface', size='7') }}</td>
|
||||||
<td>{{ input('vrrp-ip') }}</td>
|
<td>{{ input('vrrp-ip', size='14') }}</td>
|
||||||
<td>{{ checkbox('hap') }}</td>
|
<td>{{ checkbox('hap') }}</td>
|
||||||
<td>{{ checkbox('syn_flood') }}</td>
|
<td>{{ checkbox('syn_flood') }}</td>
|
||||||
<td>
|
<td>
|
||||||
|
@ -45,10 +45,10 @@
|
||||||
<tr class="overviewHead">
|
<tr class="overviewHead">
|
||||||
<td class="padding10 first-collumn">Master</td>
|
<td class="padding10 first-collumn">Master</td>
|
||||||
<td>Slave</td>
|
<td>Slave</td>
|
||||||
<td>VRRP interface</td>
|
<td><span title="Interface for VRRP addreess">Interface(?)</span></td>
|
||||||
<td>VRRP IP</td>
|
<td>VRRP IP</td>
|
||||||
<td><span title="If checked Haproxy-WI will restart Keepalived">Restart Keepalived(?)</span></td>
|
<td><span title="If checked HAProxy-WI will restart Keepalived">Restart(?)</span></td>
|
||||||
<td style="width: 11%;"></td>
|
<td style="width: 20%;"></td>
|
||||||
<td></td>
|
<td></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
|
@ -68,8 +68,8 @@
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</select>
|
</select>
|
||||||
</td>
|
</td>
|
||||||
<td>{{ input('interface-add') }}</td>
|
<td>{{ input('interface-add', size='7') }}</td>
|
||||||
<td>{{ input('vrrp-ip-add') }}</td>
|
<td>{{ input('vrrp-ip-add', size='14') }}</td>
|
||||||
<td>{{ checkbox('kp') }}</td>
|
<td>{{ checkbox('kp') }}</td>
|
||||||
<td></td>
|
<td></td>
|
||||||
<td>
|
<td>
|
||||||
|
@ -78,4 +78,11 @@
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
<div id="ajax"></div>
|
<div id="ajax"></div>
|
||||||
|
<script>
|
||||||
|
$( function() {
|
||||||
|
$( "select" ).selectmenu({
|
||||||
|
width: 180
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
{% endblock %}
|
{% endblock %}
|
36
inc/add.js
36
inc/add.js
|
@ -737,42 +737,6 @@ $( function() {
|
||||||
autoFocus: true,
|
autoFocus: true,
|
||||||
minLength: -1
|
minLength: -1
|
||||||
});
|
});
|
||||||
$( "#interface" ).autocomplete({
|
|
||||||
source: function( request, response ) {
|
|
||||||
$.ajax( {
|
|
||||||
url: "options.py",
|
|
||||||
data: {
|
|
||||||
showif:1,
|
|
||||||
serv: $("#master").val(),
|
|
||||||
token: $('#token').val()
|
|
||||||
},
|
|
||||||
success: function( data ) {
|
|
||||||
data = data.replace(/\s+/g,' ');
|
|
||||||
response(data.split(" "));
|
|
||||||
}
|
|
||||||
} );
|
|
||||||
},
|
|
||||||
autoFocus: true,
|
|
||||||
minLength: -1
|
|
||||||
});
|
|
||||||
$( "#interface-add" ).autocomplete({
|
|
||||||
source: function( request, response ) {
|
|
||||||
$.ajax( {
|
|
||||||
url: "options.py",
|
|
||||||
data: {
|
|
||||||
showif:1,
|
|
||||||
serv: $("#master-add").val(),
|
|
||||||
token: $('#token').val()
|
|
||||||
},
|
|
||||||
success: function( data ) {
|
|
||||||
data = data.replace(/\s+/g,' ');
|
|
||||||
response(data.split(" "));
|
|
||||||
}
|
|
||||||
} );
|
|
||||||
},
|
|
||||||
autoFocus: true,
|
|
||||||
minLength: -1
|
|
||||||
});
|
|
||||||
$( "#ssl_key_upload" ).click(function() {
|
$( "#ssl_key_upload" ).click(function() {
|
||||||
$('.alert-danger').remove();
|
$('.alert-danger').remove();
|
||||||
$.ajax( {
|
$.ajax( {
|
||||||
|
|
60
inc/users.js
60
inc/users.js
|
@ -14,6 +14,42 @@ jQuery.expr[':'].regex = function(elem, index, match) {
|
||||||
}
|
}
|
||||||
|
|
||||||
$( function() {
|
$( function() {
|
||||||
|
$( "#interface" ).autocomplete({
|
||||||
|
source: function( request, response ) {
|
||||||
|
$.ajax( {
|
||||||
|
url: "options.py",
|
||||||
|
data: {
|
||||||
|
showif:1,
|
||||||
|
serv: $("#master").val(),
|
||||||
|
token: $('#token').val()
|
||||||
|
},
|
||||||
|
success: function( data ) {
|
||||||
|
data = data.replace(/\s+/g,' ');
|
||||||
|
response(data.split(" "));
|
||||||
|
}
|
||||||
|
} );
|
||||||
|
},
|
||||||
|
autoFocus: true,
|
||||||
|
minLength: -1
|
||||||
|
});
|
||||||
|
$( "#interface-add" ).autocomplete({
|
||||||
|
source: function( request, response ) {
|
||||||
|
$.ajax( {
|
||||||
|
url: "options.py",
|
||||||
|
data: {
|
||||||
|
showif:1,
|
||||||
|
serv: $("#master-add").val(),
|
||||||
|
token: $('#token').val()
|
||||||
|
},
|
||||||
|
success: function( data ) {
|
||||||
|
data = data.replace(/\s+/g,' ');
|
||||||
|
response(data.split(" "));
|
||||||
|
}
|
||||||
|
} );
|
||||||
|
},
|
||||||
|
autoFocus: true,
|
||||||
|
minLength: -1
|
||||||
|
});
|
||||||
var ipformat = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;
|
var ipformat = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;
|
||||||
$('#create').click(function() {
|
$('#create').click(function() {
|
||||||
var hap = 0;
|
var hap = 0;
|
||||||
|
@ -48,14 +84,18 @@ $( function() {
|
||||||
type: "GET",
|
type: "GET",
|
||||||
success: function( data ) {
|
success: function( data ) {
|
||||||
data = data.replace(/\s+/g,' ');
|
data = data.replace(/\s+/g,' ');
|
||||||
if (data.indexOf('error') != '-1' || data.indexOf('alert') != '-1' || data.indexOf('Failed') != '-1') {
|
if (data.indexOf('error') != '-1' || data.indexOf('alert') != '-1' || data.indexOf('FAILED') != '-1') {
|
||||||
$("#ajax").html('<div class="alert alert-danger">'+data+'</data>');
|
$("#ajax").html('<div class="alert alert-danger">'+data+'</data>');
|
||||||
} else if (data.indexOf('info') != '-1' ){
|
} else if (data.indexOf('info') != '-1' ){
|
||||||
$("#ajax").html('<div class="alert alert-info">'+data+'</data>');
|
$("#ajax").html('<div class="alert alert-info">'+data+'</data>');
|
||||||
} else if (data.indexOf('success') != '-1' ){
|
} else if (data.indexOf('success') != '-1' ){
|
||||||
$('.alert-danger').remove();
|
$('.alert-danger').remove();
|
||||||
$("#ajax").html('<div class="alert alert-success">All is ready!</data>');
|
$("#ajax").html('<div class="alert alert-success">'+data+'</data>');
|
||||||
}
|
} else {
|
||||||
|
$('.alert-danger').remove();
|
||||||
|
$('.alert-warning').remove();
|
||||||
|
$("#ajax").html('<div class="alert alert-info">'+data+'</data>');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} );
|
} );
|
||||||
}
|
}
|
||||||
|
@ -92,8 +132,12 @@ $( function() {
|
||||||
$("#ajax").html('<div class="alert alert-danger">'+data+'</data>');
|
$("#ajax").html('<div class="alert alert-danger">'+data+'</data>');
|
||||||
} else if (data.indexOf('success') != '-1'){
|
} else if (data.indexOf('success') != '-1'){
|
||||||
$('.alert-danger').remove();
|
$('.alert-danger').remove();
|
||||||
$("#ajax").html('<div class="alert alert-success">All is ready!</data>');
|
$("#ajax").html('<div class="alert alert-success">'+data+'</data>');
|
||||||
}
|
} else {
|
||||||
|
$('.alert-danger').remove();
|
||||||
|
$('.alert-warning').remove();
|
||||||
|
$("#ajax").html('<div class="alert alert-info">'+data+'</data>');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} );
|
} );
|
||||||
}
|
}
|
||||||
|
@ -116,7 +160,7 @@ $( function() {
|
||||||
type: "GET",
|
type: "GET",
|
||||||
success: function( data ) {
|
success: function( data ) {
|
||||||
data = data.replace(/\s+/g,' ');
|
data = data.replace(/\s+/g,' ');
|
||||||
if (data.indexOf('error') != '-1' || data.indexOf('Failed') != '-1') {
|
if (data.indexOf('error') != '-1' || data.indexOf('FAILED') != '-1') {
|
||||||
$("#ajax").html('<div class="alert alert-danger">'+data+'</data>');
|
$("#ajax").html('<div class="alert alert-danger">'+data+'</data>');
|
||||||
} else if (data.indexOf('success') != '-1' ){
|
} else if (data.indexOf('success') != '-1' ){
|
||||||
$('.alert-danger').remove();
|
$('.alert-danger').remove();
|
||||||
|
@ -126,6 +170,10 @@ $( function() {
|
||||||
$('.alert-danger').remove();
|
$('.alert-danger').remove();
|
||||||
$('.alert-warning').remove();
|
$('.alert-warning').remove();
|
||||||
$("#ajax").html('<div class="alert alert-info">'+data+'</data>');
|
$("#ajax").html('<div class="alert alert-info">'+data+'</data>');
|
||||||
|
} else {
|
||||||
|
$('.alert-danger').remove();
|
||||||
|
$('.alert-warning').remove();
|
||||||
|
$("#ajax").html('<div class="alert alert-info">'+data+'</data>');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} );
|
} );
|
||||||
|
|
Loading…
Reference in New Issue