v6.3.12.0

Changelog: https://roxy-wi.org/changelog#6_3_12
pull/364/head
Aidaho 2023-05-17 20:38:13 +03:00
parent 9be5ce07f5
commit 08e415c3da
25 changed files with 1185 additions and 984 deletions

View File

@ -91,6 +91,7 @@ def index():
'keepalived/<id,hostname,ip>/action/restart': 'restart Keepalived service by id or hostname or ip. METHOD: GET',
'keepalived/<id,hostname,ip>/config': 'get Keepalived config from a server by id or hostname or ip. METHOD: GET',
'keepalived/<id,hostname,ip>/config': 'upload Keepalived config to a server by id or hostname or ip. Headers: action: save/reload/restart. Body must consist a whole Keepalived config. METHOD: POST',
'ha/create': 'Create HA cluster. Body be JSON body: master_ip: str, slave_ip: str, vrrp_ip: str, master_eth: str, slave_eth: str, virt_server: int, haproxy: int, nginx: int, syn_flood: int, return_to_master: int. METHOD: POST',
}
return dict(help=data)
@ -242,6 +243,13 @@ def add_acl(haproxy_id):
return api_funct.add_acl(haproxy_id)
@route('/ha/create', method=['POST'])
def create_ha():
if not check_login(required_service=3):
return dict(error=_error_auth)
return api_funct.install_keepalived()
@route('/<service>/<server_id>', method=['GET'])
@route('/<service>/<server_id:int>', method=['GET'])
def callback(server_id, service):

View File

@ -1,6 +1,8 @@
import os
import sys
import json
import random
from bottle import request
sys.path.append(os.path.join(sys.path[0], '/var/www/haproxy-wi/app/'))
@ -15,6 +17,7 @@ import modules.roxywi.logs as roxywi_logs
import modules.roxywi.user as roxywi_user
import modules.roxywi.common as roxywi_common
import modules.service.common as service_common
import modules.service.installation as service_mod
get_config_var = roxy_wi_tools.GetConfigVar()
@ -823,3 +826,67 @@ def create_server():
except Exception as e:
data = {'status': f'error: {e}'}
return dict(data)
def install_keepalived():
body = request.body.getvalue().decode('utf-8')
json_loads = json.loads(body)
master = json_loads['master_ip']
slave = json_loads['slave_ip']
vrrp_ip = json_loads['vrrp_ip']
eth = json_loads['master_eth']
eth_slave = json_loads['slave_eth']
haproxy = int(json_loads['haproxy'])
nginx = int(json_loads['nginx'])
virt_server = int(json_loads['virt_server'])
syn_flood = int(json_loads['syn_flood'])
return_to_master = int(json_loads['return_to_master'])
router_id = random.randint(1, 255)
data = {'status': dict()}
try:
service_mod.keepalived_master_install(master, eth, eth_slave, vrrp_ip, virt_server, syn_flood, return_to_master,
haproxy, nginx, router_id, 1)
except Exception as e:
data['status'][master] = {'keepalived': f'error: {e}'}
else:
data['status'][master] = {'keepalived': 'done'}
try:
service_mod.keepalived_slave_install(master, slave, eth, eth_slave, vrrp_ip, syn_flood, haproxy, nginx, router_id, 1)
except Exception as e:
data['status'][slave] = {'keepalived': f'error: {e}'}
else:
data['status'][slave] = {'keepalived': 'done'}
if haproxy:
try:
service_mod.install_haproxy(master)
except Exception as e:
data['status'][master] = {'haproxy': f'error: {e}'}
else:
data['status'][master] = {'haproxy': 'done'}
try:
service_mod.install_haproxy(slave)
except Exception as e:
data['status'][slave] = {'haproxy': f'error: {e}'}
else:
data['status'][slave] = {'haproxy': 'done'}
if nginx:
try:
service_mod.install_service(master, 'nginx', '0')
except Exception as e:
data['status'][master] = {'nginx': f'error: {e}'}
else:
data['status'][master] = {'nginx': 'done'}
try:
service_mod.install_service(slave, 'nginx', '0')
except Exception as e:
data['status'][slave] = {'nginx': f'error: {e}'}
else:
data['status'][slave] = {'nginx': 'done'}
return dict(data)

View File

@ -31,22 +31,28 @@ if all(v is None for v in [form.getvalue('upstream'), form.getvalue('generatecon
env = Environment(loader=FileSystemLoader('templates/'), autoescape=True)
template = env.get_template('add_nginx.html')
template = template.render(
role=user_params['role'], user=user_params['user'], selects=user_params['servers'], add=form.getvalue('add'), conf_add=form.getvalue('conf'),
user_services=user_params['user_services'], token=user_params['token'], lang=user_params['lang']
h2=1, role=user_params['role'], user=user_params['user'], selects=user_params['servers'], add=form.getvalue('add'),
conf_add=form.getvalue('conf'), user_services=user_params['user_services'], token=user_params['token'], lang=user_params['lang']
)
print(template)
elif form.getvalue('upstream') is not None:
nginx_dir = sql.get_setting('nginx_dir')
name = form.getlist('name')
new_upstream = form.getvalue('upstream')
balance = form.getvalue("balance")
ip = ''
port = ''
config_add = ''
servers_split = ''
if balance == 'round_robin':
balance = ''
else:
balance = f' {balance};\n'
if new_upstream is not None:
config_add = f'upstream {new_upstream} {{\n'
config_add += f' {form.getvalue("balance")};\n'
config_add += balance
config_name = f'upstream_{new_upstream}'
if form.getvalue('keepalive') is not None:

View File

@ -168,8 +168,7 @@ def default_values():
data_source = [
{'param': 'aws', 'name': 'AWS', 'optgroup': 'aws', 'section': 'provider', 'provider': 'aws', 'image': '/inc/images/provisioning/providers/aws.svg'},
{'param': 'do', 'name': 'DigitalOcearn', 'optgroup': 'do', 'section': 'provider', 'provider': 'do', 'image': '/inc/images/provisioning/providers/do.svg'},
{'param': 'gcore', 'name': 'G-Core Labs', 'optgroup': 'gcore', 'section': 'provider', 'provider': 'gcore',
'image': '/inc/images/provisioning/providers/gcore.svg'},
{'param': 'gcore', 'name': 'G-Core Labs', 'optgroup': 'gcore', 'section': 'provider', 'provider': 'gcore', 'image': '/inc/images/provisioning/providers/gcore.svg'},
{'param': 'us-east-1', 'name': 'N. Virginia', 'optgroup': 'US East', 'section': 'region', 'provider': 'aws',
'image': '/inc/images/provisioning/flags/us.svg'},
{'param': 'us-east-2', 'name': 'Ohio', 'optgroup': 'US East', 'section': 'region', 'provider': 'aws', 'image': '/inc/images/provisioning/flags/us.svg'},
@ -208,66 +207,56 @@ def default_values():
{'param': 'sfo1', 'name': 'San Francisco 1', 'optgroup': 'USA', 'section': 'region', 'provider': 'do', 'image': '/inc/images/provisioning/flags/us.svg'},
{'param': 'sfo2', 'name': 'San Francisco 2', 'optgroup': 'USA', 'section': 'region', 'provider': 'do', 'image': '/inc/images/provisioning/flags/us.svg'},
{'param': 'sfo3', 'name': 'San Francisco 3', 'optgroup': 'USA', 'section': 'region', 'provider': 'do', 'image': '/inc/images/provisioning/flags/us.svg'},
{'param': 'tor1', 'name': 'Toronto 1', 'optgroup': 'Canada', 'section': 'region', 'provider': 'do',
'image': '/inc/images/provisioning/flags/ca.svg'},
{'param': 'tor1', 'name': 'Toronto 1', 'optgroup': 'Canada', 'section': 'region', 'provider': 'do', 'image': '/inc/images/provisioning/flags/ca.svg'},
{'param': 'ams2', 'name': 'Amsterdam 2', 'optgroup': 'Europe', 'section': 'region', 'provider': 'do', 'image': '/inc/images/provisioning/flags/nl.svg'},
{'param': 'ams3', 'name': 'Amsterdam 3', 'optgroup': 'Europe', 'section': 'region', 'provider': 'do', 'image': '/inc/images/provisioning/flags/nl.svg'},
{'param': 'fra1', 'name': 'Frankfurt 1', 'optgroup': 'Europe', 'section': 'region', 'provider': 'do', 'image': '/inc/images/provisioning/flags/de.svg'},
{'param': 'lon1', 'name': 'London 1', 'optgroup': 'Europe', 'section': 'region', 'provider': 'do',
'image': '/inc/images/provisioning/flags/gb.svg'},
{'param': 'lon1', 'name': 'London 1', 'optgroup': 'Europe', 'section': 'region', 'provider': 'do', 'image': '/inc/images/provisioning/flags/gb.svg'},
{'param': 'sgp1', 'name': 'Singapore 1', 'optgroup': 'Asia', 'section': 'region', 'provider': 'do', 'image': '/inc/images/provisioning/flags/sg.svg'},
{'param': 'blr1', 'name': 'Bangalore 1', 'optgroup': 'Asia', 'section': 'region', 'provider': 'do', 'image': '/inc/images/provisioning/flags/bh.svg'},
{'param': '68', 'name': 'Chicago', 'optgroup': 'Americas', 'section': 'region', 'provider': 'gcore', 'image': '/inc/images/provisioning/flags/us.svg'},
{'param': '14', 'name': 'Manassas', 'optgroup': 'Americas', 'section': 'region', 'provider': 'gcore', 'image': '/inc/images/provisioning/flags/us.svg'},
{'param': '35', 'name': 'Santa-Clara', 'optgroup': 'Americas', 'section': 'region', 'provider': 'gcore', 'image': '/inc/images/provisioning/flags/us.svg'},
{'param': '91', 'name': 'Sao Paulo', 'optgroup': 'Americas', 'section': 'region', 'provider': 'gcore', 'image': '/inc/images/provisioning/flags/br.svg'},
{'param': '64', 'name': 'Hong-Kong', 'optgroup': 'Asia-Pacific', 'section': 'region', 'provider': 'gcore', 'image': '/inc/images/provisioning/flags/hk.svg'},
{'param': '18', 'name': 'Singapore', 'optgroup': 'Asia-Pacific', 'section': 'region', 'provider': 'gcore', 'image': '/inc/images/provisioning/flags/sg.svg'},
{'param': '88', 'name': 'Sydney', 'optgroup': 'Asia-Pacific', 'section': 'region', 'provider': 'gcore', 'image': '/inc/images/provisioning/flags/au.svg'},
{'param': '29', 'name': 'Tokyo', 'optgroup': 'Asia-Pacific', 'section': 'region', 'provider': 'gcore', 'image': '/inc/images/provisioning/flags/jp.svg'},
{'param': '46', 'name': 'Almaty', 'optgroup': 'EMEA', 'section': 'region', 'provider': 'gcore', 'image': '/inc/images/provisioning/flags/kz.svg'},
{'param': '26', 'name': 'Amsterdam', 'optgroup': 'EMEA', 'section': 'region', 'provider': 'gcore',
'image': '/inc/images/provisioning/flags/nl.svg'},
{'param': '26', 'name': 'Amsterdam', 'optgroup': 'EMEA', 'section': 'region', 'provider': 'gcore',
'image': '/inc/images/provisioning/flags/nl.svg'},
{'param': '38', 'name': 'Frankfurt', 'optgroup': 'EMEA', 'section': 'region', 'provider': 'gcore',
'image': '/inc/images/provisioning/flags/de.svg'},
{'param': '50', 'name': 'Istanbul', 'optgroup': 'EMEA', 'section': 'region', 'provider': 'gcore',
'image': '/inc/images/provisioning/flags/tr.svg'},
{'param': '26', 'name': 'Amsterdam', 'optgroup': 'EMEA', 'section': 'region', 'provider': 'gcore', 'image': '/inc/images/provisioning/flags/nl.svg'},
{'param': '51', 'name': 'Amsterdam-2', 'optgroup': 'EMEA', 'section': 'region', 'provider': 'gcore', 'image': '/inc/images/provisioning/flags/nl.svg'},
{'param': '38', 'name': 'Frankfurt', 'optgroup': 'EMEA', 'section': 'region', 'provider': 'gcore', 'image': '/inc/images/provisioning/flags/de.svg'},
{'param': '120', 'name': 'Darmstadt', 'optgroup': 'EMEA', 'section': 'region', 'provider': 'gcore', 'image': '/inc/images/provisioning/flags/de.svg'},
{'param': '50', 'name': 'Istanbul', 'optgroup': 'EMEA', 'section': 'region', 'provider': 'gcore', 'image': '/inc/images/provisioning/flags/tr.svg'},
{'param': '84', 'name': 'Johannesburg', 'optgroup': 'EMEA', 'section': 'region', 'provider': 'gcore', 'image': '/inc/images/provisioning/flags/za.svg'},
{'param': '6', 'name': 'Luxembourg', 'optgroup': 'EMEA', 'section': 'region', 'provider': 'gcore', 'image': '/inc/images/provisioning/flags/lu.svg'},
{'param': '76', 'name': 'Luxembourg-2', 'optgroup': 'EMEA', 'section': 'region', 'provider': 'gcore', 'image': '/inc/images/provisioning/flags/lu.svg'},
{'param': '56', 'name': 'Paris', 'optgroup': 'EMEA', 'section': 'region', 'provider': 'gcore', 'image': '/inc/images/provisioning/flags/fr.svg'},
{'param': '100', 'name': 'Paris-2', 'optgroup': 'EMEA', 'section': 'region', 'provider': 'gcore', 'image': '/inc/images/provisioning/flags/fr.svg'},
{'param': '80', 'name': 'Warsaw', 'optgroup': 'EMEA', 'section': 'region', 'provider': 'gcore', 'image': '/inc/images/provisioning/flags/pl.svg'},
{'param': '22', 'name': 'Khabarovsk', 'optgroup': 'Russia and CIS', 'section': 'region', 'provider': 'gcore', 'image': '/inc/images/provisioning/flags/ru.svg'},
{'param': '10', 'name': 'Moscow', 'optgroup': 'Russia and CIS', 'section': 'region', 'provider': 'gcore', 'image': '/inc/images/provisioning/flags/ru.svg'},
{'param': '42', 'name': 'Saint Petersburg', 'optgroup': 'Russia and CIS', 'section': 'region', 'provider': 'gcore', 'image': '/inc/images/provisioning/flags/ru.svg'},
{'param': '60', 'name': 'Yekaterinburg', 'optgroup': 'Russia and CIS', 'section': 'region', 'provider': 'gcore', 'image': '/inc/images/provisioning/flags/ru.svg'},
{'param': 'ubuntu-18-04', 'name': 'Ubuntu 18.04', 'optgroup': 'Ubuntu', 'section': 'image',
'provider': 'aws', 'image': '/inc/images/provisioning/oss/ubuntu.svg'},
{'param': 'ubuntu-20-04', 'name': 'Ubuntu 20.04', 'optgroup': 'Ubuntu', 'section': 'image',
'provider': 'aws', 'image': '/inc/images/provisioning/oss/ubuntu.svg'},
{'param': 'ubuntu-20-14', 'name': 'Ubuntu 20.14', 'optgroup': 'Ubuntu', 'section': 'image',
'provider': 'aws', 'image': '/inc/images/provisioning/oss/ubuntu.svg'},
{'param': 'ubuntu-22-04', 'name': 'Ubuntu 22.04', 'optgroup': 'Ubuntu', 'section': 'image',
'provider': 'aws', 'image': '/inc/images/provisioning/oss/ubuntu.svg'},
{'param': 'centos-7', 'name': 'CentOS 7', 'optgroup': 'CentOS', 'section': 'image',
'provider': 'aws', 'image': '/inc/images/provisioning/oss/centos.svg'},
{'param': 'centos-8', 'name': 'CentOS 8', 'optgroup': 'CentOS', 'section': 'image',
'provider': 'aws', 'image': '/inc/images/provisioning/oss/centos.svg'},
{'param': 'centos-9', 'name': 'CentOS 9', 'optgroup': 'CentOS', 'section': 'image',
'provider': 'aws', 'image': '/inc/images/provisioning/oss/centos.svg'},
{'param': 'debian-9', 'name': 'Debian 9', 'optgroup': 'Debian', 'section': 'image', 'provider': 'aws',
'image': '/inc/images/provisioning/oss/debian.svg'},
{'param': 'debian-10', 'name': 'Debian 10', 'optgroup': 'Debian', 'section': 'image', 'provider': 'aws',
'image': '/inc/images/provisioning/oss/debian.svg'},
{'param': 'debian-11', 'name': 'Debian 11', 'optgroup': 'Debian', 'section': 'image', 'provider': 'aws',
'image': '/inc/images/provisioning/oss/debian.svg'},
{'param': 'amazon-2_lts', 'name': 'Amazon Linux 2', 'optgroup': 'Amazon Linux', 'section': 'image', 'provider': 'aws',
'image': '/inc/images/provisioning/providers/aws.svg'},
{'param': '116', 'name': 'Dubai', 'optgroup': 'EMEA', 'section': 'region', 'provider': 'gcore', 'image': '/inc/images/provisioning/flags/ae.svg'},
{'param': '22', 'name': 'Khabarovsk', 'optgroup': 'Russia and CIS', 'section': 'region', 'provider': 'edge', 'image': '/inc/images/provisioning/flags/ru.svg'},
{'param': '10', 'name': 'Moscow', 'optgroup': 'Russia and CIS', 'section': 'region', 'provider': 'edge', 'image': '/inc/images/provisioning/flags/ru.svg'},
{'param': '42', 'name': 'Saint Petersburg', 'optgroup': 'Russia and CIS', 'section': 'region', 'provider': 'edge', 'image': '/inc/images/provisioning/flags/ru.svg'},
{'param': '60', 'name': 'Yekaterinburg', 'optgroup': 'Russia and CIS', 'section': 'region', 'provider': 'edge', 'image': '/inc/images/provisioning/flags/ru.svg'},
{'param': '72', 'name': 'Novosibirsk', 'optgroup': 'Russia and CIS', 'section': 'region', 'provider': 'edge', 'image': '/inc/images/provisioning/flags/ru.svg'},
{'param': 'ubuntu-18-04', 'name': 'Ubuntu 18.04', 'optgroup': 'Ubuntu', 'section': 'image', 'provider': 'aws', 'image': '/inc/images/provisioning/oss/ubuntu.svg'},
{'param': 'ubuntu-20-04', 'name': 'Ubuntu 20.04', 'optgroup': 'Ubuntu', 'section': 'image', 'provider': 'aws', 'image': '/inc/images/provisioning/oss/ubuntu.svg'},
{'param': 'ubuntu-20-14', 'name': 'Ubuntu 20.14', 'optgroup': 'Ubuntu', 'section': 'image', 'provider': 'aws', 'image': '/inc/images/provisioning/oss/ubuntu.svg'},
{'param': 'ubuntu-22-04', 'name': 'Ubuntu 22.04', 'optgroup': 'Ubuntu', 'section': 'image', 'provider': 'aws', 'image': '/inc/images/provisioning/oss/ubuntu.svg'},
{'param': 'ubuntu-23-04', 'name': 'Ubuntu 23.04', 'optgroup': 'Ubuntu', 'section': 'image', 'provider': 'aws', 'image': '/inc/images/provisioning/oss/ubuntu.svg'},
{'param': 'centos-7', 'name': 'CentOS 7', 'optgroup': 'CentOS', 'section': 'image', 'provider': 'aws', 'image': '/inc/images/provisioning/oss/centos.svg'},
{'param': 'centos-8', 'name': 'CentOS 8', 'optgroup': 'CentOS', 'section': 'image', 'provider': 'aws', 'image': '/inc/images/provisioning/oss/centos.svg'},
{'param': 'centos-9', 'name': 'CentOS 9', 'optgroup': 'CentOS', 'section': 'image', 'provider': 'aws', 'image': '/inc/images/provisioning/oss/centos.svg'},
{'param': 'debian-9', 'name': 'Debian 9', 'optgroup': 'Debian', 'section': 'image', 'provider': 'aws', 'image': '/inc/images/provisioning/oss/debian.svg'},
{'param': 'debian-10', 'name': 'Debian 10', 'optgroup': 'Debian', 'section': 'image', 'provider': 'aws', 'image': '/inc/images/provisioning/oss/debian.svg'},
{'param': 'debian-11', 'name': 'Debian 11', 'optgroup': 'Debian', 'section': 'image', 'provider': 'aws', 'image': '/inc/images/provisioning/oss/debian.svg'},
{'param': 'amazon-2_lts', 'name': 'Amazon Linux 2', 'optgroup': 'Amazon Linux', 'section': 'image', 'provider': 'aws', 'image': '/inc/images/provisioning/providers/aws.svg'},
{'param': 'ubuntu-18-04-x64', 'name': 'Ubuntu 18.04', 'optgroup': 'Ubuntu', 'section': 'image', 'provider': 'do', 'image': '/inc/images/provisioning/oss/ubuntu.svg'},
{'param': 'ubuntu-20-04-x64', 'name': 'Ubuntu 20.04', 'optgroup': 'Ubuntu', 'section': 'image', 'provider': 'do', 'image': '/inc/images/provisioning/oss/ubuntu.svg'},
{'param': 'ubuntu-20-14-x64', 'name': 'Ubuntu 20.14', 'optgroup': 'Ubuntu', 'section': 'image', 'provider': 'do', 'image': '/inc/images/provisioning/oss/ubuntu.svg'},
{'param': 'ubuntu-22-04-x64', 'name': 'Ubuntu 22.04', 'optgroup': 'Ubuntu', 'section': 'image', 'provider': 'do', 'image': '/inc/images/provisioning/oss/ubuntu.svg'},
{'param': 'ubuntu-23-04-x64', 'name': 'Ubuntu 23.04', 'optgroup': 'Ubuntu', 'section': 'image', 'provider': 'do', 'image': '/inc/images/provisioning/oss/ubuntu.svg'},
{'param': 'centos-7-x64', 'name': 'CentOS 7', 'optgroup': 'CentOS', 'section': 'image', 'provider': 'do', 'image': '/inc/images/provisioning/oss/centos.svg'},
{'param': 'centos-stream-8-x64', 'name': 'CentOS 8 Stream', 'optgroup': 'CentOS', 'section': 'image', 'provider': 'do', 'image': '/inc/images/provisioning/oss/centos.svg'},
{'param': 'centos-stream-9-x64', 'name': 'CentOS 9 Stream', 'optgroup': 'CentOS', 'section': 'image', 'provider': 'do', 'image': '/inc/images/provisioning/oss/centos.svg'},
@ -279,7 +268,9 @@ def default_values():
{'param': 'ubuntu-18.04-x64', 'name': 'Ubuntu 18.04', 'optgroup': 'Ubuntu', 'section': 'image', 'provider': 'gcore', 'image': '/inc/images/provisioning/oss/ubuntu.svg'},
{'param': 'ubuntu-20.04-x64', 'name': 'Ubuntu 20.04', 'optgroup': 'Ubuntu', 'section': 'image', 'provider': 'gcore', 'image': '/inc/images/provisioning/oss/ubuntu.svg'},
{'param': 'ubuntu-20.10-x64', 'name': 'Ubuntu 20.10', 'optgroup': 'Ubuntu', 'section': 'image', 'provider': 'gcore', 'image': '/inc/images/provisioning/oss/ubuntu.svg'},
{'param': 'ubuntu-22.04-x64', 'name': 'Ubuntu 22.02', 'optgroup': 'Ubuntu', 'section': 'image', 'provider': 'gcore', 'image': '/inc/images/provisioning/oss/ubuntu.svg'},
{'param': 'ubuntu-22.04-x64', 'name': 'Ubuntu 22.04', 'optgroup': 'Ubuntu', 'section': 'image', 'provider': 'gcore', 'image': '/inc/images/provisioning/oss/ubuntu.svg'},
{'param': 'ubuntu-22.10-x64', 'name': 'Ubuntu 22.10', 'optgroup': 'Ubuntu', 'section': 'image', 'provider': 'gcore', 'image': '/inc/images/provisioning/oss/ubuntu.svg'},
{'param': 'ubuntu-23.04-x64', 'name': 'Ubuntu 23.04', 'optgroup': 'Ubuntu', 'section': 'image', 'provider': 'gcore', 'image': '/inc/images/provisioning/oss/ubuntu.svg'},
{'param': 'centos-7-1811-x64-qcow2', 'name': 'CentOS 7.6', 'optgroup': 'CentOS', 'section': 'image', 'provider': 'gcore', 'image': '/inc/images/provisioning/oss/centos.svg'},
{'param': 'centos-7-2003-x64-qcow2', 'name': 'CentOS 7.8', 'optgroup': 'CentOS', 'section': 'image', 'provider': 'gcore', 'image': '/inc/images/provisioning/oss/centos.svg'},
{'param': 'centos8-stream-0210-x64', 'name': 'CentOS 8.4', 'optgroup': 'CentOS', 'section': 'image', 'provider': 'gcore', 'image': '/inc/images/provisioning/oss/centos.svg'},
@ -290,12 +281,9 @@ def default_values():
{'param': 'debian-9.7-x64-qcow2', 'name': 'Debian 9.7', 'optgroup': 'Debian', 'section': 'image', 'provider': 'gcore', 'image': '/inc/images/provisioning/oss/debian.svg'},
{'param': 'debian-10.1-x64-qcow2', 'name': 'Debian 10.1', 'optgroup': 'Debian', 'section': 'image', 'provider': 'gcore', 'image': '/inc/images/provisioning/oss/debian.svg'},
{'param': 'debian-10.3-x64-qcow2', 'name': 'Debian 10.3', 'optgroup': 'Debian', 'section': 'image', 'provider': 'gcore', 'image': '/inc/images/provisioning/oss/debian.svg'},
{'param': 'debian-11.generic-x64-qcow2', 'name': 'Debian 11', 'optgroup': 'Debian', 'section': 'image', 'provider': 'gcore',
'image': '/inc/images/provisioning/oss/debian.svg'},
{'param': 'windows-server-2019', 'name': 'Windows 2019', 'optgroup': 'Windows', 'section': 'image',
'provider': 'gcore', 'image': '/inc/images/provisioning/oss/windows.svg'},
{'param': 'windows-server-2022', 'name': 'Windows 2022', 'optgroup': 'Windows', 'section': 'image',
'provider': 'gcore', 'image': '/inc/images/provisioning/oss/windows.svg'},
{'param': 'debian-11.generic-x64-qcow2', 'name': 'Debian 11', 'optgroup': 'Debian', 'section': 'image', 'provider': 'gcore', 'image': '/inc/images/provisioning/oss/debian.svg'},
{'param': 'windows-server-2019', 'name': 'Windows 2019', 'optgroup': 'Windows', 'section': 'image', 'provider': 'gcore', 'image': '/inc/images/provisioning/oss/windows.svg'},
{'param': 'windows-server-2022', 'name': 'Windows 2022', 'optgroup': 'Windows', 'section': 'image', 'provider': 'gcore', 'image': '/inc/images/provisioning/oss/windows.svg'},
{'param': 'sles15-SP2', 'name': 'SLES 15-SP2', 'optgroup': 'SUSE', 'section': 'image', 'provider': 'gcore', 'image': '/inc/images/provisioning/oss/suse.svg'},
{'param': 's-1vcpu-1gb', 'name': 's-1vcpu-1gb', 'optgroup': 'Base', 'section': 'size', 'provider': 'do'},
{'param': 's-2vcpu-2gb', 'name': 's-2vcpu-2gb', 'optgroup': 'Base', 'section': 'size', 'provider': 'do'},
@ -828,9 +816,20 @@ def update_db_v_6_3_11():
print("Updating... DB has been updated to version 6.3.11")
def update_db_v_6_3_12():
try:
ProvisionParam.delete().where(
(ProvisionParam.provider == 'gcore') *
(ProvisionParam.optgroup == 'Russia and CIS')
).execute()
except Exception as e:
print("An error occurred:", e)
else:
print("Updating... DB has been updated to version 6.3.12")
def update_ver():
try:
Version.update(version='6.3.11.0').execute()
Version.update(version='6.3.12.0').execute()
except Exception:
print('Cannot update version')
@ -860,6 +859,7 @@ def update_all():
update_db_v_6_3_8()
update_db_v_6_3_9()
update_db_v_6_3_11()
update_db_v_6_3_12()
update_ver()

View File

@ -2,6 +2,8 @@ import os
import re
import http.cookies
from jinja2 import Environment, FileSystemLoader
import modules.db.sql as sql
import modules.server.ssh as mod_ssh
import modules.server.server as server_mod
@ -84,6 +86,10 @@ def upload_and_restart(server_ip: str, cfg: str, **kwargs):
config_path = sql.get_setting('haproxy_config_path')
file_format = 'cfg'
if '..' in config_path:
print('error: nice try')
return None
tmp_file = f"{sql.get_setting('tmp_config_path')}/{config_date}.{file_format}"
is_dockerized = sql.select_service_setting(server_id, service, 'dockerized')
@ -372,8 +378,6 @@ def show_finding_in_config(stdout: str, **kwargs) -> str:
def show_compare_config(server_ip: str) -> None:
from jinja2 import Environment, FileSystemLoader
env = Environment(loader=FileSystemLoader('templates/'), autoescape=True)
template = env.get_template('ajax/show_compare_configs.html')
left = form.getvalue('left')
@ -395,8 +399,6 @@ def show_compare_config(server_ip: str) -> None:
def compare_config() -> None:
from jinja2 import Environment, FileSystemLoader
left = common.checkAjaxInput(form.getvalue('left'))
right = common.checkAjaxInput(form.getvalue('right'))
lang = roxywi_common.get_user_lang()
@ -423,8 +425,6 @@ def compare_config() -> None:
def show_config(server_ip: str) -> None:
from jinja2 import Environment, FileSystemLoader
cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE"))
user_uuid = cookie.get('uuid')
group_id = cookie.get('group')
@ -449,6 +449,10 @@ def show_config(server_ip: str) -> None:
configs_dir = get_config_var.get_config_var('configs', 'haproxy_save_configs_dir')
cfg = '.cfg'
if '..' in configs_dir:
print('error: nice try')
return None
if form.getvalue('configver') is None:
cfg = f"{configs_dir}{server_ip}-{get_date.return_date('config')}{cfg}"
try:
@ -472,16 +476,9 @@ def show_config(server_ip: str) -> None:
extensions=["jinja2.ext.loopcontrols", "jinja2.ext.do"])
template = env.get_template('ajax/config_show.html')
template = template.render(conf=conf,
serv=server_ip,
configver=form.getvalue('configver'),
role=role_id,
service=service,
config_file_name=config_file_name,
is_serv_protected=is_serv_protected,
is_restart=is_restart,
lang=lang,
hostname=hostname)
template = template.render(conf=conf, serv=server_ip, configver=form.getvalue('configver'), role=role_id,
service=service, config_file_name=config_file_name, is_serv_protected=is_serv_protected,
is_restart=is_restart, lang=lang, hostname=hostname)
print(template)
conf.close()
@ -490,8 +487,6 @@ def show_config(server_ip: str) -> None:
def show_config_files(server_ip: str) -> None:
from jinja2 import Environment, FileSystemLoader
service = form.getvalue('service')
service_config_dir = sql.get_setting(f'{service}_dir')
return_files = server_mod.get_remote_files(server_ip, service_config_dir, 'conf')
@ -512,3 +507,34 @@ def show_config_files(server_ip: str) -> None:
template = template.render(serv=server_ip, service=service, return_files=return_files, lang=lang,
config_file_name=config_file_name, path_dir=service_config_dir)
print(template)
def list_of_versions(server_ip: str, service: str) -> None:
if service not in ('haproxy', 'nginx', 'keepalived', 'apache'):
print('error: wrong service')
return None
configver = common.checkAjaxInput(form.getvalue('configver'))
for_delver = common.checkAjaxInput(form.getvalue('for_delver'))
users = sql.select_users()
service_desc = sql.select_service(service)
configs = sql.select_config_version(server_ip, service_desc.slug)
lang = roxywi_common.get_user_lang()
action = f'versions.py?service={service_desc.slug}'
if service in ('haproxy', 'nginx', 'apache'):
configs_dir = get_config_var.get_config_var('configs', f'{service_desc.service}_save_configs_dir')
else:
configs_dir = get_config_var.get_config_var('configs', 'kp_save_configs_dir')
if service == 'haproxy':
files = roxywi_common.get_files()
else:
files = roxywi_common.get_files(configs_dir, 'conf')
env = Environment(loader=FileSystemLoader('templates/'), autoescape=True, extensions=["jinja2.ext.loopcontrols", "jinja2.ext.do"])
template = env.get_template('ajax/show_list_version.html')
template = template.render(serv=server_ip, service=service, action=action, return_files=files, configver=configver,
for_delver=for_delver, configs=configs, users=users, lang=lang)
print(template)

View File

@ -0,0 +1 @@
NAME = 'roxy-wi-provisioning-modules'

View File

@ -0,0 +1,133 @@
import modules.db.sql as sql
import modules.common.common as common
import modules.server.server as server_mod
import modules.provisioning.common as prov_common
form = common.form
def validate() -> None:
if form.getvalue('awsvalidate'):
workspace = form.getvalue('awsvalidate')
group = form.getvalue('aws_create_group')
else:
workspace = form.getvalue('awseditvalidate')
group = form.getvalue('aws_edit_group')
cmd = f'cd scripts/terraform/ && sudo terraform plan -no-color -input=false -target=module.aws_module -var-file vars/{workspace}_{group}_aws.tfvars'
output, stderr = server_mod.subprocess_execute(cmd)
if stderr != '':
print('error: ' + stderr)
else:
print('ok')
def new_workspace() -> None:
workspace = form.getvalue('awsworkspace')
group = form.getvalue('aws_create_group')
provider = form.getvalue('aws_create_provider')
region = form.getvalue('aws_create_regions')
size = form.getvalue('aws_create_size')
oss = form.getvalue('aws_create_oss')
ssh_name = form.getvalue('aws_create_ssh_name')
volume_size = form.getvalue('aws_create_volume_size')
volume_type = form.getvalue('aws_create_volume_type')
delete_on_termination = form.getvalue('aws_create_delete_on_termination')
floating_ip = form.getvalue('aws_create_floating_net')
firewall = form.getvalue('aws_create_firewall')
public_ip = form.getvalue('aws_create_public_ip')
cmd = f'cd scripts/terraform/ && sudo terraform workspace new {workspace}_{group}_aws'
output, stderr = server_mod.subprocess_execute(cmd)
if stderr != '':
prov_common.show_error(stderr, group, workspace, provider)
else:
try:
if sql.add_server_aws(
region, size, public_ip, floating_ip, volume_size, ssh_name, workspace, oss, firewall,
provider, group, 'Creating', delete_on_termination, volume_type
):
prov_common.show_new_server(workspace, group, 'aws')
except Exception as e:
print(e)
def edit_workspace() -> None:
workspace = form.getvalue('awseditworkspace')
group = form.getvalue('aws_editing_group')
provider = form.getvalue('aws_editing_provider')
region = form.getvalue('aws_editing_regions')
size = form.getvalue('aws_editing_size')
oss = form.getvalue('aws_editing_oss')
ssh_name = form.getvalue('aws_editing_ssh_name')
volume_size = form.getvalue('aws_editing_volume_size')
volume_type = form.getvalue('aws_editing_volume_type')
delete_on_termination = form.getvalue('aws_editing_delete_on_termination')
floating_ip = form.getvalue('aws_editing_floating_net')
firewall = form.getvalue('aws_editing_firewall')
public_ip = form.getvalue('aws_editing_public_ip')
server_id = form.getvalue('server_id')
try:
if sql.update_server_aws(
region, size, public_ip, floating_ip, volume_size, ssh_name, workspace, oss, firewall,
provider, group, 'Editing', server_id, delete_on_termination, volume_type
):
try:
cmd = f'cd scripts/terraform/ && sudo terraform workspace select {workspace}_{group}_aws'
output, stderr = server_mod.subprocess_execute(cmd)
except Exception as e:
print(f'error: {e}')
if stderr != '':
prov_common.show_error(stderr, group, workspace, provider)
else:
print('ok')
except Exception as e:
print(e)
def create_vars() -> None:
if form.getvalue('awsvars'):
awsvars = common.checkAjaxInput(form.getvalue('awsvars'))
group = common.checkAjaxInput(form.getvalue('aws_create_group'))
provider = common.checkAjaxInput(form.getvalue('aws_create_provider'))
region = common.checkAjaxInput(form.getvalue('aws_create_regions'))
size = common.checkAjaxInput(form.getvalue('aws_create_size'))
oss = common.checkAjaxInput(form.getvalue('aws_create_oss'))
ssh_name = common.checkAjaxInput(form.getvalue('aws_create_ssh_name'))
volume_size = common.checkAjaxInput(form.getvalue('aws_create_volume_size'))
volume_type = common.checkAjaxInput(form.getvalue('aws_create_volume_type'))
delete_on_termination = common.checkAjaxInput(form.getvalue('aws_create_delete_on_termination'))
floating_ip = common.checkAjaxInput(form.getvalue('aws_create_floating_net'))
firewall = common.checkAjaxInput(form.getvalue('aws_create_firewall'))
public_ip = common.checkAjaxInput(form.getvalue('aws_create_public_ip'))
else:
awsvars = common.checkAjaxInput(form.getvalue('awseditvars'))
group = common.checkAjaxInput(form.getvalue('aws_editing_group'))
provider = common.checkAjaxInput(form.getvalue('aws_editing_provider'))
region = common.checkAjaxInput(form.getvalue('aws_editing_regions'))
size = common.checkAjaxInput(form.getvalue('aws_editing_size'))
oss = common.checkAjaxInput(form.getvalue('aws_editing_oss'))
ssh_name = common.checkAjaxInput(form.getvalue('aws_editing_ssh_name'))
volume_size = common.checkAjaxInput(form.getvalue('aws_editing_volume_size'))
volume_type = common.checkAjaxInput(form.getvalue('aws_editing_volume_type'))
delete_on_termination = common.checkAjaxInput(form.getvalue('aws_editing_delete_on_termination'))
floating_ip = common.checkAjaxInput(form.getvalue('aws_editing_floating_net'))
firewall = common.checkAjaxInput(form.getvalue('aws_editing_firewall'))
public_ip = common.checkAjaxInput(form.getvalue('aws_editing_public_ip'))
aws_key, aws_secret = sql.select_aws_provider(provider)
cmd = f'cd scripts/terraform/ && sudo ansible-playbook var_generator.yml -i inventory -e "region={region} ' \
f'group={group} size={size} os={oss} floating_ip={floating_ip} volume_size={volume_size} server_name={awsvars} ' \
f'AWS_ACCESS_KEY={aws_key} AWS_SECRET_KEY={aws_secret} firewall={firewall} public_ip={public_ip} ' \
f'ssh_name={ssh_name} delete_on_termination={delete_on_termination} volume_type={volume_type} cloud=aws"'
output, stderr = server_mod.subprocess_execute(cmd)
if stderr != '':
print(f'error: {stderr}')
else:
print('ok')

View File

@ -0,0 +1,31 @@
from jinja2 import Environment, FileSystemLoader
import modules.db.sql as sql
import modules.common.common as common
import modules.roxywi.common as roxywi_common
form = common.form
def show_error(stderr: str, group: str, workspace: str, provider: str) -> None:
stderr = stderr.strip()
stderr = repr(stderr)
stderr = stderr.replace("'", "")
stderr = stderr.replace("\'", "")
sql.update_provisioning_server_status('Error', group, workspace, provider)
sql.update_provisioning_server_error(stderr, group, workspace, provider)
print('error: ' + stderr)
def show_new_server(workspace: str, group: str, cloud: str) -> None:
user_params = roxywi_common.get_users_params()
new_server = sql.select_provisioned_servers(new=workspace, group=group, type=cloud)
params = sql.select_provisioning_params()
lang = roxywi_common.get_user_lang()
providers = sql.select_providers(group)
env = Environment(extensions=["jinja2.ext.do"], loader=FileSystemLoader('templates'))
template = env.get_template('ajax/provisioning/provisioned_servers.html')
template = template.render(servers=new_server, groups=sql.select_groups(), user_group=group, providers=providers,
role=user_params['role'], adding=1, params=params, lang=lang)
print(template)

View File

@ -0,0 +1,125 @@
import modules.db.sql as sql
import modules.common.common as common
import modules.server.server as server_mod
import modules.provisioning.common as prov_common
form = common.form
def validate() -> None:
if form.getvalue('dovalidate'):
workspace = form.getvalue('dovalidate')
group = form.getvalue('do_create_group')
else:
workspace = form.getvalue('doeditvalidate')
group = form.getvalue('do_edit_group')
cmd = f'cd scripts/terraform/ && sudo terraform plan -no-color -input=false -target=module.do_module -var-file vars/{workspace}_{group}_do.tfvars'
output, stderr = server_mod.subprocess_execute(cmd)
if stderr != '':
print(f'error: {stderr}')
else:
print('ok')
def new_workspace() -> None:
workspace = form.getvalue('doworkspace')
group = form.getvalue('do_create_group')
provider = form.getvalue('do_create_provider')
region = form.getvalue('do_create_regions')
size = form.getvalue('do_create_size')
oss = form.getvalue('do_create_oss')
ssh_name = form.getvalue('do_create_ssh_name')
ssh_ids = form.getvalue('do_create_ssh_ids')
backup = form.getvalue('do_create_backup')
privet_net = form.getvalue('do_create_private_net')
floating_ip = form.getvalue('do_create_floating_net')
monitoring = form.getvalue('do_create_monitoring')
firewall = form.getvalue('do_create_firewall')
cmd = f'cd scripts/terraform/ && sudo terraform workspace new {workspace}_{group}_do'
output, stderr = server_mod.subprocess_execute(cmd)
if stderr != '':
prov_common.show_error(stderr, group, workspace, provider)
else:
if sql.add_server_do(
region, size, privet_net, floating_ip, ssh_ids, ssh_name, workspace, oss, firewall, monitoring,
backup, provider, group, 'Creating'
):
prov_common.show_new_server(workspace, group, 'do')
def edit_workspace() -> None:
workspace = form.getvalue('doeditworkspace')
group = form.getvalue('do_edit_group')
provider = form.getvalue('do_edit_provider')
region = form.getvalue('do_edit_regions')
size = form.getvalue('do_edit_size')
oss = form.getvalue('do_edit_oss')
ssh_name = form.getvalue('do_edit_ssh_name')
ssh_ids = form.getvalue('do_edit_ssh_ids')
backup = form.getvalue('do_edit_backup')
privet_net = form.getvalue('do_edit_private_net')
floating_ip = form.getvalue('do_edit_floating_net')
monitoring = form.getvalue('do_edit_monitoring')
firewall = form.getvalue('do_edit_firewall')
server_id = form.getvalue('server_id')
try:
if sql.update_server_do(
size, privet_net, floating_ip, ssh_ids, ssh_name, oss, firewall, monitoring, backup, provider,
group, 'Creating', server_id
):
cmd = f'cd scripts/terraform/ && sudo terraform workspace select {workspace}_{group}_do'
output, stderr = server_mod.subprocess_execute(cmd)
if stderr != '':
prov_common.show_error(stderr, group, workspace, provider)
else:
print('ok')
except Exception as e:
print(e)
def create_vars() -> None:
if form.getvalue('dovars'):
dovars = form.getvalue('dovars')
group = form.getvalue('do_create_group')
provider = form.getvalue('do_create_provider')
region = form.getvalue('do_create_regions')
size = form.getvalue('do_create_size')
oss = form.getvalue('do_create_oss')
ssh_name = form.getvalue('do_create_ssh_name')
ssh_ids = form.getvalue('do_create_ssh_ids')
backup = form.getvalue('do_create_backup')
privet_net = form.getvalue('do_create_private_net')
floating_ip = form.getvalue('do_create_floating_net')
monitoring = form.getvalue('do_create_monitoring')
firewall = form.getvalue('do_create_firewall')
else:
dovars = form.getvalue('doeditvars')
group = form.getvalue('do_edit_group')
provider = form.getvalue('do_edit_provider')
region = form.getvalue('do_edit_regions')
size = form.getvalue('do_edit_size')
oss = form.getvalue('do_edit_oss')
ssh_name = form.getvalue('do_edit_ssh_name')
ssh_ids = form.getvalue('do_edit_ssh_ids')
backup = form.getvalue('do_edit_backup')
privet_net = form.getvalue('do_edit_private_net')
floating_ip = form.getvalue('do_edit_floating_net')
monitoring = form.getvalue('do_edit_monitoring')
firewall = form.getvalue('do_edit_firewall')
token = sql.select_do_provider(provider)
cmd = f'cd scripts/terraform/ && sudo ansible-playbook var_generator.yml -i inventory -e "region={region} ' \
f'group={group} size={size} os={oss} floating_ip={floating_ip} ssh_ids={ssh_ids} server_name={dovars} ' \
f'token={token} backup={backup} monitoring={monitoring} privet_net={privet_net} firewall={firewall} ' \
f'floating_ip={floating_ip} ssh_name={ssh_name} cloud=do"'
output, stderr = server_mod.subprocess_execute(cmd)
if stderr != '':
print(f'error: {stderr}')
else:
print('ok')

View File

@ -0,0 +1,141 @@
import modules.db.sql as sql
import modules.common.common as common
import modules.server.server as server_mod
import modules.provisioning.common as prov_common
form = common.form
def create_vars() -> None:
if form.getvalue('gcorevars'):
gcorevars = form.getvalue('gcorevars')
group = form.getvalue('gcore_create_group')
provider = form.getvalue('gcore_create_provider')
region = form.getvalue('gcore_create_regions')
project = form.getvalue('gcore_create_project')
size = form.getvalue('gcore_create_size')
oss = form.getvalue('gcore_create_oss')
ssh_name = form.getvalue('gcore_create_ssh_name')
volume_size = form.getvalue('gcore_create_volume_size')
volume_type = form.getvalue('gcore_create_volume_type')
delete_on_termination = form.getvalue('gcore_create_delete_on_termination')
network_name = form.getvalue('gcore_create_network_name')
firewall = form.getvalue('gcore_create_firewall')
network_type = form.getvalue('gcore_create_network_type')
elif form.getvalue('gcoreeditvars'):
gcorevars = form.getvalue('gcoreeditvars')
group = form.getvalue('gcore_edit_group')
provider = form.getvalue('gcore_edit_provider')
region = form.getvalue('gcore_edit_regions')
project = form.getvalue('gcore_edit_project')
size = form.getvalue('gcore_edit_size')
oss = form.getvalue('gcore_edit_oss')
ssh_name = form.getvalue('gcore_edit_ssh_name')
volume_size = form.getvalue('gcore_edit_volume_size')
volume_type = form.getvalue('gcore_edit_volume_type')
delete_on_termination = form.getvalue('gcore_edit_delete_on_termination')
network_name = form.getvalue('gcore_edit_network_name')
firewall = form.getvalue('gcore_edit_firewall')
network_type = form.getvalue('gcore_edit_network_type')
try:
gcore_user, gcore_pass = sql.select_gcore_provider(provider)
except Exception as e:
print(e)
cmd = 'cd scripts/terraform/ && sudo ansible-playbook var_generator.yml -i inventory -e "region={} ' \
'group={} size={} os={} network_name={} volume_size={} server_name={} username={} ' \
'pass={} firewall={} network_type={} ssh_name={} delete_on_termination={} project={} volume_type={} ' \
'cloud=gcore"'.format(region, group, size, oss, network_name, volume_size, gcorevars, gcore_user, gcore_pass,
firewall, network_type, ssh_name, delete_on_termination, project, volume_type)
output, stderr = server_mod.subprocess_execute(cmd)
if stderr != '':
print(f'error: {stderr}')
else:
print('ok')
def validate() -> None:
if form.getvalue('gcorevalidate'):
workspace = form.getvalue('gcorevalidate')
group = form.getvalue('gcore_create_group')
else:
workspace = form.getvalue('gcoreeditvalidate')
group = form.getvalue('gcore_edit_group')
cmd = f'cd scripts/terraform/ && sudo terraform plan -no-color -input=false -target=module.gcore_module -var-file vars/{workspace}_{group}_gcore.tfvars'
output, stderr = server_mod.subprocess_execute(cmd)
if stderr != '':
print(f'error: {stderr}')
else:
print('ok')
def new_workspace() -> None:
workspace = form.getvalue('gcoreworkspace')
group = form.getvalue('gcore_create_group')
provider = form.getvalue('gcore_create_provider')
region = form.getvalue('gcore_create_regions')
project = form.getvalue('gcore_create_project')
size = form.getvalue('gcore_create_size')
oss = form.getvalue('gcore_create_oss')
ssh_name = form.getvalue('gcore_create_ssh_name')
volume_size = form.getvalue('gcore_create_volume_size')
volume_type = form.getvalue('gcore_create_volume_type')
delete_on_termination = form.getvalue('gcore_create_delete_on_termination')
network_type = form.getvalue('gcore_create_network_type')
firewall = form.getvalue('gcore_create_firewall')
network_name = form.getvalue('gcore_create_network_name')
cmd = f'cd scripts/terraform/ && sudo terraform workspace new {workspace}_{group}_gcore'
output, stderr = server_mod.subprocess_execute(cmd)
if stderr != '':
prov_common.show_error(stderr, group, workspace, provider)
else:
try:
if sql.add_server_gcore(
project, region, size, network_type, network_name, volume_size, ssh_name, workspace, oss, firewall,
provider, group, 'Creating', delete_on_termination, volume_type
):
prov_common.show_new_server(workspace, group, 'gcore')
except Exception as e:
print(e)
def edit_workspace() -> None:
workspace = form.getvalue('gcoreeditworkspace')
group = form.getvalue('gcore_edit_group')
provider = form.getvalue('gcore_edit_provider')
region = form.getvalue('gcore_edit_regions')
project = form.getvalue('gcore_edit_project')
size = form.getvalue('gcore_edit_size')
oss = form.getvalue('gcore_edit_oss')
ssh_name = form.getvalue('gcore_edit_ssh_name')
volume_size = form.getvalue('gcore_edit_volume_size')
volume_type = form.getvalue('gcore_edit_volume_type')
delete_on_termination = form.getvalue('gcore_edit_delete_on_termination')
network_type = form.getvalue('gcore_edit_network_type')
firewall = form.getvalue('gcore_edit_firewall')
network_name = form.getvalue('gcore_edit_network_name')
server_id = form.getvalue('server_id')
try:
if sql.update_server_gcore(
region, size, network_type, network_name, volume_size, ssh_name, workspace, oss, firewall,
provider, group, 'Editing', server_id, delete_on_termination, volume_type, project
):
try:
cmd = f'cd scripts/terraform/ && sudo terraform workspace select {workspace}_{group}_gcore'
output, stderr = server_mod.subprocess_execute(cmd)
except Exception as e:
print('error: ' + str(e))
if stderr != '':
prov_common.show_error(stderr, group, workspace, provider)
else:
print('ok')
except Exception as e:
print(e)

View File

@ -0,0 +1,106 @@
import os
import http.cookies
from jinja2 import Environment, FileSystemLoader
import modules.db.sql as sql
import modules.common.common as common
import modules.roxywi.common as roxywi_common
form = common.form
def create_provider() -> None:
roxywi_common.check_user_group()
is_add = False
provider_name = common.checkAjaxInput(form.getvalue('new_provider_name'))
provider_group = common.checkAjaxInput(form.getvalue('new_provider_group'))
provider_token = common.checkAjaxInput(form.getvalue('new_provider_token'))
cloud = common.checkAjaxInput(form.getvalue('new_provider_cloud'))
if cloud == 'do':
if sql.add_provider_do(provider_name, provider_group, provider_token):
is_add = True
elif cloud == 'aws':
provider_secret = common.checkAjaxInput(form.getvalue('aws_new_secret'))
if sql.add_provider_aws(provider_name, provider_group, provider_token, provider_secret):
is_add = True
elif cloud == 'gcore':
provider_pass = common.checkAjaxInput(form.getvalue('gcore_new_pass'))
if sql.add_provider_gcore(provider_name, provider_group, provider_token, provider_pass):
is_add = True
if is_add:
cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE"))
user_uuid = cookie.get('uuid')
group_id = roxywi_common.get_user_group(id=1)
role_id = sql.get_user_role_by_uuid(user_uuid.value, group_id)
params = sql.select_provisioning_params()
providers = sql.select_providers(provider_group, key=provider_token)
if role_id == 1:
groups = sql.select_groups()
else:
groups = ''
lang = roxywi_common.get_user_lang()
env = Environment(loader=FileSystemLoader('templates'), autoescape=True)
template = env.get_template('ajax/provisioning/providers.html')
template = template.render(providers=providers, role=role_id, groups=groups, user_group=provider_group,
adding=1, params=params, lang=lang)
print(template)
def delete_provider() -> None:
roxywi_common.check_user_group()
try:
if sql.delete_provider(common.checkAjaxInput(form.getvalue('providerdel'))):
print('Ok')
roxywi_common.logging('Roxy-WI server', 'Provider has been deleted', provisioning=1)
except Exception as e:
print(e)
def edit_DO_provider(provider_id: int) -> None:
roxywi_common.check_user_group()
new_name = form.getvalue('edit_do_provider_name')
new_token = form.getvalue('edit_do_provider_token')
try:
if sql.update_do_provider(new_name, new_token, provider_id):
print('ok')
roxywi_common.logging('Roxy-WI server', f'Provider has been edited. New name is {new_name}', provisioning=1)
except Exception as e:
print(e)
def edit_gcore_provider(provider_id: int) -> None:
roxywi_common.check_user_group()
new_name = form.getvalue('edit_gcore_provider_name')
new_user = form.getvalue('edit_gcore_provider_user')
new_pass = form.getvalue('edit_gcore_provider_pass')
try:
if sql.update_gcore_provider(new_name, new_user, new_pass, provider_id):
print('ok')
roxywi_common.logging('Roxy-WI server', f'Provider has been edited. New name is {new_name}', provisioning=1)
except Exception as e:
print(e)
def edit_aws_provider(provider_id: int) -> None:
roxywi_common.check_user_group()
new_name = form.getvalue('edit_aws_provider_name')
new_key = form.getvalue('edit_aws_provider_key')
new_secret = form.getvalue('edit_aws_provider_secret')
try:
if sql.update_aws_provider(new_name, new_key, new_secret, provider_id):
print('ok')
roxywi_common.logging('Roxy-WI server', f'Provider has been edited. New name is {new_name}', provisioning=1)
except Exception as e:
print(e)

View File

@ -0,0 +1,133 @@
from jinja2 import Environment, FileSystemLoader
import modules.db.sql as sql
import modules.common.common as common
import modules.roxywi.common as roxywi_common
import modules.server.server as server_mod
import modules.provisioning.common as prov_common
form = common.form
def init_server() -> None:
roxywi_common.check_user_group()
cmd = 'cd scripts/terraform/ && sudo terraform init -upgrade -no-color'
output, stderr = server_mod.subprocess_execute(cmd)
if stderr != '':
print(f'error: {stderr}')
else:
if "Terraform initialized in an empty directory" in output[0]:
print('error: There is not need module')
elif "mkdir .terraform: permission denied" in output[0]:
print('error: Cannot init. Check permission to folder')
print(output[0])
def edit_server() -> None:
roxywi_common.check_user_group()
server_id = form.getvalue('editServerId')
user_group = form.getvalue('editGroup')
provider_name = form.getvalue('editProviderName')
params = sql.select_provisioning_params()
providers = sql.select_providers(int(user_group))
lang = roxywi_common.get_user_lang()
show_editing_server = {
'aws': sql.select_aws_server,
'do': sql.select_do_server,
'gcore': sql.select_gcore_server,
}
server = show_editing_server[provider_name](server_id=server_id)
env = Environment(extensions=["jinja2.ext.do"], loader=FileSystemLoader('templates'))
template = env.get_template(f'ajax/provisioning/{provider_name}_edit_dialog.html')
template = template.render(server=server, providers=providers, params=params, lang=lang)
print(template)
def create_server() -> None:
roxywi_common.check_user_group()
workspace = form.getvalue('provisioning_workspace')
group = form.getvalue('provisioning_group')
provider_id = form.getvalue('provisioning_provider_id')
action = form.getvalue('provisioning_action')
cloud = form.getvalue('provisioning_cloud')
state_name = ''
if cloud == 'aws':
state_name = 'aws_instance'
elif cloud == 'do':
state_name = 'digitalocean_droplet'
elif cloud == 'gcore':
state_name = 'gcore_instance'
tfvars = f'{workspace}_{group}_{cloud}.tfvars'
cmd = f'cd scripts/terraform/ && sudo terraform apply -auto-approve -no-color -input=false -target=module.{cloud}_module -var-file vars/{tfvars}'
output, stderr = server_mod.subprocess_execute(cmd)
if stderr != '':
prov_common.show_error(stderr, group, workspace, provider)
else:
if cloud == 'aws':
cmd = 'cd scripts/terraform/ && sudo terraform state show module.aws_module.aws_eip.floating_ip[0]|grep -Eo "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}"'
output, stderr = server_mod.subprocess_execute(cmd)
if stderr != '':
cmd = 'cd scripts/terraform/ && sudo terraform state show module.' + cloud + '_module.' + state_name + '.hapwi|grep -Eo "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}"'
else:
cmd = 'cd scripts/terraform/ && sudo terraform state show module.' + cloud + '_module.' + state_name + '.hapwi|grep -Eo "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}"'
output, stderr = server_mod.subprocess_execute(cmd)
ips = ''
for ip in output:
ips += ip
ips += ' '
if cloud == 'gcore':
ips = ips.split(' ')[0]
print(ips)
try:
sql.update_provisioning_server_status('Created', group, workspace, provider_id, update_ip=ips)
except Exception as e:
print(e)
if cloud == 'gcore':
cmd = 'cd scripts/terraform/ && sudo terraform state show module.gcore_module.gcore_instance.hapwi|grep "name"|grep -v -e "_name\|name_" |head -1 |awk -F"\\\"" \'{print $2}\''
output, stderr = server_mod.subprocess_execute(cmd)
print(':' + output[0])
try:
sql.update_provisioning_server_gcore_name(workspace, output[0], group, provider_id)
except Exception as e:
print(e)
roxywi_common.logging('Roxy-WI server', f'Server {workspace} has been {action}', provisioning=1)
def destroy_server() -> None:
roxywi_common.check_user_group()
server_id = form.getvalue('provisiningdestroyserver')
workspace = form.getvalue('servername')
group = form.getvalue('group')
cloud_type = form.getvalue('type')
provider_id = form.getvalue('provider_id')
tf_workspace = f'{workspace}_{group}_{cloud_type}'
cmd = f'cd scripts/terraform/ && sudo terraform init -upgrade -no-color && sudo terraform workspace select {tf_workspace}'
output, stderr = server_mod.subprocess_execute(cmd)
if stderr != '':
prov_common.show_error(stderr, group, workspace, provider_id)
else:
cmd = f'cd scripts/terraform/ && sudo terraform destroy -auto-approve -no-color -target=module.{cloud_type}_module -var-file vars/{tf_workspace}.tfvars'
output, stderr = server_mod.subprocess_execute(cmd)
if stderr != '':
print(f'error: {stderr}')
else:
cmd = f'cd scripts/terraform/ && sudo terraform workspace select default && sudo terraform workspace delete -force {tf_workspace}'
output, stderr = server_mod.subprocess_execute(cmd)
print('ok')
roxywi_common.logging('Roxy-WI server', 'Server has been destroyed', provisioning=1)
try:
sql.delete_provisioned_servers(server_id)
except Exception as e:
print(e)

View File

@ -11,11 +11,10 @@ from modules.server.ssh import return_ssh_keys_path
form = common.form
def show_installation_output(error: str, output: str, service: str, rc=0) -> bool:
def show_installation_output(error: str, output: str, service: str, rc=0, api=0):
if error and "WARNING" not in error:
roxywi_common.logging('Roxy-WI server', error, roxywi=1)
print('error: ' + error)
return False
raise Exception('error: ' + error)
else:
if rc != 0:
for line in output:
@ -23,19 +22,17 @@ def show_installation_output(error: str, output: str, service: str, rc=0) -> boo
try:
correct_out = line.split('=>')
correct_out = json.loads(correct_out[1])
print(f'error: {correct_out["msg"]}')
break
raise Exception(f'error: {correct_out["msg"]} for {service}')
except Exception:
print(output)
break
raise Exception(f'error: {output} for {service}')
else:
from jinja2 import Environment, FileSystemLoader
env = Environment(loader=FileSystemLoader('templates/'), autoescape=True)
template = env.get_template('include/show_success_installation.html')
lang = roxywi_common.get_user_lang()
rendered_template = template.render(service=service, lang=lang)
print(rendered_template)
roxywi_common.logging('Roxy-WI server', error, roxywi=1, keep_history=1, service=service)
if not api:
from jinja2 import Environment, FileSystemLoader
env = Environment(loader=FileSystemLoader('templates/'), autoescape=True)
template = env.get_template('include/show_success_installation.html')
lang = roxywi_common.get_user_lang()
rendered_template = template.render(service=service, lang=lang)
print(rendered_template)
return True
@ -54,8 +51,9 @@ def install_haproxy(server_ip: str, **kwargs):
docker = kwargs.get('docker')
proxy_serv = ''
ssh_settings = return_ssh_keys_path(server_ip)
full_path = '/var/www/haproxy-wi/app'
os.system(f"cp scripts/{script} .")
os.system(f"cp {full_path}/scripts/{script} {full_path}/{script}")
if haproxy_ver is None:
haproxy_ver = '2.7.1-1'
@ -66,7 +64,7 @@ def install_haproxy(server_ip: str, **kwargs):
syn_flood_protect = '1' if kwargs.get('syn_flood') == "1" else ''
commands = [
f"chmod +x {script} && ./{script} PROXY={proxy_serv} SOCK_PORT={hap_sock_p} STAT_PORT={stats_port} "
f"chmod +x {full_path}/{script} && {full_path}/{script} PROXY={proxy_serv} SOCK_PORT={hap_sock_p} STAT_PORT={stats_port} "
f"STAT_FILE={server_state_file} DOCKER={docker} SSH_PORT={ssh_settings['port']} STATS_USER={stats_user} "
f"CONT_NAME={container_name} HAP_DIR={haproxy_dir} STATS_PASS='{stats_password}' HAPVER={haproxy_ver} "
f"SYN_FLOOD={syn_flood_protect} HOST={server_ip} USER={ssh_settings['user']} PASS='{ssh_settings['password']}' "
@ -91,7 +89,10 @@ def install_haproxy(server_ip: str, **kwargs):
sql.insert_or_update_service_setting(server_id, 'haproxy', 'dockerized', '1')
sql.insert_or_update_service_setting(server_id, 'haproxy', 'restart', '1')
os.remove(script)
try:
os.remove(f'{full_path}/{script}')
except Exception:
pass
def waf_install(server_ip: str):
@ -169,8 +170,12 @@ def install_service(server_ip: str, service: str, docker: str, **kwargs) -> None
container_name = sql.get_setting(f'{service}_container_name')
proxy_serv = ''
ssh_settings = return_ssh_keys_path(server_ip)
full_path = '/var/www/haproxy-wi/app'
os.system(f"cp scripts/{script} .")
try:
os.system(f"cp {full_path}/scripts/{script} {full_path}/{script}")
except Exception as e:
raise Exception(f'error: {e}')
if proxy is not None and proxy != '' and proxy != 'None':
proxy_serv = proxy
@ -185,7 +190,7 @@ def install_service(server_ip: str, service: str, docker: str, **kwargs) -> None
service_dir = '/etc/httpd'
commands = [
f"chmod +x {script} && ./{script} PROXY={proxy_serv} STATS_USER={stats_user} STATS_PASS='{stats_password}' "
f"chmod +x {full_path}/{script} && {full_path}/{script} PROXY={proxy_serv} STATS_USER={stats_user} STATS_PASS='{stats_password}' "
f"SSH_PORT={ssh_settings['port']} CONFIG_PATH={config_path} CONT_NAME={container_name} STAT_PORT={stats_port} "
f"STAT_PAGE={stats_page} SYN_FLOOD={syn_flood_protect} DOCKER={docker} service_dir={service_dir} HOST={server_ip} "
f"USER={ssh_settings['user']} PASS='{ssh_settings['password']}' KEY={ssh_settings['key']}"
@ -215,7 +220,7 @@ def install_service(server_ip: str, service: str, docker: str, **kwargs) -> None
sql.insert_or_update_service_setting(server_id, service, 'dockerized', '1')
sql.insert_or_update_service_setting(server_id, service, 'restart', '1')
os.remove(script)
os.remove(f'{full_path}/{script}')
def geoip_installation():
@ -285,30 +290,26 @@ def grafana_install():
os.remove(script)
def keepalived_master_install():
master = form.getvalue('master')
eth = form.getvalue('interface')
eth_slave = form.getvalue('slave_interface')
vrrp_ip = form.getvalue('vrrpip')
syn_flood = form.getvalue('syn_flood')
virt_server = form.getvalue('virt_server')
return_to_master = form.getvalue('return_to_master')
haproxy = form.getvalue('hap')
nginx = form.getvalue('nginx')
router_id = form.getvalue('router_id')
def keepalived_master_install(master: str, eth: str, eth_slave: str, vrrp_ip: str, virt_server: int, syn_flood: int,
return_to_master: int, haproxy: int, nginx: int, router_id: int, api=0) -> None:
script = "install_keepalived.sh"
proxy = sql.get_setting('proxy')
keepalived_path_logs = sql.get_setting('keepalived_path_logs')
proxy_serv = ''
ssh_settings = return_ssh_keys_path(master)
full_path = '/var/www/haproxy-wi/app'
if proxy is not None and proxy != '' and proxy != 'None':
proxy_serv = proxy
os.system(f"cp scripts/{script} .")
try:
os.system(f"cp {full_path}/scripts/{script} {full_path}/{script}")
except Exception as e:
raise Exception(f'error: {e}')
commands = [
f"chmod +x {script} && ./{script} PROXY={proxy_serv} SSH_PORT={ssh_settings['port']} router_id={router_id} "
f"chmod +x {full_path}/{script} && {full_path}/{script} PROXY={proxy_serv} SSH_PORT={ssh_settings['port']} router_id={router_id} "
f"ETH={eth} IP={vrrp_ip} MASTER=MASTER ETH_SLAVE={eth_slave} keepalived_path_logs={keepalived_path_logs} "
f"RETURN_TO_MASTER={return_to_master} SYN_FLOOD={syn_flood} HOST={master} HAPROXY={haproxy} NGINX={nginx} "
f"USER={ssh_settings['user']} PASS='{ssh_settings['password']}' KEY={ssh_settings['key']}"
@ -316,13 +317,13 @@ def keepalived_master_install():
return_out = server_mod.subprocess_execute_with_rc(commands[0])
if show_installation_output(return_out['error'], return_out['output'], 'master Keepalived', rc=return_out['rc']):
if show_installation_output(return_out['error'], return_out['output'], 'master Keepalived', rc=return_out['rc'], api=api):
try:
sql.update_keepalived(master)
except Exception as e:
print(e)
raise Exception(e)
if virt_server != '0':
if virt_server:
group_id = sql.get_group_id_by_server_ip(master)
cred_id = sql.get_cred_id_by_server_ip(master)
hostname = sql.get_hostname_by_server_ip(master)
@ -333,41 +334,43 @@ def keepalived_master_install():
)
try:
os.remove(script)
os.remove(f'{full_path}/{script}')
except Exception:
pass
def keepalived_slave_install():
master = form.getvalue('master_slave')
slave = form.getvalue('slave')
eth = form.getvalue('interface')
eth_slave = form.getvalue('slave_interface')
vrrp_ip = form.getvalue('vrrpip')
syn_flood = form.getvalue('syn_flood')
haproxy = form.getvalue('hap')
nginx = form.getvalue('nginx')
router_id = form.getvalue('router_id')
def keepalived_slave_install(master: str, slave: str, eth: str, eth_slave: str, vrrp_ip: str, syn_flood: int,
haproxy: int, nginx: int, router_id: int, api=0) -> None:
script = "install_keepalived.sh"
proxy = sql.get_setting('proxy')
keepalived_path_logs = sql.get_setting('keepalived_path_logs')
proxy_serv = ''
ssh_settings = return_ssh_keys_path(slave)
full_path = '/var/www/haproxy-wi/app'
if proxy is not None and proxy != '' and proxy != 'None':
proxy_serv = proxy
os.system(f"cp scripts/{script} .")
try:
os.system(f"cp {full_path}/scripts/{script} {full_path}/{script}")
except Exception as e:
raise Exception(f'error: {e}')
commands = [
f"chmod +x {script} && ./{script} PROXY={proxy_serv} SSH_PORT={ssh_settings['port']} router_id={router_id} ETH={eth} "
f"chmod +x {full_path}/{script} && {full_path}/{script} PROXY={proxy_serv} SSH_PORT={ssh_settings['port']} router_id={router_id} ETH={eth} "
f"IP={vrrp_ip} MASTER=BACKUP ETH_SLAVE={eth_slave} SYN_FLOOD={syn_flood} keepalived_path_logs={keepalived_path_logs} HAPROXY={haproxy} "
f"NGINX={nginx} HOST={slave} USER={ssh_settings['user']} PASS='{ssh_settings['password']}' KEY={ssh_settings['key']}"
]
return_out = server_mod.subprocess_execute_with_rc(commands[0])
try:
return_out = server_mod.subprocess_execute_with_rc(commands[0])
except Exception as e:
raise Exception(f'error: {e}')
show_installation_output(return_out['error'], return_out['output'], 'slave Keepalived', rc=return_out['rc'])
try:
show_installation_output(return_out['error'], return_out['output'], 'slave Keepalived', rc=return_out['rc'], api=api)
except Exception as e:
raise Exception(f'{e}')
try:
sql.update_server_master(master, slave)
@ -376,7 +379,7 @@ def keepalived_slave_install():
print(e)
try:
os.remove(script)
os.remove(f'{full_path}/{script}')
except Exception:
pass

File diff suppressed because it is too large Load Diff

View File

@ -31,8 +31,7 @@ export ACTION_WARNINGS=False
export LOCALHOST_WARNING=False
export COMMAND_WARNINGS=False
PWD=$(pwd)
PWD=$PWD/scripts/ansible/
PWD=/var/www/haproxy-wi/app/scripts/ansible/
echo "$HOST ansible_port=$SSH_PORT" > $PWD/$HOST
if [[ $DOCKER == '1' ]]; then

View File

@ -33,8 +33,7 @@ export ACTION_WARNINGS=False
export LOCALHOST_WARNING=False
export COMMAND_WARNINGS=False
PWD=`pwd`
PWD=$PWD/scripts/ansible/
PWD=/var/www/haproxy-wi/app/scripts/ansible/
echo "$HOST ansible_port=$SSH_PORT" > $PWD/$HOST
if [[ $MASTER == 'BACKUP' ]]; then

View File

@ -44,8 +44,7 @@ export ACTION_WARNINGS=False
export LOCALHOST_WARNING=False
export COMMAND_WARNINGS=False
PWD=`pwd`
PWD=$PWD/scripts/ansible/
PWD=/var/www/haproxy-wi/app/scripts/ansible/
echo "$HOST ansible_port=$SSH_PORT" > $PWD/$HOST
if [[ $KEY == "" ]]; then

View File

@ -28,6 +28,7 @@
<table class="overview" id="ajax-group">
<thead>
<tr class="overviewHead">
<th class="padding10" style="width: 0;">Id</th>
<th class="padding10 first-collumn">{{lang.words.name|title()}}</th>
<th style="width: 100%;">{{lang.words.desc|title()}}</th>
<th></th>
@ -35,6 +36,7 @@
<tbody>
{% for group in groups %}
<tr id="group-{{ group.group_id }}" class="{{ loop.cycle('odd', 'even') }}">
<td class="padding10" style="width: 0">{{group.group_id}}</td>
{% if group.name == "Default" %}
<td class="padding10 first-collumn">{{ group.name }}</td>
<td>{{ group.description }}</td>

View File

@ -21,8 +21,6 @@
<h4>Read <a href="https://www.terraform.io/downloads.html"
title="Download Terraform" target="_blank" class="link">here</a> how to install Terraform.</h4>
</div>
{% elif servers|length == 0 %}
{% include 'include/getstarted.html' %}
{% else %}
<table class="overview" id="ajax-provisioning">
<thead>

View File

@ -9,7 +9,7 @@ $( function() {
});
var add_server_var = '<br /><input name="servers" title="Backend IP" size=14 placeholder="xxx.xxx.xxx.xxx" class="form-control second-server" style="margin: 2px 0 4px 0;">: ' +
'<input name="server_port" required title="Backend port" size=3 placeholder="yyy" class="form-control second-server add_server_number" type="number"> ' +
'max_fails check: <input name="max_fails" required title="By default, the number of unsuccessful attempts is set to 1" size=5 value="1" class="form-control add_server_number" type="number">' +
'max_fails: <input name="max_fails" required title="By default, the number of unsuccessful attempts is set to 1" size=5 value="1" class="form-control add_server_number" type="number">' +
' fail_timeout: <input name="fail_timeout" required title="By default, the number of unsuccessful attempts is set to 1" size=5 value="1" class="form-control add_server_number" type="number">s'
$('[name=add-server-input]').click(function() {
$("[name=add_servers]").append(add_server_var);

View File

@ -49,11 +49,11 @@
-webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
-moz-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
-webkit-transition: width 3s ease;
-moz-transition: width 3s ease;
-o-transition: width 3s ease;
transition: width 3s ease;
animation: progress-bar-stripes 2s linear infinite;
-webkit-transition: width 2s ease;
-moz-transition: width 2s ease;
-o-transition: width 2s ease;
transition: width 2s ease;
animation: progress-bar-stripes 1s linear infinite;
background-color: #5d9ceb;
}
.progress-bar-striped p{

View File

@ -1375,8 +1375,8 @@ label {
}
.portlet-header {
cursor: move;
display: block;
margin-left: 130px;
margin-top: -24px;
margin-right: -14px;
margin-right: -10px;
margin-left: 10px;
position: relative;
bottom: 3px;
}

View File

@ -383,9 +383,9 @@ function create_master_keepalived(hap, nginx, syn_flood, router_id) {
if (hap == '0' && nginx == '0') {
var progress_value = '50';
} else if (hap == '1' || nginx == '0') {
var progress_value = '43';
var progress_value = '25';
} else if (hap == '1' && nginx == '1') {
var progress_value = '50';
var progress_value = '16.6';
}
var virt_server = 0;
var haproxy_docker = 0;
@ -434,7 +434,7 @@ function create_master_keepalived(hap, nginx, syn_flood, router_id) {
create_keep_alived_hap(nginx, 'master', haproxy_docker);
}
if (hap == '0' && nginx == '1') {
create_keep_alived_nginx('master', nginx_docker);
create_keep_alived_nginx(hap, 'master', nginx_docker);
}
} else {
toastr.clear();
@ -445,11 +445,11 @@ function create_master_keepalived(hap, nginx, syn_flood, router_id) {
}
function create_slave_keepalived(hap, nginx, syn_flood, router_id) {
if (hap == '0' && nginx == '0') {
var progress_value = '100';
} else if (hap == '1' || nginx == '0') {
var progress_value = '67';
} else if (hap == '1' && nginx == '1') {
var progress_value = '50';
} else if (hap == '1' || nginx == '0') {
var progress_value = '25';
} else if (hap == '1' && nginx == '1') {
var progress_value = '16.6';
}
var haproxy_docker = 0;
var nginx_docker = 0;
@ -492,16 +492,16 @@ function create_slave_keepalived(hap, nginx, syn_flood, router_id) {
create_keep_alived_hap(nginx, 'slave', haproxy_docker);
}
if (hap == '0' && nginx == '1') {
create_keep_alived_nginx('slave', nginx_docker);
create_keep_alived_nginx(hap, 'slave', nginx_docker);
}
}
} );
}
function create_keep_alived_hap(nginx, server, docker) {
if (nginx == '0') {
var progress_value = '100';
var progress_value = '25';
} else if (nginx == '1') {
var progress_value = '75';
var progress_value = '16.6';
}
if (server === 'master') {
var step_id = '#creating-haproxy-master';
@ -535,12 +535,17 @@ function create_keep_alived_hap(nginx, server, docker) {
toastr.info(data);
}
if (nginx == '1') {
create_keep_alived_nginx(server, docker)
create_keep_alived_nginx(hap, server, docker)
}
}
} );
}
function create_keep_alived_nginx(server, docker) {
function create_keep_alived_nginx(hap, server, docker) {
if (hap == '0') {
var progress_value = '25';
} else if (hap == '1') {
var progress_value = '16.6';
}
if (server === 'master') {
var step_id = '#creating-nginx-master';
var install_step = 'master Nginx';
@ -567,7 +572,7 @@ function create_keep_alived_nginx(server, docker) {
} else if (data == '' ){
showProvisioningWarning(step_id, install_step, '#creating-warning', '#wait_mess');
} else if (data.indexOf('success') != '-1' ){
showProvisioningProccess('<br>'+data, step_id, '100', '#creating-progress', '#created-mess', '#wait-mess');
showProvisioningProccess('<br>'+data, step_id, progress_value, '#creating-progress', '#created-mess', '#wait-mess');
} else {
toastr.clear();
toastr.info(data);
@ -618,8 +623,12 @@ function showProvisioningProccess(data, step_id, progress_value, progress_id, cr
$(step_id).removeClass('proccessing');
$(created_id).show();
$(created_id).append(data);
$(progress_id).css('width', progress_value+'%');
if (progress_value === '100')
$(waid_id).hide();
var cur_proggres_value = $(progress_id).css('width').split('px')[0] / $(progress_id).parent().width() * 100;
var new_progress = parseFloat(cur_proggres_value) + parseFloat(progress_value);
if (parseFloat(new_progress) > 84) {
$(waid_id).hide();
new_progress = parseFloat(100);
}
$(progress_id).css('width', new_progress+'%');
$.getScript("/inc/fontawesome.min.js");
}

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 6 3"><path fill="#00843D" d="M0 0h6v3H0z"/><path fill="#fff" d="M0 1h6v2H0z"/><path d="M0 2h6v1H0z"/><path fill="#C8102E" d="M0 0h1.5v3H0z"/></svg>

After

Width:  |  Height:  |  Size: 200 B

View File

@ -474,10 +474,13 @@ function awsProvisiningServer() {
$.ajax( {
url: "options.py",
data: {
awsprovisining: $('#aws_create_server_name').val(),
aws_create_group: $('#aws_create_group').val(),
aws_create_provider: $('#aws_create_provider').val(),
token: $('#token').val()
awsprovisining: 1,
provisioning_workspace: $('#aws_create_server_name').val(),
provisioning_group: $('#aws_create_group').val(),
provider_id: $('#aws_create_provider').val(),
provisioning_action: 'created',
provisioning_cloud: 'aws',
token: $('#token').val()
},
type: "POST",
success: function( data ) {
@ -649,10 +652,13 @@ function awsEditProvisiningServer(server_id, dialog_id) {
$.ajax( {
url: "options.py",
data: {
awseditingprovisining: $('#aws_edit_server_name').text(),
aws_edit_group: $('#aws_edit_group').val(),
aws_edit_provider: $('#aws_edit_id_provider option:selected').val(),
token: $('#token').val()
awseditingprovisining: 1,
provisioning_workspace: $('#aws_edit_server_name').text(),
provisioning_group: $('#aws_edit_group').val(),
provisioning_provider_id: $('#aws_edit_id_provider option:selected').val(),
provisioning_action: 'modified',
provisioning_cloud: 'aws',
token: $('#token').val()
},
type: "POST",
success: function( data ) {
@ -724,8 +730,9 @@ function editAwsServer(id) {
$.ajax( {
url: "options.py",
data: {
editAwsServer: id,
editAwsGroup: $('#server-group-'+id).text(),
editServerId: id,
editProviderName: 'aws',
editGroup: $('#server-group-'+id).text(),
token: $('#token').val()
},
type: "POST",
@ -766,8 +773,9 @@ function editGcoreServer(id) {
$.ajax( {
url: "options.py",
data: {
editGcoreServer: id,
editGcoreGroup: $('#server-group-'+id).text(),
editServerId: id,
editProviderName: 'gcore',
editGroup: $('#server-group-' + id).text(),
token: $('#token').val()
},
type: "POST",
@ -808,8 +816,9 @@ function editDoServer(id) {
$.ajax( {
url: "options.py",
data: {
editDoServer: id,
editDoGroup: $('#server-group-'+id).text(),
editServerId: id,
editProviderName: 'do',
editGroup: $('#server-group-' + id).text(),
token: $('#token').val()
},
type: "POST",
@ -901,14 +910,14 @@ function add_button_after_server_edited(server_id) {
function add_gcore_button_after_server_edited(server_id) {
var buttons = editingServer.dialog("option", "buttons");
$.extend(buttons, { Back: function() {
$( this ).dialog( "close" );
editGcoreServer(server_id)
cleanProvisioningProccess('#server_editing ul li', '#edited-mess');
$('#wait-mess').show();
$('#edited-mess').html('');
$('#edited-mess').hide();
hideProvisioningError('#editing-error');
} });
$(this).dialog("close");
editGcoreServer(server_id)
cleanProvisioningProccess('#server_editing ul li', '#edited-mess');
$('#wait-mess').show();
$('#edited-mess').html('');
$('#edited-mess').hide();
hideProvisioningError('#editing-error');
} });
editingServer.dialog("option", "buttons", buttons);
}
function add_do_button_after_server_edited(server_id) {
@ -1003,9 +1012,10 @@ function addDoProvider(dialog_id) {
$.ajax( {
url: "options.py",
data: {
do_new_name: $('#do_new_name').val(),
do_new_group: $('#do_new_group').val(),
do_new_token: $('#do_new_token').val(),
new_provider_name: $('#do_new_name').val(),
new_provider_group: $('#do_new_group').val(),
new_provider_token: $('#do_new_token').val(),
new_provider_cloud: 'do',
token: $('#token').val()
},
type: "POST",
@ -1035,10 +1045,11 @@ function addGcoreProvider(dialog_id) {
$.ajax( {
url: "options.py",
data: {
gcore_new_name: $('#gcore_new_name').val(),
gcore_new_group: $('#do_new_group').val(),
gcore_new_user: $('#gcore_new_user').val(),
new_provider_name: $('#gcore_new_name').val(),
new_provider_group: $('#gcore_new_group').val(),
new_provider_token: $('#gcore_new_user').val(),
gcore_new_pass: $('#gcore_new_pass').val(),
new_provider_cloud: 'gcore',
token: $('#token').val()
},
type: "POST",
@ -1068,10 +1079,11 @@ function addAwsProvider(dialog_id) {
$.ajax( {
url: "options.py",
data: {
aws_new_name: $('#aws_new_name').val(),
aws_new_group: $('#aws_new_group').val(),
aws_new_key: $('#aws_new_key').val(),
aws_new_secret: $('#aws_new_secret').val(),
new_provider_name: $('#aws_new_name').val(),
new_provider_group: $('#aws_new_group').val(),
new_provider_token: $('#aws_new_key').val(),
aws_new_secret: $('#aws_new_secret').val(),
new_provider_cloud: 'aws',
token: $('#token').val()
},
type: "POST",
@ -1160,11 +1172,12 @@ function doEditProviderSave() {
$.ajax({
url: "options.py",
data: {
edit_do_provider: id,
edit_do_provider_name: new_name,
edit_do_provider_token: token,
token: $('#token').val()
},
edit_provider_id: id,
provider_name: 'do',
edit_do_provider_name: new_name,
edit_do_provider_token: token,
token: $('#token').val()
},
type: "POST",
success: function (data) {
data = data.replace(/\s+/g, ' ');
@ -1221,12 +1234,13 @@ function gcoreEditProviderSave() {
$.ajax({
url: "options.py",
data: {
edit_gcore_provider: id,
edit_gcore_provider_name: new_name,
edit_gcore_provider_user: username,
edit_gcore_provider_pass: pass,
token: $('#token').val()
},
edit_provider_id: id,
provider_name: 'gcore',
edit_gcore_provider_name: new_name,
edit_gcore_provider_user: username,
edit_gcore_provider_pass: pass,
token: $('#token').val()
},
type: "POST",
success: function (data) {
data = data.replace(/\s+/g, ' ');
@ -1282,12 +1296,13 @@ function awsEditProviderSave() {
$.ajax({
url: "options.py",
data: {
edit_aws_provider: id,
edit_aws_provider_name: new_name,
edit_aws_provider_key: key,
edit_aws_provider_secret: secret,
token: $('#token').val()
},
edit_provider_id: id,
provider_name: 'aws',
edit_aws_provider_name: new_name,
edit_aws_provider_key: key,
edit_aws_provider_secret: secret,
token: $('#token').val()
},
type: "POST",
success: function (data) {
data = data.replace(/\s+/g, ' ');
@ -1419,9 +1434,9 @@ function doEditValidateServer(server_id) {
$.ajax( {
url: "options.py",
data: {
doeditvalidate: $('#do_edit_server_name').text(),
do_edit_group: $('#do_edit_group').val(),
token: $('#token').val()
doeditvalidate: $('#do_edit_server_name').text(),
do_edit_group: $('#do_edit_group').val(),
token: $('#token').val()
},
type: "POST",
success: function( data ) {
@ -1497,10 +1512,13 @@ function doEditProvisiningServer(server_id) {
$.ajax( {
url: "options.py",
data: {
doeditprovisining: $('#do_edit_server_name').text(),
do_edit_group: $('#do_edit_group').val(),
do_edit_provider: $('#do_edit_id_provider').val(),
token: $('#token').val()
doeditprovisining: 1,
provisioning_workspace: $('#do_edit_server_name').text(),
provisioning_group: $('#do_edit_group').val(),
provisioning_provider_id: $('#do_edit_id_provider').val(),
provisioning_action: 'modified',
provisioning_cloud: 'do',
token: $('#token').val()
},
type: "POST",
success: function( data ) {
@ -1651,10 +1669,13 @@ function doProvisiningServer() {
$.ajax( {
url: "options.py",
data: {
doprovisining: $('#do_create_server_name').val(),
do_create_group: $('#do_create_group').val(),
do_create_provider: $('#do_create_provider').val(),
token: $('#token').val()
doprovisining: 1,
provisioning_workspace: $('#do_create_server_name').val(),
provisioning_group: $('#do_create_group').val(),
provisioning_provider_id: $('#do_create_provider').val(),
provisioning_action: 'created',
provisioning_cloud: 'do',
token: $('#token').val()
},
type: "POST",
success: function( data ) {
@ -1804,10 +1825,13 @@ function gcoreProvisiningServer() {
$.ajax( {
url: "options.py",
data: {
gcoreprovisining: gcoreprovisining,
gcore_create_group: $('#gcore_create_group').val(),
gcore_create_provider: $('#gcore_create_provider').val(),
token: $('#token').val()
gcoreprovisining: 1,
provisioning_workspace: gcoreprovisining,
provisioning_group: $('#gcore_create_group').val(),
provisioning_provider_id: $('#gcore_create_provider').val(),
provisioning_action: 'created',
provisioning_cloud: 'gcore',
token: $('#token').val()
},
type: "POST",
success: function( data ) {
@ -1828,7 +1852,6 @@ function gcoreProvisiningServer() {
$('#sever-status-'+server_id).text('Created');
$('#sever-status-'+server_id).css('color', 'var(--green-color)');
$('#server-ip-'+server_id).text(data[0]);
// $('#server-name-'+server_id).text(gcoreprovisining+'('+data[1]+')');
add_gcore_button_after_server_created();
}
}
@ -1949,22 +1972,22 @@ function gcoreEditWorkspaceServer(server_id) {
$.ajax( {
url: "options.py",
data: {
gcoreeditworkspace: $('#gcore_edit_server_name').text(),
gcore_edit_group: $('#gcore_edit_group').val(),
gcore_edit_provider: $('#gcore_edit_id_provider').val(),
gcore_edit_regions: $('#gcore_edit_region').text(),
gcore_edit_project: $('#gcore_edit_project_name').text(),
gcore_edit_size: $('#gcore_edit_size').val(),
gcore_edit_oss: $('#gcore_edit_oss').text(),
gcore_edit_ssh_name: $('#gcore_edit_ssh_name').val(),
gcore_edit_volume_size: $('#gcore_edit_volume_size').val(),
gcore_edit_volume_type: $('#gcore_edit_volume_type').val(),
gcore_edit_delete_on_termination: gcore_edit_delete_on_termination,
gcore_edit_network_name: $('#gcore_edit_network_name').val(),
gcore_edit_firewall: gcore_edit_firewall,
gcore_edit_network_type: $('#gcore_edit_network_type').val(),
gcoreeditworkspace: $('#gcore_edit_server_name').text(),
gcore_edit_group: $('#gcore_edit_group').val(),
gcore_edit_provider: $('#gcore_edit_id_provider').val(),
gcore_edit_regions: $('#gcore_edit_region').text(),
gcore_edit_project: $('#gcore_edit_project_name').text(),
gcore_edit_size: $('#gcore_edit_size').val(),
gcore_edit_oss: $('#gcore_edit_oss').text(),
gcore_edit_ssh_name: $('#gcore_edit_ssh_name').val(),
gcore_edit_volume_size: $('#gcore_edit_volume_size').val(),
gcore_edit_volume_type: $('#gcore_edit_volume_type').val(),
gcore_edit_delete_on_termination: gcore_edit_delete_on_termination,
gcore_edit_network_name: $('#gcore_edit_network_name').val(),
gcore_edit_firewall: gcore_edit_firewall,
gcore_edit_network_type: $('#gcore_edit_network_type').val(),
server_id: server_id,
token: $('#token').val()
token: $('#token').val()
},
type: "POST",
success: function( data ) {
@ -1987,10 +2010,13 @@ function gcoreEditProvisiningServer(server_id, dialog_id) {
$.ajax( {
url: "options.py",
data: {
gcoreeditgprovisining: gcoreeditgprovisining,
gcore_edit_group: $('#gcore_edit_group').val(),
gcore_edit_provider: $('#gcore_edit_id_provider option:selected').val(),
token: $('#token').val()
gcoreeditgprovisining: 1,
provisioning_workspace: gcoreeditgprovisining,
provisioning_group: $('#gcore_edit_group').val(),
provisioning_provider_id: $('#gcore_edit_id_provider option:selected').val(),
provisioning_action: 'modified',
provisioning_cloud: 'gcore',
token: $('#token').val()
},
type: "POST",
success: function( data ) {