mirror of https://github.com/Aidaho12/haproxy-wi
parent
1e14b128a5
commit
6732903e5a
284
app/create_db.py
284
app/create_db.py
|
@ -97,6 +97,7 @@ def create_table(**kwargs):
|
|||
port INTEGER NOT NULL DEFAULT 22,
|
||||
`desc` varchar(64),
|
||||
active INTEGER NOT NULL DEFAULT 0,
|
||||
keepalived INTEGER NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY(`id`)
|
||||
);
|
||||
CREATE TABLE IF NOT EXISTS `role` (
|
||||
|
@ -105,10 +106,10 @@ def create_table(**kwargs):
|
|||
`description` VARCHAR ( 255 ),
|
||||
PRIMARY KEY(`id`)
|
||||
);
|
||||
INSERT INTO `role` (name, description) VALUES ('admin','Can do everything'),
|
||||
INSERT INTO `role` (name, description) VALUES
|
||||
('admin','Can do everything'),
|
||||
('editor','Can edit configs'),
|
||||
('guest','Read only access');
|
||||
|
||||
('guest','Read only access');
|
||||
CREATE TABLE IF NOT EXISTS `groups` (
|
||||
`id` INTEGER NOT NULL,
|
||||
`name` VARCHAR ( 80 ),
|
||||
|
@ -136,7 +137,41 @@ def create_table(**kwargs):
|
|||
CREATE TABLE IF NOT EXISTS `backups` (`id` INTEGER NOT NULL, `server` VARCHAR ( 64 ), `rhost` VARCHAR ( 120 ), `rpath` VARCHAR ( 120 ), `type` VARCHAR ( 120 ), `time` VARCHAR ( 120 ), cred INTEGER, `description` VARCHAR ( 120 ), PRIMARY KEY(`id`));
|
||||
CREATE TABLE IF NOT EXISTS `waf` (`server_id` INTEGER UNIQUE, metrics INTEGER);
|
||||
CREATE TABLE IF NOT EXISTS `waf_metrics` (`serv` varchar(64), conn INTEGER, `date` DATETIME default '0000-00-00 00:00:00');
|
||||
CREATE TABLE IF NOT EXISTS user_groups(user_id INTEGER NOT NULL, user_group_id INTEGER NOT NULL, UNIQUE(user_id,user_group_id));
|
||||
CREATE TABLE IF NOT EXISTS user_groups(user_id INTEGER NOT NULL, user_group_id INTEGER NOT NULL, UNIQUE(user_id,user_group_id));
|
||||
CREATE TABLE IF NOT EXISTS providers_creds (
|
||||
`id` INTEGER NOT NULL,
|
||||
`name` VARCHAR ( 64 ),
|
||||
`type` VARCHAR ( 64 ),
|
||||
`group` VARCHAR ( 64 ),
|
||||
`key` VARCHAR ( 64 ),
|
||||
`secret` VARCHAR ( 64 ),
|
||||
PRIMARY KEY(`id`)
|
||||
);
|
||||
CREATE TABLE IF NOT EXISTS provisioned_servers (
|
||||
`id` INTEGER NOT NULL,
|
||||
`region` VARCHAR ( 64 ),
|
||||
`instance_type` VARCHAR ( 64 ),
|
||||
`public_ip` INTEGER,
|
||||
`floating_ip` INTEGER,
|
||||
`volume_size` INTEGER,
|
||||
`backup` INTEGER,
|
||||
`monitoring` INTEGER,
|
||||
`private_networking` INTEGER,
|
||||
`ssh_key_name` VARCHAR ( 64 ),
|
||||
`ssh_ids` VARCHAR ( 64 ),
|
||||
`name` VARCHAR ( 64 ),
|
||||
`os` VARCHAR ( 64 ),
|
||||
`firewall` INTEGER,
|
||||
`provider_id` INTEGER,
|
||||
`type` VARCHAR ( 64 ),
|
||||
`status` VARCHAR ( 64 ),
|
||||
`group_id` INTEGER NOT NULL,
|
||||
`date` DATETIME default '0000-00-00 00:00:00',
|
||||
`IP` VARCHAR ( 64 ),
|
||||
`last_error` VARCHAR ( 256 ),
|
||||
`delete_on_termination` INTEGER
|
||||
PRIMARY KEY(`id`)
|
||||
);
|
||||
"""
|
||||
try:
|
||||
cur.executescript(sql)
|
||||
|
@ -150,7 +185,7 @@ def create_table(**kwargs):
|
|||
else:
|
||||
return True
|
||||
else:
|
||||
try:
|
||||
try:
|
||||
for line in open("haproxy-wi.db.sql"):
|
||||
cur.execute(line)
|
||||
except sqltool.Error as e:
|
||||
|
@ -162,8 +197,8 @@ def create_table(**kwargs):
|
|||
return True
|
||||
cur.close()
|
||||
con.close()
|
||||
|
||||
|
||||
|
||||
|
||||
def update_db_v_31(**kwargs):
|
||||
con, cur = get_cur()
|
||||
sql = list()
|
||||
|
@ -174,6 +209,7 @@ def update_db_v_31(**kwargs):
|
|||
sql.append("INSERT INTO settings (param, value, section, `desc`) values('token_ttl', '5', 'main', 'Time to live users tokens. In days');")
|
||||
sql.append("INSERT INTO settings (param, value, section, `desc`) values('tmp_config_path', '/tmp/', 'main', 'Temp store configs, for check. Path must exist');")
|
||||
sql.append("INSERT INTO settings (param, value, section, `desc`) values('cert_path', '/etc/ssl/certs/', 'main', 'Path to SSL dir. Folder owner must be a user which set in the SSH settings. Path must exist');")
|
||||
sql.append("INSERT INTO settings (param, value, section, `desc`) values('ssl_local_path', 'certs', 'main', 'Path to dir for local save SSL certs. This is a relative path, begins with $HOME_HAPROXY-WI/app/');")
|
||||
sql.append("INSERT INTO settings (param, value, section, `desc`) values('lists_path', 'lists', 'main', 'Path to black/white lists. This is a relative path, begins with $HOME_HAPROXY-WI');")
|
||||
sql.append("INSERT INTO settings (param, value, section, `desc`) values('local_path_logs', '/var/log/haproxy.log', 'logs', 'Logs save locally, enabled by default');")
|
||||
sql.append("INSERT INTO settings (param, value, section, `desc`) values('syslog_server_enable', '0', 'logs', 'If exist syslog server for HAproxy logs, enable this option');")
|
||||
|
@ -197,7 +233,7 @@ def update_db_v_31(**kwargs):
|
|||
sql.append("INSERT INTO settings (param, value, section, `desc`) values('ldap_base', '', 'ldap', 'Base domain. Example: dc=domain, dc=com');")
|
||||
sql.append("INSERT INTO settings (param, value, section, `desc`) values('ldap_domain', '', 'ldap', 'Domain for login, that after @, like user@domain.com, without user@');")
|
||||
sql.append("INSERT INTO settings (param, value, section, `desc`) values('ldap_class_search', 'user', 'ldap', 'Class to search user');")
|
||||
sql.append("INSERT INTO settings (param, value, section, `desc`) values('ldap_user_attribute', 'sAMAccountName', 'ldap', 'User\'s attribute for search');")
|
||||
sql.append("INSERT INTO settings (param, value, section, `desc`) values('ldap_user_attribute', 'sAMAccountName', 'ldap', 'User attribute for searching');")
|
||||
sql.append("INSERT INTO settings (param, value, section, `desc`) values('ldap_search_field', 'mail', 'ldap', 'Field where user e-mail saved');")
|
||||
|
||||
for i in sql:
|
||||
|
@ -212,12 +248,12 @@ def update_db_v_31(**kwargs):
|
|||
return True
|
||||
cur.close()
|
||||
con.close()
|
||||
|
||||
|
||||
|
||||
|
||||
def update_db_v_3_4_5_2(**kwargs):
|
||||
con, cur = get_cur()
|
||||
sql = """CREATE TABLE IF NOT EXISTS `version` (`version` varchar(64)); """
|
||||
try:
|
||||
try:
|
||||
cur.execute(sql)
|
||||
con.commit()
|
||||
except sqltool.Error as e:
|
||||
|
@ -231,8 +267,8 @@ def update_db_v_3_4_5_2(**kwargs):
|
|||
return True
|
||||
cur.close()
|
||||
con.close()
|
||||
|
||||
|
||||
|
||||
|
||||
def update_db_v_3_4_5_22(**kwargs):
|
||||
con, cur = get_cur()
|
||||
if mysql_enable == '0':
|
||||
|
@ -246,125 +282,8 @@ def update_db_v_3_4_5_22(**kwargs):
|
|||
print('Cannot insert version %s' % e)
|
||||
cur.close()
|
||||
con.close()
|
||||
|
||||
|
||||
def update_db_v_3_4_7(**kwargs):
|
||||
con, cur = get_cur()
|
||||
sql = """CREATE TABLE IF NOT EXISTS `options` ( `id` INTEGER NOT NULL, `options` VARCHAR ( 64 ), `groups` VARCHAR ( 120 ), PRIMARY KEY(`id`)); """
|
||||
try:
|
||||
cur.execute(sql)
|
||||
con.commit()
|
||||
except sqltool.Error as e:
|
||||
if kwargs.get('silent') != 1:
|
||||
if e.args[0] == 'duplicate column name: id' or e == "1060 (42S21): Duplicate column name 'id' ":
|
||||
print('Updating... go to version 2.6')
|
||||
else:
|
||||
print("DB was update to 3.4.7")
|
||||
return False
|
||||
else:
|
||||
return True
|
||||
cur.close()
|
||||
con.close()
|
||||
|
||||
|
||||
def update_db_v_3_5_3(**kwargs):
|
||||
con, cur = get_cur()
|
||||
sql = """CREATE TABLE IF NOT EXISTS `saved_servers` ( `id` INTEGER NOT NULL, `server` VARCHAR ( 64 ), `description` VARCHAR ( 120 ), `groups` VARCHAR ( 120 ), PRIMARY KEY(`id`)); """
|
||||
try:
|
||||
cur.execute(sql)
|
||||
con.commit()
|
||||
except sqltool.Error as e:
|
||||
if kwargs.get('silent') != 1:
|
||||
if e.args[0] == 'duplicate column name: id' or e == "1060 (42S21): Duplicate column name 'id' ":
|
||||
print('DB was update to 3.5.3')
|
||||
else:
|
||||
print("DB was update to 3.5.3")
|
||||
return False
|
||||
else:
|
||||
return True
|
||||
cur.close()
|
||||
con.close()
|
||||
|
||||
|
||||
def update_db_v_3_8_1(**kwargs):
|
||||
con, cur = get_cur()
|
||||
sql = list()
|
||||
sql.append("INSERT INTO settings (param, value, section, `desc`) values('ldap_class_search', 'user', 'ldap', 'Class to search user');")
|
||||
sql.append("INSERT INTO settings (param, value, section, `desc`) values('ldap_user_attribute', 'sAMAccountName', 'ldap', 'User attribute for search');")
|
||||
|
||||
for i in sql:
|
||||
try:
|
||||
cur.execute(i)
|
||||
con.commit()
|
||||
except sqltool.Error:
|
||||
pass
|
||||
else:
|
||||
if kwargs.get('silent') != 1:
|
||||
print('Updating... go to version 3.12.0.0')
|
||||
|
||||
cur.close()
|
||||
con.close()
|
||||
|
||||
|
||||
def update_db_v_3_12(**kwargs):
|
||||
con, cur = get_cur()
|
||||
sql = """CREATE TABLE IF NOT EXISTS `backups` ( `id` INTEGER NOT NULL, `server` VARCHAR ( 64 ), `rhost` VARCHAR ( 120 ), `rpath` VARCHAR ( 120 ), `type` VARCHAR ( 120 ), `time` VARCHAR ( 120 ), cred INTEGER, `description` VARCHAR ( 120 ), PRIMARY KEY(`id`)); """
|
||||
try:
|
||||
cur.execute(sql)
|
||||
con.commit()
|
||||
except sqltool.Error as e:
|
||||
if kwargs.get('silent') != 1:
|
||||
if e.args[0] == 'duplicate column name: id' or e == "1060 (42S21): Duplicate column name 'id' ":
|
||||
print('Updating... go to version 3.12.1.0')
|
||||
else:
|
||||
print("Updating... go to version 3.12.1.0")
|
||||
return False
|
||||
else:
|
||||
return True
|
||||
cur.close()
|
||||
con.close()
|
||||
|
||||
|
||||
def update_db_v_3_12_1(**kwargs):
|
||||
con, cur = get_cur()
|
||||
sql = """INSERT INTO settings (param, value, section, `desc`) values('ssl_local_path', 'certs', 'main', 'Path to dir for local save SSL certs. This is a relative path, begins with $HOME_HAPROXY-WI/app/'); """
|
||||
try:
|
||||
cur.execute(sql)
|
||||
con.commit()
|
||||
except sqltool.Error as e:
|
||||
if kwargs.get('silent') != 1:
|
||||
if e.args[0] == 'duplicate column name: param' or e == "1060 (42S21): Duplicate column name 'param' ":
|
||||
print('Updating... go to version 3.12.1.0')
|
||||
else:
|
||||
print("Updating... go to version 3.12.1.0")
|
||||
return False
|
||||
else:
|
||||
return True
|
||||
cur.close()
|
||||
con.close()
|
||||
|
||||
|
||||
def update_db_v_3_13(**kwargs):
|
||||
con, cur = get_cur()
|
||||
sql = """
|
||||
ALTER TABLE `servers` ADD COLUMN keepalived INTEGER NOT NULL DEFAULT 0;
|
||||
"""
|
||||
try:
|
||||
cur.execute(sql)
|
||||
con.commit()
|
||||
except sqltool.Error as e:
|
||||
if kwargs.get('silent') != 1:
|
||||
if e.args[0] == 'duplicate column name: keepalived' or e == " 1060 (42S21): Duplicate column name 'keepalived' ":
|
||||
print('Updating... go to version 4.0.0')
|
||||
else:
|
||||
print("An error occurred:", e)
|
||||
else:
|
||||
print("Updating... go to version 4.0.0")
|
||||
|
||||
cur.close()
|
||||
con.close()
|
||||
|
||||
|
||||
def update_db_v_4(**kwargs):
|
||||
con, cur = get_cur()
|
||||
sql = list()
|
||||
|
@ -389,14 +308,14 @@ def update_db_v_4(**kwargs):
|
|||
|
||||
cur.close()
|
||||
con.close()
|
||||
|
||||
|
||||
|
||||
|
||||
def update_db_v_41(**kwargs):
|
||||
con, cur = get_cur()
|
||||
sql = """
|
||||
ALTER TABLE `servers` ADD COLUMN nginx INTEGER NOT NULL DEFAULT 0;
|
||||
"""
|
||||
try:
|
||||
try:
|
||||
cur.execute(sql)
|
||||
con.commit()
|
||||
except sqltool.Error as e:
|
||||
|
@ -410,7 +329,7 @@ def update_db_v_41(**kwargs):
|
|||
|
||||
cur.close()
|
||||
con.close()
|
||||
|
||||
|
||||
|
||||
def update_db_v_42(**kwargs):
|
||||
con, cur = get_cur()
|
||||
|
@ -1064,30 +983,89 @@ def update_db_v_4_5_9(**kwargs):
|
|||
con.close()
|
||||
|
||||
|
||||
def update_db_v_5(**kwargs):
|
||||
con, cur = get_cur()
|
||||
sql = """CREATE TABLE IF NOT EXISTS providers_creds (
|
||||
`id` INTEGER NOT NULL,
|
||||
`name` VARCHAR ( 64 ),
|
||||
`type` VARCHAR ( 64 ),
|
||||
`group` VARCHAR ( 64 ),
|
||||
`key` VARCHAR ( 64 ),
|
||||
`secret` VARCHAR ( 64 ),
|
||||
PRIMARY KEY(`id`)
|
||||
);
|
||||
"""
|
||||
try:
|
||||
cur.execute(sql)
|
||||
con.commit()
|
||||
except sqltool.Error as e:
|
||||
if kwargs.get('silent') != 1:
|
||||
if e.args[0] == 'duplicate column name: version' or e == "1060 (42S21): Duplicate column name 'version' ":
|
||||
print('Updating... DB has been updated to version 5.0.0')
|
||||
else:
|
||||
print("Updating... DB has been updated to version 5.0.0")
|
||||
|
||||
cur.close()
|
||||
con.close()
|
||||
|
||||
def update_db_v_51(**kwargs):
|
||||
con, cur = get_cur()
|
||||
sql = """CREATE TABLE IF NOT EXISTS provisioned_servers (
|
||||
`id` INTEGER NOT NULL,
|
||||
`region` VARCHAR ( 64 ),
|
||||
`instance_type` VARCHAR ( 64 ),
|
||||
`public_ip` INTEGER,
|
||||
`floating_ip` INTEGER,
|
||||
`volume_size` INTEGER,
|
||||
`backup` INTEGER,
|
||||
`monitoring` INTEGER,
|
||||
`private_networking` INTEGER,
|
||||
`ssh_key_name` VARCHAR ( 64 ),
|
||||
`ssh_ids` VARCHAR ( 64 ),
|
||||
`name` VARCHAR ( 64 ),
|
||||
`os` VARCHAR ( 64 ),
|
||||
`firewall` INTEGER,
|
||||
`provider_id` INTEGER,
|
||||
`type` VARCHAR ( 64 ),
|
||||
`status` VARCHAR ( 64 ),
|
||||
`group_id` INTEGER NOT NULL,
|
||||
`date` DATETIME default '0000-00-00 00:00:00',
|
||||
`IP` VARCHAR ( 64 ),
|
||||
`last_error` VARCHAR ( 256 ),
|
||||
`delete_on_termination` INTEGER,
|
||||
PRIMARY KEY(`id`)
|
||||
); """
|
||||
try:
|
||||
cur.execute(sql)
|
||||
con.commit()
|
||||
except sqltool.Error as e:
|
||||
if kwargs.get('silent') != 1:
|
||||
if e.args[0] == 'duplicate column name: version' or e == "1060 (42S21): Duplicate column name 'version' ":
|
||||
print('Updating... DB has been updated to version 5.0.0')
|
||||
else:
|
||||
print("Updating... DB has been updated to version 5.0.0")
|
||||
|
||||
cur.close()
|
||||
con.close()
|
||||
|
||||
|
||||
def update_ver():
|
||||
con, cur = get_cur()
|
||||
sql = """update version set version = '4.5.9.0'; """
|
||||
try:
|
||||
sql = """update version set version = '5.0.0.0'; """
|
||||
try:
|
||||
cur.execute(sql)
|
||||
con.commit()
|
||||
except sqltool.Error as e:
|
||||
print('Cannot update version')
|
||||
cur.close()
|
||||
con.close()
|
||||
|
||||
|
||||
|
||||
|
||||
def update_all():
|
||||
update_db_v_31()
|
||||
update_db_v_3_4_5_2()
|
||||
if funct.check_ver() is None:
|
||||
update_db_v_3_4_5_22()
|
||||
update_db_v_3_4_7()
|
||||
update_db_v_3_5_3()
|
||||
update_db_v_3_8_1()
|
||||
update_db_v_3_12()
|
||||
update_db_v_3_12_1()
|
||||
update_db_v_3_13()
|
||||
update_db_v_4()
|
||||
update_db_v_41()
|
||||
update_db_v_42()
|
||||
|
@ -1107,20 +1085,16 @@ def update_all():
|
|||
update_db_v_4_5_8_1()
|
||||
update_db_v_4_5_8_2()
|
||||
update_db_v_4_5_9()
|
||||
update_db_v_5()
|
||||
update_db_v_51()
|
||||
update_ver()
|
||||
|
||||
|
||||
|
||||
|
||||
def update_all_silent():
|
||||
update_db_v_31(silent=1)
|
||||
update_db_v_3_4_5_2(silent=1)
|
||||
if funct.check_ver() is None:
|
||||
update_db_v_3_4_5_22()
|
||||
update_db_v_3_4_7(silent=1)
|
||||
update_db_v_3_5_3(silent=1)
|
||||
update_db_v_3_8_1(silent=1)
|
||||
update_db_v_3_12(silent=1)
|
||||
update_db_v_3_12_1(silent=1)
|
||||
update_db_v_3_13(silent=1)
|
||||
update_db_v_4(silent=1)
|
||||
update_db_v_41(silent=1)
|
||||
update_db_v_42(silent=1)
|
||||
|
@ -1140,9 +1114,11 @@ def update_all_silent():
|
|||
update_db_v_4_5_8_1(silent=1)
|
||||
update_db_v_4_5_8_2(silent=1)
|
||||
update_db_v_4_5_9(silent=1)
|
||||
update_db_v_5(silent=1)
|
||||
update_db_v_51(silent=1)
|
||||
update_ver()
|
||||
|
||||
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
create_table()
|
||||
update_all()
|
||||
|
|
|
@ -98,6 +98,9 @@ def logging(serv, action, **kwargs):
|
|||
elif kwargs.get('keep_alive') == 1:
|
||||
mess = get_data('date_in_log') + action + "\n"
|
||||
log = open(log_path + "/keep_alive-"+get_data('logs')+".log", "a")
|
||||
elif kwargs.get('port_scanner') == 1:
|
||||
mess = get_data('date_in_log') + action + "\n"
|
||||
log = open(log_path + "/port_scanner-"+get_data('logs')+".log", "a")
|
||||
elif kwargs.get('haproxywi') == 1:
|
||||
if kwargs.get('login'):
|
||||
mess = get_data('date_in_log') + " from " + ip + " user: " + login + ", group: " + user_group + ", " + \
|
||||
|
@ -105,6 +108,10 @@ def logging(serv, action, **kwargs):
|
|||
else:
|
||||
mess = get_data('date_in_log') + " " + action + " from " + ip + "\n"
|
||||
log = open(log_path + "/haproxy-wi-"+get_data('logs')+".log", "a")
|
||||
elif kwargs.get('provisioning') == 1:
|
||||
mess = get_data('date_in_log') + " from " + ip + " user: " + login + ", group: " + user_group + ", " + \
|
||||
action + "\n"
|
||||
log = open(log_path + "/provisioning-"+get_data('logs')+".log", "a")
|
||||
else:
|
||||
mess = get_data('date_in_log') + " from " + ip + " user: " + login + ", group: " + user_group + ", " + \
|
||||
action + " for: " + serv + "\n"
|
||||
|
|
469
app/options.py
469
app/options.py
|
@ -2303,3 +2303,472 @@ if form.getvalue('show_versions'):
|
|||
|
||||
if form.getvalue('get_group_name_by_id'):
|
||||
print(sql.get_group_name_by_id(form.getvalue('get_group_name_by_id')))
|
||||
|
||||
if form.getvalue('do_new_name') or form.getvalue('aws_new_name'):
|
||||
funct.check_user_group()
|
||||
is_add = False
|
||||
if form.getvalue('do_new_name'):
|
||||
provider_name = form.getvalue('do_new_name')
|
||||
provider_group = form.getvalue('do_new_group')
|
||||
provider_token = form.getvalue('do_new_token')
|
||||
|
||||
if sql.add_provider_do(provider_name, provider_group, provider_token):
|
||||
is_add = True
|
||||
|
||||
elif form.getvalue('aws_new_name'):
|
||||
provider_name = form.getvalue('aws_new_name')
|
||||
provider_group = form.getvalue('aws_new_group')
|
||||
provider_token = form.getvalue('aws_new_key')
|
||||
provider_secret = form.getvalue('aws_new_secret')
|
||||
|
||||
if sql.add_provider_aws(provider_name, provider_group, provider_token, provider_secret):
|
||||
is_add = True
|
||||
|
||||
if is_add:
|
||||
from jinja2 import Environment, FileSystemLoader
|
||||
import http.cookies
|
||||
import os
|
||||
|
||||
cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE"))
|
||||
user_uuid = cookie.get('uuid')
|
||||
role_id = sql.get_user_role_by_uuid(user_uuid.value)
|
||||
|
||||
if role_id == 1:
|
||||
groups = sql.select_groups()
|
||||
else:
|
||||
groups = ''
|
||||
|
||||
env = Environment(loader=FileSystemLoader('templates'), autoescape=True)
|
||||
template = env.get_template('ajax/provisioning/providers.html')
|
||||
template = template.render(providers=sql.select_providers(provider_group, key=provider_token), role=role_id, groups=groups, user_group=provider_group, adding=1)
|
||||
print(template)
|
||||
|
||||
if form.getvalue('providerdel'):
|
||||
funct.check_user_group()
|
||||
if sql.delete_provider(form.getvalue('providerdel')):
|
||||
print('Ok')
|
||||
funct.logging('localhost', 'Provider has been deleted', provisioning=1)
|
||||
|
||||
if form.getvalue('awsinit') or form.getvalue('doinit'):
|
||||
funct.check_user_group()
|
||||
cmd = 'cd scripts/terraform/ && sudo terraform init -upgrade'
|
||||
output, stderr = funct.subprocess_execute(cmd)
|
||||
if stderr != '':
|
||||
print('error: '+stderr)
|
||||
else:
|
||||
if "Terraform initialized in an empty directory" in output[0]:
|
||||
print('error: There is not need modules')
|
||||
elif "mkdir .terraform: permission denied" in output[0]:
|
||||
print('error: Cannot init. Check permission to folder')
|
||||
|
||||
print(output[0])
|
||||
|
||||
if form.getvalue('awsvars') or form.getvalue('awseditvars'):
|
||||
if form.getvalue('awsvars'):
|
||||
awsvars = form.getvalue('awsvars')
|
||||
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')
|
||||
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')
|
||||
elif form.getvalue('awseditvars'):
|
||||
awsvars = form.getvalue('awseditvars')
|
||||
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')
|
||||
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')
|
||||
|
||||
aws_key, aws_secret = sql.select_aws_provider(provider)
|
||||
|
||||
cmd = 'cd scripts/terraform/ && sudo ansible-playbook var_generator.yml -i inventory -e "region={} ' \
|
||||
'group={} size={} os={} floating_ip={} volume_size={} server_name={} AWS_ACCESS_KEY={} ' \
|
||||
'AWS_SECRET_KEY={} firewall={} public_ip={} ssh_name={} delete_on_termination={} ' \
|
||||
'cloud=aws"'.format(region, group, size, oss, floating_ip, volume_size, awsvars, aws_key, aws_secret,
|
||||
firewall, public_ip, ssh_name, delete_on_termination)
|
||||
|
||||
output, stderr = funct.subprocess_execute(cmd)
|
||||
if stderr != '':
|
||||
print('error: ' + stderr)
|
||||
else:
|
||||
print('ok')
|
||||
|
||||
if form.getvalue('dovars') or form.getvalue('doeditvars'):
|
||||
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')
|
||||
elif form.getvalue('doeditvars'):
|
||||
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 = 'cd scripts/terraform/ && sudo ansible-playbook var_generator.yml -i inventory -e "region={} ' \
|
||||
'group={} size={} os={} floating_ip={} ssh_ids={} server_name={} token={} backup={} monitoring={} ' \
|
||||
'privet_net={} firewall={} floating_ip={} ssh_name={} cloud=do"'.format(region, group, size, oss, floating_ip,
|
||||
ssh_ids, dovars, token, backup, monitoring,
|
||||
privet_net, firewall, floating_ip, ssh_name)
|
||||
output, stderr = funct.subprocess_execute(cmd)
|
||||
if stderr != '':
|
||||
print('error: ' + stderr)
|
||||
else:
|
||||
print(cmd)
|
||||
print(output)
|
||||
|
||||
if form.getvalue('dovalidate') or form.getvalue('doeditvalidate'):
|
||||
if form.getvalue('dovalidate'):
|
||||
workspace = form.getvalue('dovalidate')
|
||||
group = form.getvalue('do_create_group')
|
||||
elif form.getvalue('doeditvalidate'):
|
||||
workspace = form.getvalue('doeditvalidate')
|
||||
group = form.getvalue('do_edit_group')
|
||||
|
||||
cmd = 'cd scripts/terraform/ && sudo terraform plan -no-color -input=false -target=module.do_module -var-file vars/' + workspace + '_'+group+'_do.tfvars'
|
||||
output, stderr = funct.subprocess_execute(cmd)
|
||||
if stderr != '':
|
||||
print('error: ' + stderr)
|
||||
else:
|
||||
print('ok')
|
||||
|
||||
if form.getvalue('doworkspace'):
|
||||
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 = 'cd scripts/terraform/ && sudo terraform workspace new ' + workspace + '_' + group + '_do'
|
||||
output, stderr = funct.subprocess_execute(cmd)
|
||||
|
||||
if stderr != '':
|
||||
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)
|
||||
else:
|
||||
if sql.add_server_do(region, size, privet_net, floating_ip, ssh_ids, ssh_name, workspace, oss, firewall, monitoring,
|
||||
backup, provider, group, 'Creating'):
|
||||
|
||||
from jinja2 import Environment, FileSystemLoader
|
||||
|
||||
user, user_id, role, token, servers = funct.get_users_params()
|
||||
new_server = sql.select_provisioned_servers(new=workspace, group=group, type='do')
|
||||
|
||||
env = Environment(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=sql.select_providers(group),
|
||||
role=role,
|
||||
adding=1)
|
||||
print(template)
|
||||
|
||||
if form.getvalue('doeditworkspace'):
|
||||
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')
|
||||
if sql.update_server_do(size, privet_net, floating_ip, ssh_ids, ssh_name, oss, firewall, monitoring, backup, provider,
|
||||
group, 'Creating', server_id):
|
||||
|
||||
cmd = 'cd scripts/terraform/ && sudo terraform workspace select ' + workspace + '_' + group + '_do'
|
||||
output, stderr = funct.subprocess_execute(cmd)
|
||||
|
||||
if stderr != '':
|
||||
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)
|
||||
else:
|
||||
print(cmd)
|
||||
print(output)
|
||||
|
||||
if form.getvalue('awsvalidate') or form.getvalue('awseditvalidate'):
|
||||
if form.getvalue('awsvalidate'):
|
||||
workspace = form.getvalue('awsvalidate')
|
||||
group = form.getvalue('aws_create_group')
|
||||
elif form.getvalue('awseditvalidate'):
|
||||
workspace = form.getvalue('awseditvalidate')
|
||||
group = form.getvalue('aws_edit_group')
|
||||
|
||||
cmd = 'cd scripts/terraform/ && sudo terraform plan -no-color -input=false -target=module.aws_module -var-file vars/' + workspace + '_'+group+'_aws.tfvars'
|
||||
output, stderr = funct.subprocess_execute(cmd)
|
||||
if stderr != '':
|
||||
print('error: ' + stderr)
|
||||
else:
|
||||
print('ok')
|
||||
|
||||
if form.getvalue('awsworkspace'):
|
||||
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')
|
||||
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 = 'cd scripts/terraform/ && sudo terraform workspace new ' + workspace + '_' + group + '_aws'
|
||||
output, stderr = funct.subprocess_execute(cmd)
|
||||
|
||||
if stderr != '':
|
||||
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)
|
||||
else:
|
||||
if sql.add_server_aws(region, size, public_ip, floating_ip, volume_size, ssh_name, workspace, oss, firewall,
|
||||
provider, group, 'Creating', delete_on_termination):
|
||||
|
||||
from jinja2 import Environment, FileSystemLoader
|
||||
|
||||
user, user_id, role, token, servers = funct.get_users_params()
|
||||
new_server = sql.select_provisioned_servers(new=workspace, group=group, type='aws')
|
||||
|
||||
env = Environment(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=sql.select_providers(group),
|
||||
role=role,
|
||||
adding=1)
|
||||
print(template)
|
||||
|
||||
if form.getvalue('awseditworkspace'):
|
||||
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')
|
||||
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')
|
||||
|
||||
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):
|
||||
|
||||
try:
|
||||
cmd = 'cd scripts/terraform/ && sudo terraform workspace select ' + workspace + '_' + group + '_aws'
|
||||
output, stderr = funct.subprocess_execute(cmd)
|
||||
except Exception as e:
|
||||
print('error: ' +str(e))
|
||||
|
||||
if stderr != '':
|
||||
stderr = stderr.strip()
|
||||
stderr = repr(stderr)
|
||||
stderr = stderr.replace("'", "")
|
||||
stderr = stderr.replace("\'", "")
|
||||
sql.update_provisioning_server_error(stderr, group, workspace, provider)
|
||||
print('error: ' + stderr)
|
||||
else:
|
||||
print('ok')
|
||||
|
||||
if form.getvalue('awsprovisining') or form.getvalue('awseditingprovisining') or form.getvalue('doprovisining') or form.getvalue('doeditprovisining'):
|
||||
funct.check_user_group()
|
||||
if form.getvalue('awsprovisining'):
|
||||
workspace = form.getvalue('awsprovisining')
|
||||
group = form.getvalue('aws_create_group')
|
||||
provider_id = form.getvalue('aws_create_provider')
|
||||
action = 'created'
|
||||
cloud = 'aws'
|
||||
state_name = 'aws_instance'
|
||||
elif form.getvalue('awseditingprovisining'):
|
||||
workspace = form.getvalue('awseditingprovisining')
|
||||
group = form.getvalue('aws_edit_group')
|
||||
provider_id = form.getvalue('aws_edit_provider')
|
||||
action = 'modified'
|
||||
cloud = 'aws'
|
||||
state_name = 'aws_instance'
|
||||
elif form.getvalue('doprovisining'):
|
||||
workspace = form.getvalue('doprovisining')
|
||||
group = form.getvalue('do_create_group')
|
||||
provider_id = form.getvalue('do_create_provider')
|
||||
action = 'created'
|
||||
cloud = 'do'
|
||||
state_name = 'digitalocean_droplet'
|
||||
elif form.getvalue('doeditprovisining'):
|
||||
workspace = form.getvalue('doeditprovisining')
|
||||
group = form.getvalue('do_edit_group')
|
||||
provider_id = form.getvalue('do_edit_provider')
|
||||
action = 'modified'
|
||||
cloud = 'do'
|
||||
state_name = 'digitalocean_droplet'
|
||||
|
||||
tfvars = workspace + '_'+group+'_' + cloud + '.tfvars'
|
||||
cmd = 'cd scripts/terraform/ && sudo terraform apply -auto-approve -no-color -input=false -target=module.' + cloud + '_module -var-file vars/' + tfvars
|
||||
output, stderr = funct.subprocess_execute(cmd)
|
||||
|
||||
if stderr != '':
|
||||
stderr = stderr.strip()
|
||||
stderr = repr(stderr)
|
||||
stderr = stderr.replace("'", "")
|
||||
stderr = stderr.replace("\'", "")
|
||||
sql.update_provisioning_server_status('Error', group, workspace, provider_id)
|
||||
sql.update_provisioning_server_error(stderr, group, workspace, provider_id)
|
||||
print('error: '+stderr)
|
||||
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 = funct.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 = funct.subprocess_execute(cmd)
|
||||
ips = ''
|
||||
for ip in output:
|
||||
ips += ip
|
||||
ips += ' '
|
||||
print(ips)
|
||||
sql.update_provisioning_server_status('Created', group, workspace, provider_id, update_ip=ips)
|
||||
funct.logging('localhost', 'Server ' + workspace + ' has been ' + action, provisioning=1)
|
||||
|
||||
if form.getvalue('provisiningdestroyserver'):
|
||||
funct.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 = workspace + '_' + group + '_' + cloud_type
|
||||
|
||||
cmd = 'cd scripts/terraform/ && sudo terraform workspace select ' + tf_workspace
|
||||
output, stderr = funct.subprocess_execute(cmd)
|
||||
|
||||
if stderr != '':
|
||||
stderr = stderr.strip()
|
||||
stderr = repr(stderr)
|
||||
stderr = stderr.replace("'", "")
|
||||
stderr = stderr.replace("\'", "")
|
||||
sql.update_provisioning_server_status('Error', group, workspace, provider_id)
|
||||
sql.update_provisioning_server_error(stderr, group, workspace, provider_id)
|
||||
print('error: ' + stderr)
|
||||
else:
|
||||
cmd = 'cd scripts/terraform/ && sudo terraform destroy -auto-approve -no-color -target=module.'+cloud_type+'_module -var-file vars/' + tf_workspace + '.tfvars'
|
||||
output, stderr = funct.subprocess_execute(cmd)
|
||||
|
||||
if stderr != '':
|
||||
print('error: ' + stderr)
|
||||
else:
|
||||
cmd = 'cd scripts/terraform/ && sudo terraform workspace select default && sudo terraform workspace delete -force ' + tf_workspace
|
||||
output, stderr = funct.subprocess_execute(cmd)
|
||||
|
||||
print('ok')
|
||||
funct.logging('localhost', 'Server has been destroyed', provisioning=1)
|
||||
sql.delete_provisioned_servers(server_id)
|
||||
|
||||
if form.getvalue('editAwsServer'):
|
||||
funct.check_user_group()
|
||||
server_id = form.getvalue('editAwsServer')
|
||||
user_group = form.getvalue('editAwsGroup')
|
||||
from jinja2 import Environment, FileSystemLoader
|
||||
|
||||
env = Environment(loader=FileSystemLoader('templates'))
|
||||
template = env.get_template('ajax/provisioning/aws_edit_dialog.html')
|
||||
template = template.render(server=sql.select_aws_server(server_id=server_id), providers=sql.select_providers(user_group))
|
||||
print(template)
|
||||
|
||||
if form.getvalue('editDoServer'):
|
||||
funct.check_user_group()
|
||||
server_id = form.getvalue('editDoServer')
|
||||
user_group = form.getvalue('editDoGroup')
|
||||
from jinja2 import Environment, FileSystemLoader
|
||||
|
||||
env = Environment(loader=FileSystemLoader('templates'))
|
||||
template = env.get_template('ajax/provisioning/do_edit_dialog.html')
|
||||
template = template.render(server=sql.select_do_server(server_id=server_id), providers=sql.select_providers(user_group))
|
||||
print(template)
|
||||
|
||||
if form.getvalue('edit_do_provider'):
|
||||
funct.check_user_group()
|
||||
provider_id = form.getvalue('edit_do_provider')
|
||||
new_name = form.getvalue('edit_do_provider_name')
|
||||
new_token = form.getvalue('edit_do_provider_token')
|
||||
|
||||
if sql.update_do_provider(new_name, new_token, provider_id):
|
||||
print('ok')
|
||||
funct.logging('localhost', 'Provider has been renamed. New name is ' + new_name, provisioning=1)
|
||||
|
||||
if form.getvalue('edit_aws_provider'):
|
||||
funct.check_user_group()
|
||||
provider_id = form.getvalue('edit_aws_provider')
|
||||
new_name = form.getvalue('edit_aws_provider_name')
|
||||
new_key = form.getvalue('edit_aws_provider_key')
|
||||
new_secret = form.getvalue('edit_aws_provider_secret')
|
||||
|
||||
if sql.update_aws_provider(new_name, new_key, new_secret, provider_id):
|
||||
print('ok')
|
||||
funct.logging('localhost', 'Provider has been renamed. New name is ' + new_name, provisioning=1)
|
||||
|
|
|
@ -0,0 +1,31 @@
|
|||
#!/usr/bin/env python3
|
||||
import funct
|
||||
import sql
|
||||
from jinja2 import Environment, FileSystemLoader
|
||||
env = Environment(extensions=["jinja2.ext.do"], loader=FileSystemLoader('templates/'), autoescape=True)
|
||||
template = env.get_template('provisioning.html')
|
||||
form = funct.form
|
||||
|
||||
print('Content-type: text/html\n')
|
||||
funct.check_login()
|
||||
funct.page_for_admin(level=2)
|
||||
try:
|
||||
user, user_id, role, token, servers = funct.get_users_params()
|
||||
if role == 1:
|
||||
groups=sql.select_groups()
|
||||
else:
|
||||
groups=funct.get_user_group(id=1)
|
||||
user_group = funct.get_user_group(id=1)
|
||||
except Exception as e:
|
||||
print(str(e))
|
||||
|
||||
|
||||
output_from_parsed_template = template.render(title="Servers provisioning",
|
||||
role=role,
|
||||
user=user,
|
||||
groups=groups,
|
||||
user_group=user_group,
|
||||
servers=sql.select_provisioned_servers(),
|
||||
providers=sql.select_providers(user_group),
|
||||
token=token)
|
||||
print(output_from_parsed_template)
|
|
@ -0,0 +1,16 @@
|
|||
module "aws_module" {
|
||||
source = "github.com/Aidaho12/haproxy-wi-terraform-modules?ref=aws"
|
||||
|
||||
region = var.region
|
||||
instance_type = var.instance_type
|
||||
public_ip = var.public_ip
|
||||
floating_ip = var.floating_ip
|
||||
volume_size = var.volume_size
|
||||
delete_on_termination = var.delete_on_termination
|
||||
name = var.name
|
||||
os = var.os
|
||||
ssh_key_name = var.ssh_key_name
|
||||
firewall = var.firewall
|
||||
AWS_ACCESS_KEY = var.AWS_ACCESS_KEY
|
||||
AWS_SECRET_KEY = var.AWS_SECRET_KEY
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
module "do_module" {
|
||||
source = "github.com/Aidaho12/haproxy-wi-terraform-modules?ref=digitalocean"
|
||||
|
||||
region = var.region
|
||||
size = var.size
|
||||
private_networking = var.private_networking
|
||||
floating_ip = var.floating_ip
|
||||
ssh_key_name = var.ssh_key_name
|
||||
name = var.name
|
||||
os = var.os
|
||||
ssh_ids = var.ssh_ids
|
||||
firewall = var.firewall
|
||||
backup = var.backup
|
||||
monitoring = var.monitoring
|
||||
token = var.token
|
||||
}
|
|
@ -0,0 +1 @@
|
|||
localhost
|
|
@ -0,0 +1,16 @@
|
|||
region = "{{region}}"
|
||||
instance_type = "{{size}}"
|
||||
public_ip = {% if public_ip == 'true' %}true{%else%}false{%endif%}
|
||||
|
||||
floating_ip = {% if floating_ip == 'true' %}true{%else%}false{%endif%}
|
||||
|
||||
delete_on_termination = {% if delete_on_termination == 'true' %}true{%else%}false{%endif%}
|
||||
|
||||
volume_size = {{volume_size}}
|
||||
name = "{{server_name}}"
|
||||
os = "{{os}}"
|
||||
ssh_key_name = "{{ssh_name}}"
|
||||
firewall = {% if firewall == 'true' %}true{%else%}false{%endif%}
|
||||
|
||||
AWS_ACCESS_KEY = "{{AWS_ACCESS_KEY}}"
|
||||
AWS_SECRET_KEY = "{{AWS_SECRET_KEY}}"
|
|
@ -0,0 +1,21 @@
|
|||
region = "{{region}}"
|
||||
size = "{{size}}"
|
||||
private_networking = {% if privet_net == 'true' %}true{%else%}false{%endif%}
|
||||
|
||||
floating_ip = {% if floating_ip == 'true' %}true{%else%}false{%endif%}
|
||||
|
||||
name = "{{server_name}}"
|
||||
os = "{{os}}"
|
||||
ssh_key_name = "{{ssh_name}}"
|
||||
ssh_ids = [{% if ssh_ids != 'None' %}{% for s in ssh_ids.split(',') %}{% if s != '' %}"{{s}}",{% endif %}{% endfor %}{% endif %}]
|
||||
|
||||
firewall = {% if firewall == 'true' %}true{%else%}false{%endif%}
|
||||
|
||||
backup = {% if backup == 'true' %}true{%else%}false{%endif%}
|
||||
|
||||
privet_net = {% if privet_net == 'true' %}true{%else%}false{%endif%}
|
||||
|
||||
monitoring = {% if monitoring == 'true' %}true{%else%}false{%endif%}
|
||||
|
||||
token = "{{token}}"
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
- hosts: localhost
|
||||
gather_facts: no
|
||||
connection: local
|
||||
tasks:
|
||||
- name: Create vars directory
|
||||
file:
|
||||
path: vars
|
||||
state: directory
|
||||
|
||||
- name: Create aws var file
|
||||
template:
|
||||
src: templates/aws_vars_template.j2
|
||||
dest: "vars/{{server_name}}_{{group}}_{{cloud}}.tfvars"
|
||||
when: cloud == "aws"
|
||||
|
||||
- name: Create do var file
|
||||
template:
|
||||
src: templates/do_vars_template.j2
|
||||
dest: "vars/{{server_name}}_{{group}}_{{cloud}}.tfvars"
|
||||
when: cloud == "do"
|
|
@ -0,0 +1,46 @@
|
|||
variable "region" {}
|
||||
variable "instance_type" {
|
||||
default = "123"
|
||||
}
|
||||
variable "public_ip" {
|
||||
default = false
|
||||
}
|
||||
variable "floating_ip" {}
|
||||
variable "volume_size" {
|
||||
default = "123"
|
||||
}
|
||||
variable "delete_on_termination" {
|
||||
default = false
|
||||
}
|
||||
variable "name" {}
|
||||
variable "os" {}
|
||||
variable "ssh_key_name" {}
|
||||
variable "firewall" {}
|
||||
variable "AWS_ACCESS_KEY" {
|
||||
default = "123"
|
||||
}
|
||||
variable "AWS_SECRET_KEY" {
|
||||
default = "123"
|
||||
}
|
||||
|
||||
variable "size" {
|
||||
default = "123"
|
||||
}
|
||||
variable "private_networking" {
|
||||
default = false
|
||||
}
|
||||
variable "ssh_ids" {
|
||||
default = ""
|
||||
}
|
||||
variable "backup" {
|
||||
default = false
|
||||
}
|
||||
variable "privet_net" {
|
||||
default = false
|
||||
}
|
||||
variable "monitoring" {
|
||||
default = false
|
||||
}
|
||||
variable "token" {
|
||||
default = "123"
|
||||
}
|
370
app/sql.py
370
app/sql.py
|
@ -210,7 +210,6 @@ def add_setting_for_new_group(group_id):
|
|||
sql.append("INSERT INTO settings (param, value, section, `desc`, `group`) values('local_path_logs', '/var/log/haproxy.log', 'logs', 'Logs save locally, enabled by default','" + group_id + "');")
|
||||
sql.append("INSERT INTO settings (param, value, section, `desc`, `group`) values('syslog_server_enable', '0', 'logs', 'If exist syslog server for HAproxy logs, enable this option','" + group_id + "');")
|
||||
sql.append("INSERT INTO settings (param, value, section, `desc`, `group`) values('syslog_server', '0', 'logs', 'IP address syslog server','" + group_id + "');")
|
||||
sql.append("INSERT INTO settings (param, value, section, `desc`, `group`) values('log_time_storage', '14', 'logs', 'Time of storage of logs of user activity, in days','" + group_id + "');")
|
||||
sql.append("INSERT INTO settings (param, value, section, `desc`, `group`) values('stats_user', 'admin', 'haproxy', 'Username for Stats web page HAproxy','" + group_id + "');")
|
||||
sql.append("INSERT INTO settings (param, value, section, `desc`, `group`) values('stats_password', 'password', 'haproxy', 'Password for Stats web page HAproxy','" + group_id + "');")
|
||||
sql.append("INSERT INTO settings (param, value, section, `desc`, `group`) values('stats_port', '8085', 'haproxy', 'Port Stats web page HAproxy','" + group_id + "');")
|
||||
|
@ -2427,6 +2426,375 @@ def select_geoip_country_codes():
|
|||
return cur.fetchall()
|
||||
|
||||
|
||||
def add_provider_do(provider_name, provider_group, provider_token):
|
||||
con, cur = get_cur()
|
||||
sql = """ insert into providers_creds (name, type, `group`, key) values ('%s', 'do', '%s', '%s')""" % (provider_name, provider_group, provider_token)
|
||||
|
||||
try:
|
||||
cur.execute(sql)
|
||||
return True
|
||||
except sqltool.Error as e:
|
||||
funct.out_error(e)
|
||||
return False
|
||||
finally:
|
||||
cur.close()
|
||||
con.close()
|
||||
|
||||
|
||||
def add_provider_aws(provider_name, provider_group, provider_key, provider_secret):
|
||||
con, cur = get_cur()
|
||||
sql = """ insert into providers_creds (name, type, `group`, key, secret) values ('%s', 'aws', '%s', '%s', '%s')""" % (provider_name, provider_group, provider_key, provider_secret)
|
||||
|
||||
try:
|
||||
cur.execute(sql)
|
||||
return True
|
||||
except sqltool.Error as e:
|
||||
funct.out_error(e)
|
||||
return False
|
||||
finally:
|
||||
cur.close()
|
||||
con.close()
|
||||
|
||||
|
||||
def select_providers(user_group, **kwargs):
|
||||
con, cur = get_cur()
|
||||
|
||||
if user_group == 1:
|
||||
user_group = ''
|
||||
if kwargs.get('key'):
|
||||
user_group += " where key = '%s' " % kwargs.get('key')
|
||||
else:
|
||||
user_group = "where `group` = '%s'" % user_group
|
||||
if kwargs.get('key'):
|
||||
user_group += " and key = '%s' " % kwargs.get('key')
|
||||
|
||||
sql = """ select * from providers_creds %s""" % user_group
|
||||
|
||||
try:
|
||||
cur.execute(sql)
|
||||
except sqltool.Error as e:
|
||||
funct.out_error(e)
|
||||
else:
|
||||
return cur.fetchall()
|
||||
finally:
|
||||
cur.close()
|
||||
con.close()
|
||||
|
||||
|
||||
def delete_provider(provider_id):
|
||||
con, cur = get_cur()
|
||||
sql = """ delete from providers_creds where id = '%s'""" % provider_id
|
||||
|
||||
try:
|
||||
cur.execute(sql)
|
||||
return True
|
||||
except sqltool.Error as e:
|
||||
funct.out_error(e)
|
||||
return False
|
||||
finally:
|
||||
cur.close()
|
||||
con.close()
|
||||
|
||||
|
||||
def add_server_aws(region, instance_type, public_ip, floating_ip, volume_size, ssh_key_name, name, os, firewall, provider_id, group_id, status, delete_on_termination):
|
||||
con, cur = get_cur()
|
||||
if mysql_enable == '1':
|
||||
sql = """ insert into provisioned_servers
|
||||
(region, instance_type, public_ip, floating_ip, volume_size, ssh_key_name, name, os, firewall, provider_id, group_id, type, status, date, delete_on_termination)
|
||||
values ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', 'aws', '%s', now()), '%s'""" % (
|
||||
region, instance_type, public_ip, floating_ip, volume_size, ssh_key_name, name, os, firewall, provider_id,
|
||||
group_id, status, delete_on_termination)
|
||||
|
||||
else:
|
||||
sql = """ insert into provisioned_servers
|
||||
(region, instance_type, public_ip, floating_ip, volume_size, ssh_key_name, name, os, firewall, provider_id, group_id, type, status, date, delete_on_termination)
|
||||
values ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', 'aws', '%s', datetime('now', 'localtime'), '%s')""" % (
|
||||
region, instance_type, public_ip, floating_ip, volume_size, ssh_key_name, name, os, firewall, provider_id,
|
||||
group_id, status, delete_on_termination)
|
||||
|
||||
try:
|
||||
cur.execute(sql)
|
||||
return True
|
||||
except sqltool.Error as e:
|
||||
funct.out_error(e)
|
||||
return False
|
||||
finally:
|
||||
cur.close()
|
||||
con.close()
|
||||
|
||||
|
||||
def add_server_do(region, size, privet_net, floating_ip, ssh_ids, ssh_key_name, name, oss, firewall, monitoring, backup, provider_id, group_id, status):
|
||||
con, cur = get_cur()
|
||||
if mysql_enable == '1':
|
||||
sql = """ insert into provisioned_servers
|
||||
(region, instance_type, private_networking, floating_ip, ssh_ids, ssh_key_name, name, os, firewall, monitoring, backup, provider_id, group_id, type, status, date)
|
||||
values ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', 'do', '%s', now())""" % (
|
||||
region, size, privet_net, floating_ip, ssh_ids, ssh_key_name, name, oss, firewall, monitoring, backup, provider_id,
|
||||
group_id, status)
|
||||
|
||||
else:
|
||||
sql = """ insert into provisioned_servers
|
||||
(region, instance_type, private_networking, floating_ip, ssh_ids, ssh_key_name, name, os, firewall, monitoring, backup, provider_id, group_id, type, status, date)
|
||||
values ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', 'do', '%s', datetime('now', 'localtime'))""" % (
|
||||
region, size, privet_net, floating_ip, ssh_ids, ssh_key_name, name, oss, firewall, monitoring, backup, provider_id,
|
||||
group_id, status)
|
||||
|
||||
try:
|
||||
cur.execute(sql)
|
||||
return True
|
||||
except sqltool.Error as e:
|
||||
funct.out_error(e)
|
||||
return False
|
||||
finally:
|
||||
cur.close()
|
||||
con.close()
|
||||
|
||||
|
||||
def select_aws_server(server_id):
|
||||
con, cur = get_cur()
|
||||
sql = """ select region, instance_type, public_ip, floating_ip, volume_size, ssh_key_name, name, os, firewall, provider_id, group_id, id, delete_on_termination
|
||||
from provisioned_servers where id = '%s' """ % server_id
|
||||
|
||||
try:
|
||||
cur.execute(sql)
|
||||
except sqltool.Error as e:
|
||||
funct.out_error(e)
|
||||
else:
|
||||
return cur.fetchall()
|
||||
finally:
|
||||
cur.close()
|
||||
con.close()
|
||||
|
||||
|
||||
def select_do_server(server_id):
|
||||
con, cur = get_cur()
|
||||
sql = """ select region, instance_type, private_networking, floating_ip, ssh_ids, ssh_key_name, name, os, firewall, backup, monitoring, provider_id, group_id, id
|
||||
from provisioned_servers where id = '%s' """ % server_id
|
||||
|
||||
try:
|
||||
cur.execute(sql)
|
||||
except sqltool.Error as e:
|
||||
funct.out_error(e)
|
||||
else:
|
||||
return cur.fetchall()
|
||||
finally:
|
||||
cur.close()
|
||||
con.close()
|
||||
|
||||
|
||||
def update_provisioning_server_status(status, user_group_id, name, provider_id, **kwargs):
|
||||
con, cur = get_cur()
|
||||
|
||||
sql = """ update provisioned_servers set status = '%s ' where group_id = '%s'
|
||||
and name = '%s' and provider_id = '%s' """ % (status, user_group_id, name, provider_id)
|
||||
|
||||
if kwargs.get('update_ip'):
|
||||
sql = """ update provisioned_servers set
|
||||
status = '%s',
|
||||
IP = '%s'
|
||||
where group_id = '%s'
|
||||
and name = '%s' and provider_id = '%s' """ % (status, kwargs.get('update_ip'), user_group_id, name, provider_id)
|
||||
|
||||
try:
|
||||
cur.execute(sql)
|
||||
con.commit()
|
||||
except sqltool.Error as e:
|
||||
funct.out_error(e)
|
||||
con.rollback()
|
||||
cur.close()
|
||||
con.close()
|
||||
|
||||
|
||||
def update_provisioning_server_error(status, user_group_id, name, provider_id):
|
||||
con, cur = get_cur()
|
||||
|
||||
sql = """ update provisioned_servers set last_error = '%s ' where group_id = '%s'
|
||||
and name = '%s' and provider_id = '%s' """ % (status, user_group_id, name, provider_id)
|
||||
|
||||
try:
|
||||
cur.execute(sql)
|
||||
con.commit()
|
||||
except sqltool.Error as e:
|
||||
funct.out_error(e)
|
||||
con.rollback()
|
||||
cur.close()
|
||||
con.close()
|
||||
|
||||
|
||||
def update_server_aws(region, size, public_ip, floating_ip, volume_size, ssh_name, workspace, oss, firewall, provider, group, status, server_id, delete_on_termination):
|
||||
con, cur = get_cur()
|
||||
sql = """ update provisioned_servers set
|
||||
region = '%s',
|
||||
instance_type = '%s',
|
||||
public_ip = '%s',
|
||||
floating_ip = '%s',
|
||||
volume_size = '%s',
|
||||
ssh_key_name = '%s',
|
||||
name = '%s',
|
||||
os = '%s',
|
||||
firewall = '%s',
|
||||
provider_id = '%s',
|
||||
group_id = '%s',
|
||||
status = '%s',
|
||||
delete_on_termination = '%s'
|
||||
where id = '%s' """ % (region, size, public_ip, floating_ip, volume_size, ssh_name, workspace, oss, firewall, provider, group, status, delete_on_termination, server_id)
|
||||
|
||||
try:
|
||||
cur.execute(sql)
|
||||
con.commit()
|
||||
return True
|
||||
except sqltool.Error as e:
|
||||
funct.out_error(e)
|
||||
con.rollback()
|
||||
return False
|
||||
finally:
|
||||
cur.close()
|
||||
con.close()
|
||||
|
||||
|
||||
def update_server_do(size, privet_net, floating_ip, ssh_ids, ssh_name, oss, firewall, monitoring, backup, provider,
|
||||
group, status, server_id):
|
||||
con, cur = get_cur()
|
||||
sql = """ update provisioned_servers set
|
||||
instance_type = '%s',
|
||||
private_networking = '%s',
|
||||
floating_ip = '%s',
|
||||
ssh_ids = '%s',
|
||||
ssh_key_name = '%s',
|
||||
os = '%s',
|
||||
firewall = '%s',
|
||||
monitoring = '%s',
|
||||
backup = '%s',
|
||||
provider_id = '%s',
|
||||
group_id = '%s',
|
||||
status = '%s'
|
||||
where id = '%s' """ % (
|
||||
size, privet_net, floating_ip, ssh_ids, ssh_name, oss, firewall, monitoring, backup, provider, group, status, server_id)
|
||||
|
||||
try:
|
||||
cur.execute(sql)
|
||||
con.commit()
|
||||
return True
|
||||
except sqltool.Error as e:
|
||||
funct.out_error(e)
|
||||
con.rollback()
|
||||
return False
|
||||
finally:
|
||||
cur.close()
|
||||
con.close()
|
||||
|
||||
|
||||
def delete_provisioned_servers(server_id):
|
||||
con, cur = get_cur()
|
||||
sql = """ delete from provisioned_servers where id = '%s' """ % server_id
|
||||
try:
|
||||
cur.execute(sql)
|
||||
con.commit()
|
||||
except sqltool.Error as e:
|
||||
funct.out_error(e)
|
||||
con.rollback()
|
||||
cur.close()
|
||||
con.close()
|
||||
|
||||
|
||||
def select_provisioned_servers(**kwargs):
|
||||
con, cur = get_cur()
|
||||
sql = """select id, name, provider_id, type, group_id, instance_type, status, date, region, os, IP, last_error from provisioned_servers"""
|
||||
|
||||
if kwargs.get('all'):
|
||||
sql = """select * from provisioned_servers where id = '%s' """ % kwargs.get('all')
|
||||
|
||||
if kwargs.get('new'):
|
||||
sql = """select id, name, provider_id, type, group_id, instance_type, status, date, region, os, IP, last_error from provisioned_servers
|
||||
where name = '%s' and group_id = '%s' and type = '%s' """ % (kwargs.get('new'), kwargs.get('group'), kwargs.get('type'))
|
||||
try:
|
||||
cur.execute(sql)
|
||||
except sqltool.Error as e:
|
||||
funct.out_error(e)
|
||||
else:
|
||||
return cur.fetchall()
|
||||
cur.close()
|
||||
con.close()
|
||||
|
||||
|
||||
def select_aws_provider(provider_id):
|
||||
con, cur = get_cur()
|
||||
sql = """ select key, secret from providers_creds where id = '%s'""" % provider_id
|
||||
|
||||
try:
|
||||
cur.execute(sql)
|
||||
except sqltool.Error as e:
|
||||
cur.close()
|
||||
con.close()
|
||||
return ""
|
||||
else:
|
||||
for p in cur.fetchall():
|
||||
aws_key = p[0]
|
||||
aws_secret = p[1]
|
||||
cur.close()
|
||||
con.close()
|
||||
return aws_key, aws_secret
|
||||
|
||||
|
||||
def select_do_provider(provider_id):
|
||||
con, cur = get_cur()
|
||||
sql = """ select key from providers_creds where id = '%s'""" % provider_id
|
||||
|
||||
try:
|
||||
cur.execute(sql)
|
||||
except sqltool.Error as e:
|
||||
cur.close()
|
||||
con.close()
|
||||
return ""
|
||||
else:
|
||||
for p in cur.fetchall():
|
||||
token = p[0]
|
||||
cur.close()
|
||||
con.close()
|
||||
return token
|
||||
|
||||
|
||||
def update_do_provider(new_name, new_token, provider_id):
|
||||
con, cur = get_cur()
|
||||
sql = """ update providers_creds set
|
||||
name = '%s',
|
||||
key = '%s'
|
||||
where id = '%s' """ % (new_name, new_token, provider_id)
|
||||
|
||||
try:
|
||||
cur.execute(sql)
|
||||
con.commit()
|
||||
return True
|
||||
except sqltool.Error as e:
|
||||
funct.out_error(e)
|
||||
con.rollback()
|
||||
return False
|
||||
finally:
|
||||
cur.close()
|
||||
con.close()
|
||||
|
||||
|
||||
def update_aws_provider(new_name, new_key, new_secret, provider_id):
|
||||
con, cur = get_cur()
|
||||
sql = """ update providers_creds set
|
||||
name = '%s',
|
||||
key = '%s',
|
||||
secret = '%s'
|
||||
where id = '%s' """ % (new_name, new_key, new_secret, provider_id)
|
||||
|
||||
try:
|
||||
cur.execute(sql)
|
||||
con.commit()
|
||||
return True
|
||||
except sqltool.Error as e:
|
||||
funct.out_error(e)
|
||||
con.rollback()
|
||||
return False
|
||||
finally:
|
||||
cur.close()
|
||||
con.close()
|
||||
|
||||
|
||||
form = funct.form
|
||||
error_mess = 'error: All fields must be completed'
|
||||
|
||||
|
|
|
@ -0,0 +1,159 @@
|
|||
{% from 'include/input_macros.html' import input, select, checkbox %}
|
||||
{% for s in server %}
|
||||
<div id="aws_edit" style="display: none; padding: 0 2px 0 0; margin-left: 1px; margin-right: -4px;">
|
||||
<table class="overview provisioning_table">
|
||||
{% include 'include/tr_validate_tips.html' %}
|
||||
<tr>
|
||||
<td colspan="2" class="headers">
|
||||
<b>General information</b>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="padding20">
|
||||
Server name
|
||||
</td>
|
||||
<td>
|
||||
<span id="aws_edit_server_name">{{s.6}}</span>
|
||||
</td>
|
||||
</tr>
|
||||
{{input('aws_edit_group', value=s.10, type='hidden')}}
|
||||
{{input('aws_edit_id', value=s.11, type='hidden')}}
|
||||
<tr>
|
||||
<td class="padding20">
|
||||
Provider credentials
|
||||
<span class="need-field">*</span>
|
||||
</td>
|
||||
<td>
|
||||
<select id="aws_edit_id_provider">
|
||||
{% for p in providers %}
|
||||
{% if p.2 == 'aws' %}
|
||||
{% if s.9|int() == p.0|int() %}
|
||||
<option value="{{ p.0 }}" selected>{{ p.1 }}</option>
|
||||
{% else %}
|
||||
<option value="{{ p.0 }}">{{ p.1 }}</option>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="padding20">
|
||||
Region
|
||||
</td>
|
||||
<td>
|
||||
<span id="aws_edit_region">{{s.0}}</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2" class="headers">
|
||||
<b>Instance</b>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="padding20 padding-top20">
|
||||
Instance type
|
||||
<span class="need-field">*</span>
|
||||
</td>
|
||||
<td>
|
||||
{{input('aws_edit_size', size='30', value=s.1)}}
|
||||
<div class="tooltip tooltipTop tooltipTd">
|
||||
Instance types list is <a href="https://aws.amazon.com/ec2/instance-types/" title="Instance types list" target="_blank">here</a>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="padding20">
|
||||
OS
|
||||
<span class="need-field">*</span>
|
||||
</td>
|
||||
<td>
|
||||
{% set oss = dict() %}
|
||||
{% set oss = {'centos-7':'Centos 7 x64','ubuntu-18.04':'Ubuntu 18.04 x64','ubuntu-18.10':'Ubuntu 18.10 x64',
|
||||
'debian-10':'Debian 10 x86','debian-9':'Debian 9 x86','rhel-7':'RHEL 7 x86','rhel-8':'RHEL 8 x86',
|
||||
'amazon-2_lts':'Amazon Linux 2 x86'} %}
|
||||
{{ select('aws_edit_oss', values=oss, first=s.7, disabled='false') }}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="padding20 padding-top20">
|
||||
SSH key pair name
|
||||
<span class="need-field">*</span>
|
||||
</td>
|
||||
<td>
|
||||
{{input('aws_edit_ssh_name', size='30', value=s.5)}}
|
||||
<div class="tooltip tooltipTop tooltipTd">SSH key must exists in region where instance create</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2" class="headers">
|
||||
<b>Volume</b>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="padding20 padding-top20">
|
||||
Volume size
|
||||
<span class="need-field">*</span>
|
||||
</td>
|
||||
<td>
|
||||
{{input('aws_edit_volume_size', size='30', value=s.4, type='number')}}
|
||||
<div class="tooltip tooltipTop tooltipTd">Size in GB</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="padding20 padding-top20">Delete on termination</td>
|
||||
<td>
|
||||
{% set checked='checked' %}
|
||||
{% if s.12 == 'false' %}
|
||||
{% set checked='' %}
|
||||
{% endif %}
|
||||
{{checkbox('aws_edit_delete_on_termination', checked=checked)}}
|
||||
<div class="tooltip tooltipTop tooltipTd">Whether the volume should be destroyed on instance termination</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2" class="headers">
|
||||
<b>Network</b>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="padding20">Public IP</td>
|
||||
<td>
|
||||
<select id="aws_edit_public_ip">
|
||||
{% if s.2 == 'true' %}
|
||||
<option value="public" selected>Public IP</option>
|
||||
{% else %}
|
||||
<option value="public">Public IP</option>
|
||||
{% endif %}
|
||||
{% if s.3 == 'true' %}
|
||||
<option value="elastic" selected>Elastic IP</option>
|
||||
{% else %}
|
||||
<option value="elastic">Elastic IP</option>
|
||||
{% endif %}
|
||||
{% if s.2 == 'false' and s.3 == 'false' %}
|
||||
<option value="none" selected>None</option>
|
||||
{% else %}
|
||||
<option value="none">None</option>
|
||||
{% endif %}
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
{% set checked='checked' %}
|
||||
{% if s.8 == 'false' %}
|
||||
{% set checked='' %}
|
||||
{% endif %}
|
||||
<td class="padding20" style="padding-bottom: 25px;padding-top: 25px;">Firewall</td>
|
||||
<td>
|
||||
{{checkbox('aws_edit_firewall', checked=checked)}}
|
||||
<div class="tooltip tooltipTop tooltipTd">HAProxy-WI will create Security group and open 22, 443, 1999, 8085, 8086 ports. Otherwise all ports will be closed</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<p class="validateTips alert alert-warning">Be aware: some changes may cause server re-creation. And all your data will be lost</p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
{% endfor %}
|
|
@ -0,0 +1,188 @@
|
|||
{% from 'include/input_macros.html' import input, select, checkbox %}
|
||||
{% for s in server %}
|
||||
<div id="do_edit" style="display: none; padding: 0 2px 0 0; margin-left: 1px; margin-right: -4px;">
|
||||
<table class="overview provisioning_table">
|
||||
{% include 'include/tr_validate_tips.html' %}
|
||||
<tr>
|
||||
<td colspan="2" class="headers">
|
||||
<b>General information</b>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="padding20">
|
||||
Server name
|
||||
</td>
|
||||
<td>
|
||||
<span id="do_edit_server_name">{{s.6}}</span>
|
||||
</td>
|
||||
</tr>
|
||||
{{input('do_edit_group', value=s.12, type='hidden')}}
|
||||
{{input('do_edit_id', value=s.13, type='hidden')}}
|
||||
<tr>
|
||||
<td class="padding20">
|
||||
Provider credentials
|
||||
<span class="need-field">*</span>
|
||||
</td>
|
||||
<td>
|
||||
<select id="do_edit_id_provider">
|
||||
{% for p in providers %}
|
||||
{% if p.2 == 'do' %}
|
||||
{% if s.11|int() == p.0|int() %}
|
||||
<option value="{{ p.0 }}" selected>{{ p.1 }}</option>
|
||||
{% else %}
|
||||
<option value="{{ p.0 }}">{{ p.1 }}</option>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="padding20 padding-top20">
|
||||
Region
|
||||
</td>
|
||||
<td>
|
||||
<span id="do_edit_regions">{{s.0}}</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2" class="headers">
|
||||
<b>Instance</b>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="padding20">
|
||||
Size
|
||||
<span class="need-field">*</span>
|
||||
</td>
|
||||
<td>{{input('do_edit_size', size='30', value=s.1)}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="padding20">
|
||||
OS
|
||||
<span class="need-field">*</span>
|
||||
</td>
|
||||
<td>
|
||||
{% set oss = dict() %}
|
||||
{% set oss = {'centos-7-x64':'Centos 7 x64', 'centos-8-x64':'Centos 8 x64','ubuntu-18-04-x64':'Ubuntu 18.04 x64','ubuntu-20-04-x64':'Ubuntu 20.04 x64',
|
||||
'ubuntu-20-10-x64':'Ubuntu 20.10 x64','debian-10-x64':'Debian 10 x86','debian-9-x64':'Debian 9 x86'} %}
|
||||
{{ select('do_edit_oss', values=oss, first=s.7, disabled='false') }}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="padding20">
|
||||
SSH
|
||||
<span class="need-field">*</span>
|
||||
</td>
|
||||
<td>
|
||||
<select id="do_edit_ssh_choose">
|
||||
{% if s.5 != 'None' %}
|
||||
<option value="ssh_name" selected>Set SSH key name</option>
|
||||
{% else %}
|
||||
<option value="ssh_name">Set SSH key name</option>
|
||||
{% endif %}
|
||||
{% if s.4 != 'None' %}
|
||||
<option value="ssh_ids" selected>Set SSH key ids</option>
|
||||
{% else %}
|
||||
<option value="ssh_ids">Set SSH key ids</option>
|
||||
{% endif %}
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="do_edit_ssh_ids_tr" {% if s.4 == 'None' %}style="display: none;"{% endif %}>
|
||||
<td class="padding20 padding-top20">
|
||||
SSH key ids
|
||||
<span class="need-field">*</span>
|
||||
</td>
|
||||
<td>
|
||||
{{input('do_edit_ssh_ids', size='30', value=s.4)}}
|
||||
<div class="tooltip tooltipTop tooltipTd">List comma separated. Required if SSH key name is empty</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="do_edit_ssh_name_tr" {% if s.5 == 'None' %}style="display: none;"{% endif %}>
|
||||
<td class="padding20 padding-top20">
|
||||
SSH key name
|
||||
<span class="need-field">*</span>
|
||||
</td>
|
||||
<td>
|
||||
{{input('do_edit_ssh_name', size='30', value=s.5)}}
|
||||
<div class="tooltip tooltipTop tooltipTd">Required if SSH key ids is empty</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
{% set checked='checked' %}
|
||||
{% if s.10 == 'false' %}
|
||||
{% set checked='' %}
|
||||
{% endif %}
|
||||
<td class="padding20">Monitoring</td>
|
||||
<td>
|
||||
{{checkbox('do_edit_monitoring', checked=checked)}}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
{% set checked='checked' %}
|
||||
{% if s.9 == 'false' %}
|
||||
{% set checked='' %}
|
||||
{% endif %}
|
||||
<td class="padding20">Backup</td>
|
||||
<td>
|
||||
{{checkbox('do_edit_backup', checked=checked)}}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2" class="headers">
|
||||
<b>Network</b>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
{% set checked='checked' %}
|
||||
{% if s.2 == 'false' %}
|
||||
{% set checked='' %}
|
||||
{% endif %}
|
||||
<td class="padding20">Private IP</td>
|
||||
<td>
|
||||
{{checkbox('do_edit_private_networking', checked=checked)}}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
{% set checked='checked' %}
|
||||
{% if s.3 == 'false' %}
|
||||
{% set checked='' %}
|
||||
{% endif %}
|
||||
<td class="padding20">Floating Ip</td>
|
||||
<td>
|
||||
{{checkbox('do_edit_floating_ip', checked=checked)}}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
{% set checked='checked' %}
|
||||
{% if s.8 == 'false' %}
|
||||
{% set checked='' %}
|
||||
{% endif %}
|
||||
<td class="padding20" style="padding-bottom: 25px;padding-top: 25px;">Firewall</td>
|
||||
<td>
|
||||
{{checkbox('do_edit_firewall', checked=checked)}}
|
||||
<div class="tooltip tooltipTop tooltipTd">HAProxy-WI will create Security group and open 22, 443, 1999, 8085, 8086 ports. Otherwise all ports will be closed</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<p class="validateTips alert alert-warning">Be aware: some changes may cause server re-creation. And all your data will be lost</p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<script>
|
||||
$( function() {
|
||||
$('#do_edit_ssh_choose').on('selectmenuchange', function (){
|
||||
if ($('#do_edit_ssh_choose option:selected').val() == 'ssh_name') {
|
||||
$('#do_edit_ssh_name_tr').show();
|
||||
$('#do_edit_ssh_ids_tr').hide();
|
||||
} else if ($('#do_edit_ssh_choose option:selected').val() == 'ssh_ids') {
|
||||
$('#do_edit_ssh_name_tr').hide();
|
||||
$('#do_edit_ssh_ids_tr').show();
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</div>
|
||||
{% endfor %}
|
|
@ -0,0 +1,39 @@
|
|||
{% for p in providers %}
|
||||
<tr id="provider-{{p.0}}" class="{{ loop.cycle('odd', 'even') }} {% if adding %}newprovider{% endif %}">
|
||||
<td class="padding10 first-collumn"><span id="provider-name-{{p.0}}">{{p.1}}</span></td>
|
||||
<td style="width: {% if role != 1 %}100{% else %} 10{% endif %}%;">
|
||||
<span id="provider-type-{{p.0}}">
|
||||
{% if p.2 == 'do' %}
|
||||
DigitalOcean
|
||||
{% set onclickEditAction = 'editDoProvider' %}
|
||||
{% elif p.2 == 'aws' %}
|
||||
AWS
|
||||
{% set onclickEditAction = 'editAwsProvider' %}
|
||||
{% endif %}
|
||||
</span>
|
||||
</td>
|
||||
{% if role == 1 %}
|
||||
<td style="width: 100%">
|
||||
{% for g in groups %}
|
||||
{% if adding %}
|
||||
{% if user_group|int() == g.0|int() %}
|
||||
<span id="provider-group-{{p.0}}">{{ g.1 }}</span>
|
||||
{% endif %}
|
||||
{% else %}
|
||||
{% if p.3|int() == g.0|int() %}
|
||||
<span id="provider-group-{{p.0}}">{{ g.1 }}</span>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</td>
|
||||
{% else %}
|
||||
<span id="provider-group-{{p.0}}" style="display: none;">user_group</span>
|
||||
{% endif %}
|
||||
<td>
|
||||
<a class="edit" onclick="{{onclickEditAction}}({{p.0}})" title="Edit provider {{p.1}}" style="cursor: pointer;"></a>
|
||||
</td>
|
||||
<td>
|
||||
<a class="delete" onclick="confirmDeleteProvider({{p.0}})" title="Delete provider {{p.1}}" style="cursor: pointer;"></a>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
|
@ -0,0 +1,71 @@
|
|||
{% for s in servers %}
|
||||
<tr id="server-{{s.0}}" class="{{ loop.cycle('odd', 'even') }} {% if adding %}newserver{% endif %}">
|
||||
<td class="padding10 first-collumn"><span id="server-name-{{s.0}}">{{s.1}}</span></td>
|
||||
<td>
|
||||
{% for p in providers %}
|
||||
{% if p.0|int() == s.2|int() %}
|
||||
<span>{{ p.1 }}</span>
|
||||
<span id="server-provider-{{s.0}}" style="display: none;">{{p.0}}</span>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</td>
|
||||
{% if role == 1 %}
|
||||
<td>
|
||||
{% for g in groups %}
|
||||
{% if adding %}
|
||||
{% if user_group|int() == g.0|int() %}
|
||||
{{ g.1 }}
|
||||
<span id="server-group-{{s.0}}" style="display: none;">{{ g.0 }}</span>
|
||||
{% endif %}
|
||||
{% else %}
|
||||
{% if s.4|int() == g.0|int() %}
|
||||
{{ g.1 }}
|
||||
<span id="server-group-{{s.0}}" style="display: none;">{{ g.0 }}</span>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</td>
|
||||
{% else %}
|
||||
<span id="server-group-{{s.0}}" style="display: none;">{{user_group}}</span>
|
||||
{% endif %}
|
||||
<td>
|
||||
{% if s.3 == 'do' %}
|
||||
DigitalOcean
|
||||
{% set onclickEditAction = 'editDoServer' %}
|
||||
{% elif s.3 == 'aws' %}
|
||||
AWS
|
||||
{% set onclickEditAction = 'editAwsServer' %}
|
||||
{% endif %}
|
||||
<span id="server-cloud-{{s.0}}" style="display: none;">{{s.3}}</span>
|
||||
</td>
|
||||
<td>
|
||||
{{s.8}}
|
||||
</td>
|
||||
<td>
|
||||
<span id="sever-os-{{s.0}}">{{s.9}}</span>
|
||||
</td>
|
||||
<td>
|
||||
<span id="sever-ip-{{s.0}}">{{s.10}}</span>
|
||||
</td>
|
||||
<td>
|
||||
<span id="sever-size-{{s.0}}">{{s.5}}</span>
|
||||
</td>
|
||||
<td>
|
||||
{% if s.6 == 'Created ' %}
|
||||
{% set style='сolor: green;' %}
|
||||
{% elif s.6 == 'Error ' %}
|
||||
{% set style='color: red;cursor: help;' %}
|
||||
{% endif %}
|
||||
<span id="sever-status-{{s.0}}" title="Last error: {{s.11}}" style="font-weight: bold;{{style}}">{{s.6}}</span>
|
||||
</td>
|
||||
<td>
|
||||
{{s.7}}
|
||||
</td>
|
||||
<td>
|
||||
<a class="edit" onclick="{{onclickEditAction}}({{s.0}})" title="Edit server {{s.1}}" style="cursor: pointer;"></a>
|
||||
</td>
|
||||
<td>
|
||||
<a class="delete" onclick="confirmDeleteProvisionedServer({{s.0}})" title="Delete server {{s.1}}" style="cursor: pointer;"></a>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
|
@ -117,6 +117,7 @@
|
|||
<li><a href="/app/servers.py#settings" title="Servers: Manage HAProxy-WI settings - HAProxy-WI" class="settings head-submenu">Settings</a></li>
|
||||
<li><a href="/app/servers.py#installproxy" title="Servers: Proxy service installation - HAProxy-WI" class="hap-menu head-submenu">Proxy installation</a> </li>
|
||||
<li><a href="/app/servers.py#installmon" title="Servers: Monitoring service installation - HAProxy-WI" class="hap1 head-submenu">Monitoring installation</a> </li>
|
||||
<li><a href="/app/provisioning.py" title="Servers: Provisioning - HAProxy-WI" class="hap1 head-submenu">Server provisioning</a> </li>
|
||||
<li><a href="/app/viewlogs.py?type=2" title="Servers: View internal logs - HAProxy-WI" class="logs head-submenu">Internal logs</a></li>
|
||||
<li><a href="/app/servers.py#backup" title="Servers: Backup configs - HAProxy-WI" class="backup head-submenu">Backups</a> </li>
|
||||
</ul>
|
||||
|
|
|
@ -0,0 +1,332 @@
|
|||
<div id="do_create" style="display: none; padding: 0 2px 0 0; margin-left: 1px; margin-right: -4px;">
|
||||
<table class="overview provisioning_table">
|
||||
{% include 'include/tr_validate_tips.html' %}
|
||||
<tr>
|
||||
<td colspan="2" class="headers">
|
||||
<b>General information</b>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="padding20 padding-top20">
|
||||
Server name
|
||||
<span class="need-field">*</span>
|
||||
</td>
|
||||
<td>
|
||||
{{input('do_create_server_name', required='required', size='30')}}
|
||||
<div class="tooltip tooltipTop tooltipTd">The name must contain only URL safe characters, and no path separators</div>
|
||||
</td>
|
||||
</tr>
|
||||
{% if role == 1 %}
|
||||
<tr>
|
||||
<td class="padding20">
|
||||
Group
|
||||
<span class="need-field">*</span>
|
||||
</td>
|
||||
<td>
|
||||
<select id="do_create_group">
|
||||
{% for group in groups %}
|
||||
<option value="{{ group.0 }}">{{ group.1 }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
{% else %}
|
||||
{{input('do_create_group', value=groups, type='hidden')}}
|
||||
{% endif %}
|
||||
<tr>
|
||||
<td class="padding20">
|
||||
Provider credentials
|
||||
<span class="need-field">*</span>
|
||||
</td>
|
||||
<td>
|
||||
<select id="do_create_provider">
|
||||
{% for p in providers %}
|
||||
{% if p.2 == 'do' %}
|
||||
<option value="{{ p.0 }}">{{ p.1 }}</option>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="padding20 padding-top20">
|
||||
Region
|
||||
<span class="need-field">*</span>
|
||||
</td>
|
||||
<td>
|
||||
{% set regions = dict() %}
|
||||
{% set regions = {'nyc1':'New York 1','nyc2':'New York 2','nyc3':'New York 3',
|
||||
'ams1':'Amsterdam 1','ams2':'Amsterdam 2','ams3':'Amsterdam 3',
|
||||
'sfo1':'San Francisco 1','sfo2':'San Francisco 2','sfo3':'San Francisco 3',
|
||||
'sgp1':'Singapore 1','lon1':'London 1','fra1':'Frankfurt 1','tor1':'Toronto 1', 'blr1':'Bangalore 1'} %}
|
||||
{{ select('do_create_regions', values=regions) }}
|
||||
<div class="tooltip tooltipTop tooltipTd">Not all regions may be active</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2" class="headers">
|
||||
<b>Instance</b>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="padding20">
|
||||
Size
|
||||
<span class="need-field">*</span>
|
||||
</td>
|
||||
<td>{{input('do_create_size', required='required', size='30')}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="padding20">
|
||||
OS
|
||||
<span class="need-field">*</span>
|
||||
</td>
|
||||
<td>
|
||||
{% set oss = dict() %}
|
||||
{% set oss = {'centos-7-x64':'Centos 7 x64', 'centos-8-x64':'Centos 8 x64','ubuntu-18-04-x64':'Ubuntu 18.04 x64','ubuntu-20-04-x64':'Ubuntu 20.04 x64',
|
||||
'ubuntu-20-10-x64':'Ubuntu 20.10 x64','debian-10-x64':'Debian 10 x86','debian-9-x64':'Debian 9 x86'} %}
|
||||
{{ select('do_create_oss', values=oss) }}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="padding20">
|
||||
SSH
|
||||
<span class="need-field">*</span>
|
||||
</td>
|
||||
<td>
|
||||
<select id="do_create_ssh_choose">
|
||||
<option value="none" disabled selected>Choose SSH</option>
|
||||
<option value="ssh_name">Set SSH key name</option>
|
||||
<option value="ssh_ids">Set SSH key ids</option>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="do_create_ssh_ids_tr" style="display: none;">
|
||||
<td class="padding20 padding-top20"">
|
||||
SSH key ids
|
||||
<span class="need-field">*</span>
|
||||
</td>
|
||||
<td>
|
||||
{{input('do_create_ssh_ids', size='30')}}
|
||||
<div class="tooltip tooltipTop tooltipTd">List comma separated. Required if SSH key name is empty</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="do_create_ssh_name_tr" style="display: none;">
|
||||
<td class="padding20 padding-top20">
|
||||
SSH key name
|
||||
<span class="need-field">*</span>
|
||||
</td>
|
||||
<td>
|
||||
{{input('do_create_ssh_name', size='30')}}
|
||||
<div class="tooltip tooltipTop tooltipTd">Required if SSH key ids is empty</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="padding20">Monitoring</td>
|
||||
<td>{{checkbox('do_create_monitoring', checked='checked')}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="padding20">Backup</td>
|
||||
<td>{{checkbox('do_create_backup')}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2" class="headers">
|
||||
<b>Network</b>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="padding20">Private IP</td>
|
||||
<td>{{checkbox('do_create_private_net', checked='checked')}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="padding20 padding-top20">Floating IP</td>
|
||||
<td>{{checkbox('do_create_floating_net')}}<div class="tooltip tooltipTop tooltipTd">If unchecked then will be used public IP</div></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="padding20" style="padding-bottom: 25px;padding-top: 25px;">Firewall</td>
|
||||
<td>
|
||||
{{checkbox('do_create_firewall', checked='checked')}}
|
||||
<div class="tooltip tooltipTop tooltipTd">HAProxy-WI will create firewall and open 22, 443, 1999, 8085, 8086 ports. Otherwise all ports will be opened</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div id="aws_create" style="display: none; padding: 0 2px 0 0; margin-left: 1px; margin-right: -4px;">
|
||||
<table class="overview provisioning_table">
|
||||
{% include 'include/tr_validate_tips.html' %}
|
||||
<tr>
|
||||
<td colspan="2" class="headers">
|
||||
<b>General information</b>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="padding20 padding-top20">
|
||||
Server name
|
||||
<span class="need-field">*</span>
|
||||
</td>
|
||||
<td>
|
||||
{{input('aws_create_server_name', required='required', size='30')}}
|
||||
<div class="tooltip tooltipTop tooltipTd">The name must contain only URL safe characters, and no path separators</div>
|
||||
</td>
|
||||
</tr>
|
||||
{% if role == 1 %}
|
||||
<tr>
|
||||
<td class="padding20">
|
||||
Group
|
||||
<span class="need-field">*</span>
|
||||
</td>
|
||||
<td>
|
||||
<select id="aws_create_group">
|
||||
{% for group in groups %}
|
||||
<option value="{{ group.0 }}">{{ group.1 }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
{% else %}
|
||||
{{input('aws_create_group', value=groups, type='hidden')}}
|
||||
{% endif %}
|
||||
<tr>
|
||||
<td class="padding20">
|
||||
Provider credentials
|
||||
<span class="need-field">*</span>
|
||||
</td>
|
||||
<td>
|
||||
<select id="aws_create_provider">
|
||||
{% for p in providers %}
|
||||
{% if p.2 == 'aws' %}
|
||||
<option value="{{ p.0 }}">{{ p.1 }}</option>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="padding20 padding-top20">
|
||||
Region
|
||||
<span class="need-field">*</span>
|
||||
</td>
|
||||
<td>
|
||||
{% set regions = dict() %}
|
||||
{% set regions = {'us-east-1':'US East (N. Virginia)','us-east-2':'US East (Ohio)','us-west-1':'US West (N. California)',
|
||||
'us-west-2':'US West (Oregon)','af-south-1':'Africa (Cape Town)','ap-east-1':'Asia Pacific (Hong Kong)',
|
||||
'ap-south-1':'Asia Pacific (Mumbai)','ap-northeast-2':'Asia Pacific (Seoul)','ap-southeast-1':'Asia Pacific (Singapore)',
|
||||
'ap-southeast-2':'Asia Pacific (Sydney)','ap-northeast-1':'Asia Pacific (Tokyo)','ca-central-1':'Canada (Central)',
|
||||
'eu-central-1':'Europe (Frankfurt)', 'eu-west-1':'Europe (Ireland)', 'eu-west-2':'Europe (London)',
|
||||
'eu-south-1':'Europe (Milan)', 'eu-west-3':'Europe (Paris)', 'eu-north-1':'Europe (Stockholm)',
|
||||
'me-south-1':'Middle East (Bahrain)', 'sa-east-1':'South America (São Paulo)'} %}
|
||||
{{ select('aws_create_regions', values=regions) }}
|
||||
<div class="tooltip tooltipTop tooltipTd">Not all regions may be active</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2" class="headers">
|
||||
<b>Instance</b>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="padding20 padding-top20">
|
||||
Instance type
|
||||
<span class="need-field">*</span>
|
||||
</td>
|
||||
<td>
|
||||
{{input('aws_create_size', required='required', size='30')}}
|
||||
<div class="tooltip tooltipTop tooltipTd">
|
||||
Instance types list is <a href="https://aws.amazon.com/ec2/instance-types/" title="Instance types list" target="_blank">here</a>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="padding20">
|
||||
OS
|
||||
<span class="need-field">*</span>
|
||||
</td>
|
||||
<td>
|
||||
{% set oss = dict() %}
|
||||
{% set oss = {'centos-7':'Centos 7 x64','ubuntu-18.04':'Ubuntu 18.04 x64','ubuntu-18.10':'Ubuntu 18.10 x64',
|
||||
'debian-10':'Debian 10 x86','debian-9':'Debian 9 x86','rhel-7':'RHEL 7 x86','rhel-8':'RHEL 8 x86',
|
||||
'amazon-2_lts':'Amazon Linux 2 x86'} %}
|
||||
{{ select('aws_create_oss', values=oss) }}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="padding20 padding-top20">
|
||||
SSH key pair name
|
||||
<span class="need-field">*</span>
|
||||
</td>
|
||||
<td>
|
||||
{{input('aws_create_ssh_name', size='30')}}
|
||||
<div class="tooltip tooltipTop tooltipTd">SSH key must exists in region where instance create</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2" class="headers">
|
||||
<b>Volume</b>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="padding20 padding-top20">
|
||||
Volume size
|
||||
<span class="need-field">*</span>
|
||||
</td>
|
||||
<td>
|
||||
{{input('aws_create_volume_size', size='30', value='10', type='number')}}
|
||||
<div class="tooltip tooltipTop tooltipTd">Size in GB</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="padding20 padding-top20">Delete on termination</td>
|
||||
<td>
|
||||
{{checkbox('aws_create_delete_on_termination', checked='checked')}}
|
||||
<div class="tooltip tooltipTop tooltipTd">Whether the volume should be destroyed on instance termination</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2" class="headers">
|
||||
<b>Network</b>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="padding20">Public IP</td>
|
||||
<td>
|
||||
<select id="aws_create_public_ip">
|
||||
<option value="public">Public IP</option>
|
||||
<option value="elastic">Elastic IP</option>
|
||||
<option value="none">None</option>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="padding20" style="padding-bottom: 25px;padding-top: 25px;">Firewall</td>
|
||||
<td>
|
||||
{{checkbox('aws_create_firewall', checked='checked')}}
|
||||
<div class="tooltip tooltipTop tooltipTd">HAProxy-WI will create Security group and open 22, 443, 1999, 8085, 8086 ports. Otherwise all ports will be closed</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div id="server_creating" style="display: none;">
|
||||
<ul style="padding: 20px 20px 0px 20px;font-size: 15px;">
|
||||
<li id="creating-init" class="server-creating">Creating environment...</li>
|
||||
<li id="creating-vars" class="server-creating">Creating vars...</li>
|
||||
<li id="creating-validate" class="server-creating">Validation...</li>
|
||||
<li id="creating-workspace" class="server-creating">Creating workspace...</li>
|
||||
<li id="creating-server" class="server-creating">Creating server...</li>
|
||||
</ul>
|
||||
<div id="wait-mess"></div>
|
||||
<div id="created-mess" class="alert alert-success" style="display:none;"></div>
|
||||
<div id="creating-error" class="alert alert-danger" style="display:none;"></div>
|
||||
<progress id="creating-progress" value="0" max="100"></progress>
|
||||
</div>
|
||||
<div id="server_editing" style="display: none;">
|
||||
<ul style="padding: 20px 20px 0px 20px;font-size: 15px;">
|
||||
<li id="editing-init" class="server-creating">Updating environment...</li>
|
||||
<li id="editing-vars" class="server-creating">Updating vars...</li>
|
||||
<li id="editing-validate" class="server-creating">Validation...</li>
|
||||
<li id="editing-workspace" class="server-creating">Updating workspace...</li>
|
||||
<li id="editing-server" class="server-creating">Updating server...</li>
|
||||
</ul>
|
||||
<div id="editing-wait-mess"></div>
|
||||
<div id="edited-mess" class="alert alert-success" style="display:none;"></div>
|
||||
<div id="editing-error" class="alert alert-danger" style="display:none;"></div>
|
||||
<progress id="editing-progress" value="0" max="100"></progress>
|
||||
</div>
|
|
@ -0,0 +1,142 @@
|
|||
{% set providers_for_choose = dict() %}
|
||||
{% set providers_for_choose = {'aws':'AWS','do':'DigitalOcean'} %}
|
||||
<div id="add_providers_choosing" style="display: none;">
|
||||
{{ select('add_select_providers', values=providers_for_choose) }}
|
||||
</div>
|
||||
<div id="create_providers_choosing" style="display: none;">
|
||||
{{ select('create_select_providers', values=providers_for_choose) }}
|
||||
</div>
|
||||
<div id="aws_provider" style="display: none; padding: 0 2px 0 0; margin-left: 1px; margin-right: -4px;">
|
||||
<table class="overview">
|
||||
{% include 'include/tr_validate_tips.html' %}
|
||||
<tr>
|
||||
<td class="padding20">
|
||||
Provider name
|
||||
<span class="need-field">*</span>
|
||||
</td>
|
||||
<td>{{input('aws_new_name', required='required', size='30')}}</td>
|
||||
</tr>
|
||||
{% if role == 1 %}
|
||||
<tr>
|
||||
<td class="padding20">
|
||||
Group
|
||||
<span class="need-field">*</span>
|
||||
</td>
|
||||
<td>
|
||||
<select id="aws_new_group">
|
||||
{% for group in groups %}
|
||||
<option value="{{ group.0 }}">{{ group.1 }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
{% else %}
|
||||
{{input('aws_new_group', value=groups, type='hidden')}}
|
||||
{% endif %}
|
||||
<tr>
|
||||
<td class="padding20">
|
||||
ACCESS_KEY
|
||||
<span class="need-field">*</span>
|
||||
</td>
|
||||
<td>{{input('aws_new_key', required='required', size='30')}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="padding20">
|
||||
SECRET_KEY
|
||||
<span class="need-field">*</span>
|
||||
</td>
|
||||
<td>{{input('aws_new_secret', required='required', size='30')}}</td>
|
||||
</tr>
|
||||
</table>
|
||||
<div class="alert alert-info">
|
||||
How to get the AWS access key read <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html" target="_blank"><b>here</b></a>
|
||||
</div>
|
||||
</div>
|
||||
<div id="do_provider" style="display: none; padding: 0 2px 0 0; margin-left: 1px; margin-right: -4px;">
|
||||
<table class="overview">
|
||||
{% include 'include/tr_validate_tips.html' %}
|
||||
<tr>
|
||||
<td class="padding20">
|
||||
Provider name
|
||||
<span class="need-field">*</span>
|
||||
</td>
|
||||
<td>{{input('do_new_name', required='required', size='30')}}</td>
|
||||
</tr>
|
||||
{% if role == 1 %}
|
||||
<tr>
|
||||
<td class="padding20">
|
||||
Group
|
||||
<span class="need-field">*</span>
|
||||
</td>
|
||||
<td>
|
||||
<select id="do_new_group">
|
||||
{% for group in groups %}
|
||||
<option value="{{ group.0 }}">{{ group.1 }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
{% else %}
|
||||
{{input('do_new_group', value=groups, type='hidden')}}
|
||||
{% endif %}
|
||||
<tr>
|
||||
<td class="padding20">
|
||||
TOKEN
|
||||
<span class="need-field">*</span>
|
||||
</td>
|
||||
<td>{{input('do_new_token', required='required', size='30')}}</td>
|
||||
</tr>
|
||||
</table>
|
||||
<div class="alert alert-info">
|
||||
How to get the DigitalOcean token read <a href="https://www.digitalocean.com/docs/apis-clis/api/create-personal-access-token" target="_blank"><b>here</b></a>
|
||||
</div>
|
||||
</div>
|
||||
<div id="aws_edit_provider" style="display: none; padding: 0 2px 0 0; margin-left: 1px; margin-right: -4px;">
|
||||
<table class="overview">
|
||||
{% include 'include/tr_validate_tips.html' %}
|
||||
<tr>
|
||||
<td class="padding20">
|
||||
Provider name
|
||||
<span class="need-field">*</span>
|
||||
</td>
|
||||
<td>{{input('aws_edit_provider_name', required='required', size='30')}}</td>
|
||||
</tr>
|
||||
{{input('aws_edit_provider_group', value=groups, type='hidden')}}
|
||||
{{input('aws_edit_provider_id', type='hidden')}}
|
||||
<tr>
|
||||
<td class="padding20">
|
||||
ACCESS_KEY
|
||||
<span class="need-field">*</span>
|
||||
</td>
|
||||
<td>{{input('aws_edit_provider_key', required='required', size='30')}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="padding20">
|
||||
SECRET_KEY
|
||||
<span class="need-field">*</span>
|
||||
</td>
|
||||
<td>{{input('aws_edit_provider_secret', required='required', size='30')}}</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div id="do_edit_provider" style="display: none; padding: 0 2px 0 0; margin-left: 1px; margin-right: -4px;">
|
||||
<table class="overview">
|
||||
{% include 'include/tr_validate_tips.html' %}
|
||||
<tr>
|
||||
<td class="padding20">
|
||||
Provider name
|
||||
<span class="need-field">*</span>
|
||||
</td>
|
||||
<td>{{input('do_edit_provider_name', required='required', size='30')}}</td>
|
||||
</tr>
|
||||
{{input('do_edit_provider_group', value=groups, type='hidden')}}
|
||||
{{input('do_edit_provider_id', type='hidden')}}
|
||||
<tr>
|
||||
<td class="padding20">
|
||||
TOKEN
|
||||
<span class="need-field">*</span>
|
||||
</td>
|
||||
<td>{{input('do_edit_provider_token', required='required', size='30')}}</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
|
@ -0,0 +1,64 @@
|
|||
{% extends "base.html" %}
|
||||
{% block content %}
|
||||
{% from 'include/input_macros.html' import input, select, checkbox %}
|
||||
<link href="/inc/provisioning.css" rel="stylesheet">
|
||||
<script src="/inc/users.js"></script>
|
||||
<script src="/inc/fontawesome.min.js"></script>
|
||||
{% include 'include/del_confirm.html' %}
|
||||
<div id="tabs">
|
||||
<ul>
|
||||
<li><a href="#provisioning" title="Server provisioning - HAProxy-WI">Provisioning</a></li>
|
||||
<li><a href="#providers" title="Providers settings - HAProxy-WI">Providers</a></li>
|
||||
{% include 'include/login.html' %}
|
||||
</ul>
|
||||
<ul id='browse_histroy'></ul>
|
||||
<div id="provisioning">
|
||||
<table class="overview" id="ajax-provisioning">
|
||||
<thead>
|
||||
<tr class="overviewHead">
|
||||
<th class="padding10 first-collumn">Name</th>
|
||||
<th>Provider</th>
|
||||
{% if role == 1 %}
|
||||
<th>Group</th>
|
||||
{% endif %}
|
||||
<th>Cloud</th>
|
||||
<th>Region</th>
|
||||
<th>OS</th>
|
||||
<th>IP</th>
|
||||
<th>Instance type</th>
|
||||
<th>Status</th>
|
||||
<th>Created at</th>
|
||||
<th></th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="ajax-provisioning-body">
|
||||
{% include 'ajax/provisioning/provisioned_servers.html' %}
|
||||
</tbody>
|
||||
</table>
|
||||
<br /><span class="add-button" title="Create a new server" id="create-provider-button">+ Add</span>
|
||||
</div>
|
||||
<div id="providers">
|
||||
<table class="overview" id="ajax-providers">
|
||||
<thead>
|
||||
<tr class="overviewHead">
|
||||
<th class="padding10 first-collumn">Name</th>
|
||||
<th>Cloud</th>
|
||||
{% if role == 1 %}
|
||||
<th>Group</th>
|
||||
{% endif %}
|
||||
<th></th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% include 'ajax/provisioning/providers.html' %}
|
||||
</tbody>
|
||||
</table>
|
||||
<br /><span class="add-button" title="Add a new provider" id="add-provider-button">+ Add</span>
|
||||
</div>
|
||||
</div>
|
||||
{% include 'include/provisioning/creating_dialogs.html' %}
|
||||
{% include 'include/provisioning/providers_dialogs.html' %}
|
||||
<script src="/inc/provisioning.js"></script>
|
||||
{% endblock %}
|
|
@ -35,6 +35,10 @@
|
|||
Order Deny,Allow
|
||||
Deny from all
|
||||
</Directory>
|
||||
|
||||
<Directory /var/www/haproxy-wi/app/scripts/terraform/>
|
||||
Deny from all
|
||||
</Directory>
|
||||
|
||||
<FilesMatch "\.cfg$">
|
||||
Order Deny,Allow
|
||||
|
|
|
@ -0,0 +1,63 @@
|
|||
.padding20{ width: 160px;}
|
||||
.server-creating {padding-bottom: 10px;}
|
||||
.proccessing_done {color: green;}
|
||||
.proccessing, .processing_error {font-weight: bold; color: green;}
|
||||
.proccessing::before {
|
||||
display: none;
|
||||
font-family: "Font Awesome 5 Solid";
|
||||
content: "\f35a";
|
||||
}
|
||||
.processing .fa-arrow-alt-circle-right {
|
||||
padding-right: 10px !important;
|
||||
margin-bottom: -1px !important;
|
||||
}
|
||||
.processing_error .svg-inline--fa {
|
||||
padding-right: 10px !important;
|
||||
margin-bottom: -1px !important;
|
||||
}
|
||||
.processing_error { color: red;}
|
||||
.processing_error::before {
|
||||
display: none;
|
||||
font-family: "Font Awesome 5 Solid";
|
||||
content: "\f06a";
|
||||
}
|
||||
#creating-progress, #editing-progress {
|
||||
clear: both;
|
||||
width: 100%;
|
||||
height: 10px;
|
||||
}
|
||||
progress {
|
||||
border-radius: 5px;
|
||||
}
|
||||
progress::-webkit-progress-bar {
|
||||
background-color: #ddd;
|
||||
border-radius: 5px;
|
||||
}
|
||||
progress::-webkit-progress-value {
|
||||
background-color: #5d9ceb;
|
||||
border-radius: 5px;
|
||||
}
|
||||
progress::-moz-progress-bar {
|
||||
background-color: #5d9ceb;
|
||||
border-radius: 5px;
|
||||
}
|
||||
.alert-danger {
|
||||
margin-bottom: 10px;
|
||||
margin-top: 0;
|
||||
}
|
||||
.headers {
|
||||
padding-left: 10px;
|
||||
padding-top: 5px;
|
||||
padding-bottom: 5px;
|
||||
color: #aaa;
|
||||
background-color: #eee;
|
||||
}
|
||||
.validateTips {
|
||||
margin: 0;
|
||||
}
|
||||
.provisioning_table {
|
||||
width: 99%;
|
||||
}
|
||||
.provisioning_table tr:last-of-type {
|
||||
border: none;
|
||||
}
|
File diff suppressed because it is too large
Load Diff
|
@ -1261,7 +1261,7 @@ async function waitConsumer() {
|
|||
if (cur_url[0] != 'servers.py#installproxy' && cur_url[0] != 'servers.py#installmon' &&
|
||||
cur_url[0] != 'users.py#installmon' && cur_url[0] != 'ha.py' && cur_url[0] != 'users.py#updatehapwi' &&
|
||||
cur_url[0] != 'add.py?service=nginx#ssl' && cur_url[0] != 'add.py#ssl' && cur_url[0] != 'servers.py#geolite2'
|
||||
&& cur_url[0] != 'login.py' && sessionStorage.getItem('disabled_alert') === null && localStorage.getItem('disabled_alert') === null) {
|
||||
&& cur_url[0] != 'login.py?ref=/app/overview.py' && sessionStorage.getItem('disabled_alert') === null && localStorage.getItem('disabled_alert') === null) {
|
||||
NProgress.configure({showSpinner: false});
|
||||
$.ajax({
|
||||
url: "options.py",
|
||||
|
|
Loading…
Reference in New Issue