Pavel Loginov 2021-03-16 20:38:12 +06:00
parent 9ed61f83e5
commit 9afcd0f213
14 changed files with 2048 additions and 180 deletions

View File

@ -144,7 +144,9 @@ def create_table(**kwargs):
`type` VARCHAR ( 64 ),
`group` VARCHAR ( 64 ),
`key` VARCHAR ( 64 ),
`secret` VARCHAR ( 64 ),
`secret` VARCHAR ( 64 ),
`create_date` DATETIME default '0000-00-00 00:00:00',
`edit_date` DATETIME default '0000-00-00 00:00:00',
PRIMARY KEY(`id`)
);
CREATE TABLE IF NOT EXISTS provisioned_servers (
@ -169,7 +171,7 @@ def create_table(**kwargs):
`date` DATETIME default '0000-00-00 00:00:00',
`IP` VARCHAR ( 64 ),
`last_error` VARCHAR ( 256 ),
`delete_on_termination` INTEGER
`delete_on_termination` INTEGER,
PRIMARY KEY(`id`)
);
"""
@ -1051,9 +1053,29 @@ def update_db_v_51(**kwargs):
con.close()
def update_db_v_5_0_1(**kwargs):
con, cur = get_cur()
sql = list()
sql.append("alter table provisioned_servers add column project VARCHAR ( 64 )")
sql.append("alter table provisioned_servers add column network_name VARCHAR ( 64 )")
sql.append("alter table provisioned_servers add column volume_type VARCHAR ( 64 )")
sql.append("alter table provisioned_servers add column name_template VARCHAR ( 64 )")
for i in sql:
try:
cur.execute(i)
con.commit()
except sqltool.Error as e:
pass
else:
if kwargs.get('silent') != 1:
print('Updating... DB has been updated to version 5.0.1')
cur.close()
con.close()
def update_ver():
con, cur = get_cur()
sql = """update version set version = '5.0.1.0'; """
sql = """update version set version = '5.0.2.0'; """
try:
cur.execute(sql)
con.commit()
@ -1089,6 +1111,7 @@ def update_all():
update_db_v_4_5_9()
update_db_v_5()
update_db_v_51()
update_db_v_5_0_1()
update_ver()
@ -1118,6 +1141,7 @@ def update_all_silent():
update_db_v_4_5_9(silent=1)
update_db_v_5(silent=1)
update_db_v_51(silent=1)
update_db_v_5_0_1(silent=1)
update_ver()

View File

@ -2348,7 +2348,7 @@ 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'):
if form.getvalue('do_new_name') or form.getvalue('aws_new_name') or form.getvalue('gcore_new_name'):
funct.check_user_group()
is_add = False
if form.getvalue('do_new_name'):
@ -2368,6 +2368,15 @@ if form.getvalue('do_new_name') or form.getvalue('aws_new_name'):
if sql.add_provider_aws(provider_name, provider_group, provider_token, provider_secret):
is_add = True
elif form.getvalue('gcore_new_name'):
provider_name = form.getvalue('gcore_new_name')
provider_group = form.getvalue('gcore_new_group')
provider_token = form.getvalue('gcore_new_user')
provider_pass = form.getvalue('gcore_new_pass')
if sql.add_provider_gcore(provider_name, provider_group, provider_token, provider_pass):
is_add = True
if is_add:
from jinja2 import Environment, FileSystemLoader
import http.cookies
@ -2393,7 +2402,7 @@ if form.getvalue('providerdel'):
print('Ok')
funct.logging('localhost', 'Provider has been deleted', provisioning=1)
if form.getvalue('awsinit') or form.getvalue('doinit'):
if form.getvalue('awsinit') or form.getvalue('doinit') or form.getvalue('gcoreinitserver'):
funct.check_user_group()
cmd = 'cd scripts/terraform/ && sudo terraform init -upgrade -no-color'
output, stderr = funct.subprocess_execute(cmd)
@ -2417,6 +2426,7 @@ if form.getvalue('awsvars') or form.getvalue('awseditvars'):
oss = form.getvalue('aws_create_oss')
ssh_name = form.getvalue('aws_create_ssh_name')
volume_size = form.getvalue('aws_create_volume_size')
volume_type = form.getvalue('aws_create_volume_type')
delete_on_termination = form.getvalue('aws_create_delete_on_termination')
floating_ip = form.getvalue('aws_create_floating_net')
firewall = form.getvalue('aws_create_firewall')
@ -2430,6 +2440,7 @@ if form.getvalue('awsvars') or form.getvalue('awseditvars'):
oss = form.getvalue('aws_editing_oss')
ssh_name = form.getvalue('aws_editing_ssh_name')
volume_size = form.getvalue('aws_editing_volume_size')
volume_type = form.getvalue('aws_editing_volume_type')
delete_on_termination = form.getvalue('aws_editing_delete_on_termination')
floating_ip = form.getvalue('aws_editing_floating_net')
firewall = form.getvalue('aws_editing_firewall')
@ -2439,9 +2450,9 @@ if form.getvalue('awsvars') or form.getvalue('awseditvars'):
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={} ' \
'AWS_SECRET_KEY={} firewall={} public_ip={} ssh_name={} delete_on_termination={} volume_type={} ' \
'cloud=aws"'.format(region, group, size, oss, floating_ip, volume_size, awsvars, aws_key, aws_secret,
firewall, public_ip, ssh_name, delete_on_termination)
firewall, public_ip, ssh_name, delete_on_termination, volume_type)
output, stderr = funct.subprocess_execute(cmd)
if stderr != '':
@ -2543,7 +2554,7 @@ if form.getvalue('doworkspace'):
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'))
env = Environment(extensions=["jinja2.ext.do"], loader=FileSystemLoader('templates'))
template = env.get_template('ajax/provisioning/provisioned_servers.html')
template = template.render(servers=new_server,
groups=sql.select_groups(),
@ -2610,6 +2621,7 @@ if form.getvalue('awsworkspace'):
oss = form.getvalue('aws_create_oss')
ssh_name = form.getvalue('aws_create_ssh_name')
volume_size = form.getvalue('aws_create_volume_size')
volume_type = form.getvalue('aws_create_volume_type')
delete_on_termination = form.getvalue('aws_create_delete_on_termination')
floating_ip = form.getvalue('aws_create_floating_net')
firewall = form.getvalue('aws_create_firewall')
@ -2628,14 +2640,14 @@ if form.getvalue('awsworkspace'):
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):
provider, group, 'Creating', delete_on_termination, volume_type):
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'))
env = Environment(extensions=["jinja2.ext.do"], loader=FileSystemLoader('templates'))
template = env.get_template('ajax/provisioning/provisioned_servers.html')
template = template.render(servers=new_server,
groups=sql.select_groups(),
@ -2654,13 +2666,15 @@ if form.getvalue('awseditworkspace'):
oss = form.getvalue('aws_editing_oss')
ssh_name = form.getvalue('aws_editing_ssh_name')
volume_size = form.getvalue('aws_editing_volume_size')
volume_type = form.getvalue('aws_editing_volume_type')
delete_on_termination = form.getvalue('aws_editing_delete_on_termination')
floating_ip = form.getvalue('aws_editing_floating_net')
firewall = form.getvalue('aws_editing_firewall')
public_ip = form.getvalue('aws_editing_public_ip')
server_id = form.getvalue('server_id')
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):
if sql.update_server_aws(region, size, public_ip, floating_ip, volume_size, ssh_name, workspace, oss, firewall,
provider, group, 'Editing', server_id, delete_on_termination, volume_type):
try:
cmd = 'cd scripts/terraform/ && sudo terraform workspace select ' + workspace + '_' + group + '_aws'
@ -2678,7 +2692,14 @@ if form.getvalue('awseditworkspace'):
else:
print('ok')
if form.getvalue('awsprovisining') or form.getvalue('awseditingprovisining') or form.getvalue('doprovisining') or form.getvalue('doeditprovisining'):
if (
form.getvalue('awsprovisining') or
form.getvalue('awseditingprovisining') or
form.getvalue('doprovisining') or
form.getvalue('doeditprovisining') or
form.getvalue('gcoreprovisining') or
form.getvalue('gcoreeditgprovisining')
):
funct.check_user_group()
if form.getvalue('awsprovisining'):
workspace = form.getvalue('awsprovisining')
@ -2708,6 +2729,20 @@ if form.getvalue('awsprovisining') or form.getvalue('awseditingprovisining') or
action = 'modified'
cloud = 'do'
state_name = 'digitalocean_droplet'
elif form.getvalue('gcoreprovisining'):
workspace = form.getvalue('gcoreprovisining')
group = form.getvalue('gcore_create_group')
provider_id = form.getvalue('gcore_create_provider')
action = 'created'
cloud = 'gcore'
state_name = 'gcore_instance'
elif form.getvalue('gcoreeditgprovisining'):
workspace = form.getvalue('gcoreeditgprovisining')
group = form.getvalue('gcore_edit_group')
provider_id = form.getvalue('gcore_edit_provider')
action = 'modified'
cloud = 'gcore'
state_name = 'gcore_instance'
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
@ -2737,6 +2772,13 @@ if form.getvalue('awsprovisining') or form.getvalue('awseditingprovisining') or
ips += ' '
print(ips)
sql.update_provisioning_server_status('Created', group, workspace, provider_id, update_ip=ips)
if cloud == 'gcore':
cmd = 'cd scripts/terraform/ && sudo terraform state show module.gcore_module.gcore_instance.hapwi|grep "name"|grep -v -e "_name\|name_" |head -1 |awk -F"\\\"" \'{print $2}\''
output, stderr = funct.subprocess_execute(cmd)
print(':'+output[0])
sql.update_provisioning_server_gcore_name(workspace, output[0], group, provider_id)
funct.logging('localhost', 'Server ' + workspace + ' has been ' + action, provisioning=1)
if form.getvalue('provisiningdestroyserver'):
@ -2774,15 +2816,169 @@ if form.getvalue('provisiningdestroyserver'):
funct.logging('localhost', 'Server has been destroyed', provisioning=1)
sql.delete_provisioned_servers(server_id)
if form.getvalue('gcorevars') or form.getvalue('gcoreeditvars'):
if form.getvalue('gcorevars'):
gcorevars = form.getvalue('gcorevars')
group = form.getvalue('gcore_create_group')
provider = form.getvalue('gcore_create_provider')
region = form.getvalue('gcore_create_regions')
project = form.getvalue('gcore_create_project')
size = form.getvalue('gcore_create_size')
oss = form.getvalue('gcore_create_oss')
ssh_name = form.getvalue('gcore_create_ssh_name')
volume_size = form.getvalue('gcore_create_volume_size')
volume_type = form.getvalue('gcore_create_volume_type')
delete_on_termination = form.getvalue('gcore_create_delete_on_termination')
network_name = form.getvalue('gcore_create_network_name')
firewall = form.getvalue('gcore_create_firewall')
network_type = form.getvalue('gcore_create_network_type')
elif form.getvalue('gcoreeditvars'):
gcorevars = form.getvalue('gcoreeditvars')
group = form.getvalue('gcore_edit_group')
provider = form.getvalue('gcore_edit_provider')
region = form.getvalue('gcore_edit_regions')
project = form.getvalue('gcore_edit_project')
size = form.getvalue('gcore_edit_size')
oss = form.getvalue('gcore_edit_oss')
ssh_name = form.getvalue('gcore_edit_ssh_name')
volume_size = form.getvalue('gcore_edit_volume_size')
volume_type = form.getvalue('gcore_edit_volume_type')
delete_on_termination = form.getvalue('gcore_edit_delete_on_termination')
network_name = form.getvalue('gcore_edit_network_name')
firewall = form.getvalue('gcore_edit_firewall')
network_type = form.getvalue('gcore_edit_network_type')
gcore_user, gcore_pass = sql.select_gcore_provider(provider)
cmd = 'cd scripts/terraform/ && sudo ansible-playbook var_generator.yml -i inventory -e "region={} ' \
'group={} size={} os={} network_name={} volume_size={} server_name={} username={} ' \
'pass={} firewall={} network_type={} ssh_name={} delete_on_termination={} project={} volume_type={} ' \
'cloud=gcore"'.format(region, group, size, oss, network_name, volume_size, gcorevars, gcore_user, gcore_pass,
firewall, network_type, ssh_name, delete_on_termination, project, volume_type)
output, stderr = funct.subprocess_execute(cmd)
if stderr != '':
print('error: ' + stderr)
else:
print('ok')
if form.getvalue('gcorevalidate') or form.getvalue('gcoreeditvalidate'):
if form.getvalue('gcorevalidate'):
workspace = form.getvalue('gcorevalidate')
group = form.getvalue('gcore_create_group')
elif form.getvalue('gcoreeditvalidate'):
workspace = form.getvalue('gcoreeditvalidate')
group = form.getvalue('gcore_edit_group')
cmd = 'cd scripts/terraform/ && sudo terraform plan -no-color -input=false -target=module.gcore_module -var-file vars/' + workspace + '_'+group+'_gcore.tfvars'
output, stderr = funct.subprocess_execute(cmd)
if stderr != '':
print('error: ' + stderr)
else:
print('ok')
if form.getvalue('gcoreworkspace'):
workspace = form.getvalue('gcoreworkspace')
group = form.getvalue('gcore_create_group')
provider = form.getvalue('gcore_create_provider')
region = form.getvalue('gcore_create_regions')
project = form.getvalue('gcore_create_project')
size = form.getvalue('gcore_create_size')
oss = form.getvalue('gcore_create_oss')
ssh_name = form.getvalue('gcore_create_ssh_name')
volume_size = form.getvalue('gcore_create_volume_size')
volume_type = form.getvalue('gcore_create_volume_type')
delete_on_termination = form.getvalue('gcore_create_delete_on_termination')
network_type = form.getvalue('gcore_create_network_type')
firewall = form.getvalue('gcore_create_firewall')
network_name = form.getvalue('gcore_create_network_name')
cmd = 'cd scripts/terraform/ && sudo terraform workspace new ' + workspace + '_' + group + '_gcore'
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_gcore(project, region, size, network_type, network_name, volume_size, ssh_name, workspace, oss, firewall,
provider, group, 'Creating', delete_on_termination, volume_type):
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='gcore')
env = Environment(extensions=["jinja2.ext.do"], loader=FileSystemLoader('templates'))
template = env.get_template('ajax/provisioning/provisioned_servers.html')
template = template.render(servers=new_server,
groups=sql.select_groups(),
user_group=group,
providers=sql.select_providers(group),
role=role,
adding=1)
print(template)
if form.getvalue('gcoreeditworkspace'):
workspace = form.getvalue('gcoreeditworkspace')
group = form.getvalue('gcore_edit_group')
provider = form.getvalue('gcore_edit_provider')
region = form.getvalue('gcore_edit_regions')
project = form.getvalue('gcore_edit_project')
size = form.getvalue('gcore_edit_size')
oss = form.getvalue('gcore_edit_oss')
ssh_name = form.getvalue('gcore_edit_ssh_name')
volume_size = form.getvalue('gcore_edit_volume_size')
volume_type = form.getvalue('gcore_edit_volume_type')
delete_on_termination = form.getvalue('gcore_edit_delete_on_termination')
network_type = form.getvalue('gcore_edit_network_type')
firewall = form.getvalue('gcore_edit_firewall')
network_name = form.getvalue('gcore_edit_network_name')
server_id = form.getvalue('server_id')
if sql.update_server_gcore(region, size, network_type, network_name, volume_size, ssh_name, workspace, oss, firewall,
provider, group, 'Editing', server_id, delete_on_termination, volume_type, project):
try:
cmd = 'cd scripts/terraform/ && sudo terraform workspace select ' + workspace + '_' + group + '_gcore'
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('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'))
env = Environment(extensions=["jinja2.ext.do"], 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))
template = template.render(server=sql.select_aws_server(server_id=server_id), providers=sql.select_providers(int(user_group)))
print(template)
if form.getvalue('editGcoreServer'):
funct.check_user_group()
server_id = form.getvalue('editGcoreServer')
user_group = form.getvalue('editGcoreGroup')
from jinja2 import Environment, FileSystemLoader
env = Environment(extensions=["jinja2.ext.do"], loader=FileSystemLoader('templates'))
template = env.get_template('ajax/provisioning/gcore_edit_dialog.html')
template = template.render(server=sql.select_gcore_server(server_id=server_id), providers=sql.select_providers(int(user_group)))
print(template)
if form.getvalue('editDoServer'):
@ -2791,9 +2987,9 @@ if form.getvalue('editDoServer'):
user_group = form.getvalue('editDoGroup')
from jinja2 import Environment, FileSystemLoader
env = Environment(loader=FileSystemLoader('templates'))
env = Environment(extensions=["jinja2.ext.do"], 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))
template = template.render(server=sql.select_do_server(server_id=server_id), providers=sql.select_providers(int(user_group)))
print(template)
if form.getvalue('edit_do_provider'):
@ -2806,6 +3002,17 @@ if form.getvalue('edit_do_provider'):
print('ok')
funct.logging('localhost', 'Provider has been renamed. New name is ' + new_name, provisioning=1)
if form.getvalue('edit_gcore_provider'):
funct.check_user_group()
provider_id = form.getvalue('edit_gcore_provider')
new_name = form.getvalue('edit_gcore_provider_name')
new_user = form.getvalue('edit_gcore_provider_user')
new_pass = form.getvalue('edit_gcore_provider_pass')
if sql.update_gcore_provider(new_name, new_user, new_pass, 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')

View File

@ -7,7 +7,7 @@ mysql_enable = funct.get_config_var('mysql', 'enable')
if mysql_enable == '1':
import mysql.connector as sqltool
else:
db = "haproxy-wi.db"
db = "/var/www/haproxy-wi/app/haproxy-wi.db"
import sqlite3 as sqltool
@ -34,10 +34,10 @@ def get_cur():
def add_user(user, email, password, role, activeuser, group):
con, cur = get_cur()
if password != 'aduser':
sql = """INSERT INTO user (username, email, password, role, activeuser, 'groups')
sql = """INSERT INTO user (username, email, password, role, activeuser, `groups`)
VALUES ('%s', '%s', '%s', '%s', '%s', '%s')""" % (user, email, funct.get_hash(password), role, activeuser, group)
else:
sql = """INSERT INTO user (username, email, role, ldap_user, activeuser, 'groups')
sql = """INSERT INTO user (username, email, role, ldap_user, activeuser, `groups`)
VALUES ('%s', '%s', '%s', '1', '%s', '%s')""" % (user, email, role, activeuser, group)
try:
cur.execute(sql)
@ -792,6 +792,11 @@ def get_dick_permit(**kwargs):
group = cookie.get('group')
grp = group.value
user = get_user_id_by_uuid(user_id.value)
if kwargs.get('token'):
token = kwargs.get('token')
else:
token = ''
only_group = kwargs.get('only_group')
disable = ''
haproxy = ''
nginx = ''
@ -813,10 +818,10 @@ def get_dick_permit(**kwargs):
if kwargs.get('keepalived'):
nginx = "and keepalived = 1"
if funct.check_user_group():
if funct.check_user_group(token=token):
con, cur = get_cur()
if grp == '1':
sql = """ select * from servers where enable = 1 %s %s %s order by pos""" % (disable, type_ip, nginx)
if grp == '1' and not only_group:
sql = """ select * from servers where enable = 1 %s %s %s %s order by pos""" % (disable, type_ip, nginx, ip)
else:
sql = """ select * from servers where groups = '{group}' and (enable = 1 {disable}) {type_ip} {ip} {haproxy} {nginx} {keepalived} order by pos
""".format(group=grp, disable=disable, type_ip=type_ip, ip=ip, haproxy=haproxy, nginx=nginx, keepalived=keepalived)
@ -1227,17 +1232,17 @@ def insert_mentrics(serv, curr_con, cur_ssl_con, sess_rate, max_sess_rate):
con.close()
def select_waf_metrics_enable(id):
con, cur = get_cur()
sql = """ select waf.metrics from waf left join servers as serv on waf.server_id = serv.id where server_id = '%s' """ % id
try:
cur.execute(sql)
except sqltool.Error as e:
funct.out_error(e)
else:
return cur.fetchall()
cur.close()
con.close()
# def select_waf_metrics_enable(id):
# con, cur = get_cur()
# sql = """ select waf.metrics from waf left join servers as serv on waf.server_id = serv.id where server_id = '%s' """ % id
# try:
# cur.execute(sql)
# except sqltool.Error as e:
# funct.out_error(e)
# else:
# return cur.fetchall()
# cur.close()
# con.close()
def select_waf_metrics_enable_server(ip):
@ -1812,7 +1817,10 @@ def select_table_metrics():
def get_setting(param, **kwargs):
user_group = funct.get_user_group(id=1)
try:
user_group = funct.get_user_group(id=1)
except Exception as e:
user_group = ''
if user_group == '' or param == 'lists_path' or param == 'ssl_local_path':
user_group = '1'
@ -2426,6 +2434,192 @@ def select_geoip_country_codes():
return cur.fetchall()
def insert_port_scanner_settings(server_id, user_group_id, enabled, notify, history):
con, cur = get_cur()
sql = """ insert into port_scanner_settings values('%s', '%s', '%s', '%s', '%s') """ % (server_id, user_group_id, enabled, notify, history)
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_port_scanner_settings(server_id, user_group_id, enabled, notify, history):
con, cur = get_cur()
sql = """ update port_scanner_settings set
user_group_id = '%s',
enabled = '%s',
notify = '%s',
history = '%s'
where server_id = '%s' """ % (user_group_id, enabled, notify, history, 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_port_scanner_settings(user_group):
con, cur = get_cur()
sql_group = ''
if user_group != 1:
sql_group = "where user_group_id = '%s'" % str(user_group)
sql = """select * from port_scanner_settings %s """ % sql_group
try:
cur.execute(sql)
except sqltool.Error as e:
funct.out_error(e)
else:
return cur.fetchall()
cur.close()
con.close()
def select_port_scanner_settings_for_service():
con, cur = get_cur()
sql = """select * from port_scanner_settings """
try:
cur.execute(sql)
except sqltool.Error as e:
funct.out_error(e)
else:
return cur.fetchall()
cur.close()
con.close()
def delete_port_scanner_settings(server_id):
con, cur = get_cur()
sql = """ delete from port_scanner_settings where server_id = '%s' """ % server_id
try:
cur.execute(sql)
con.commit()
except sqltool.Error as e:
con.rollback()
cur.close()
con.close()
def insert_port_scanner_port(serv, user_group_id, port, service_name):
con, cur = get_cur()
if mysql_enable == '1':
sql = """ insert into port_scanner_ports values('%s', '%s', '%s', '%s', now()) """ % (serv, user_group_id, port, service_name)
else:
sql = """ insert into port_scanner_ports values('%s', '%s', '%s', '%s', datetime('now', 'localtime')) """ % (serv, user_group_id, port, service_name)
try:
cur.execute(sql)
con.commit()
except sqltool.Error as e:
funct.out_error(e)
con.rollback()
cur.close()
con.close()
def select_ports(serv):
con, cur = get_cur()
sql = """select port from port_scanner_ports where serv = '%s' """ % serv
try:
cur.execute(sql)
except sqltool.Error as e:
funct.out_error(e)
else:
return cur.fetchall()
cur.close()
con.close()
def select_port_name(serv, port):
con, cur = get_cur()
sql = """select service_name from port_scanner_ports where serv = '%s' and port = '%s' """ % (serv, port)
try:
cur.execute(sql)
except sqltool.Error as e:
funct.out_error(e)
else:
for port in cur.fetchall():
return port[0]
cur.close()
con.close()
def select_count_opened_ports(serv):
con, cur = get_cur()
sql = """ select date, count(port) from port_scanner_ports where serv = '%s' """ % serv
try:
cur.execute(sql)
except sqltool.Error as e:
cur.close()
con.close()
return ""
else:
port = list()
for ports in cur.fetchall():
port.append([ports[1], ports[0]])
cur.close()
con.close()
return port
def delete_ports(serv):
con, cur = get_cur()
sql = """ delete from port_scanner_ports where serv = '%s' """ % serv
try:
cur.execute(sql)
con.commit()
except sqltool.Error as e:
funct.out_error(e)
con.rollback()
cur.close()
con.close()
def insert_port_scanner_history(serv, port, port_status, service_name):
con, cur = get_cur()
if mysql_enable == '1':
sql = """ insert into port_scanner_history values('%s', '%s', '%s', '%s', now()) """ % (serv, port, port_status, service_name)
else:
sql = """ insert into port_scanner_history values('%s', '%s', '%s', '%s', datetime('now', 'localtime')) """ % (serv, port, port_status, service_name)
try:
cur.execute(sql)
con.commit()
except sqltool.Error as e:
funct.out_error(e)
con.rollback()
cur.close()
con.close()
def select_port_scanner_history(serv):
con, cur = get_cur()
sql = """select * from port_scanner_history where serv = '%s' """ % serv
try:
cur.execute(sql)
except sqltool.Error as e:
funct.out_error(e)
else:
return cur.fetchall()
cur.close()
con.close()
def add_provider_do(provider_name, provider_group, provider_token):
con, cur = get_cur()
if mysql_enable == '1':
@ -2463,6 +2657,25 @@ def add_provider_aws(provider_name, provider_group, provider_key, provider_secre
con.close()
def add_provider_gcore(provider_name, provider_group, provider_user, provider_pass):
con, cur = get_cur()
if mysql_enable == '1':
sql = """ insert into providers_creds (name, type, `group`, key, secret, create_date, edit_date) values ('%s', 'gcore', '%s', '%s', '%s', now(), now())""" % (provider_name, provider_group, provider_user, provider_pass)
else:
sql = """ insert into providers_creds (name, type, `group`, key, secret, create_date, edit_date) values ('%s', 'gcore', '%s', '%s', '%s', datetime('now', 'localtime'), datetime('now', 'localtime'))""" % (provider_name, provider_group, provider_user, provider_pass)
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()
@ -2503,20 +2716,20 @@ def delete_provider(provider_id):
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):
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, volume_type):
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,
(region, instance_type, public_ip, floating_ip, volume_size, volume_type, 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', '%s', 'aws', '%s', now()), '%s'""" % (
region, instance_type, public_ip, floating_ip, volume_size, volume_type, 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,
(region, instance_type, public_ip, floating_ip, volume_size, volume_type, 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', '%s', 'aws', '%s', datetime('now', 'localtime'), '%s')""" % (
region, instance_type, public_ip, floating_ip, volume_size, volume_type, ssh_key_name, name, os, firewall, provider_id,
group_id, status, delete_on_termination)
try:
@ -2530,6 +2743,33 @@ def add_server_aws(region, instance_type, public_ip, floating_ip, volume_size, s
con.close()
def add_server_gcore(project ,region, instance_type, network_type, network_name, volume_size, ssh_key_name, name, os, firewall, provider_id, group_id, status, delete_on_termination, volume_type):
con, cur = get_cur()
if mysql_enable == '1':
sql = """ insert into provisioned_servers
(region, instance_type, public_ip, network_name, volume_size, volume_type, ssh_key_name, name, os, firewall, provider_id, group_id, type, status, date, delete_on_termination, project)
values ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', 'gcore', '%s', now()), '%s', '%s'""" % (
region, instance_type, network_type, network_name, volume_size, volume_type, ssh_key_name, name, os, firewall, provider_id,
group_id, status, delete_on_termination, project)
else:
sql = """ insert into provisioned_servers
(region, instance_type, public_ip, network_name, volume_size, volume_type, ssh_key_name, name, os, firewall, provider_id, group_id, type, status, date, delete_on_termination, project)
values ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', 'gcore', '%s', datetime('now', 'localtime'), '%s', '%s')""" % (
region, instance_type, network_type, network_name, volume_size, volume_type, ssh_key_name, name, os, firewall, provider_id,
group_id, status, delete_on_termination, project)
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':
@ -2559,7 +2799,24 @@ def add_server_do(region, size, privet_net, floating_ip, ssh_ids, ssh_key_name,
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
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, volume_type
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_gcore_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, project, network_name, volume_type, name_template
from provisioned_servers where id = '%s' """ % server_id
try:
@ -2612,6 +2869,22 @@ def update_provisioning_server_status(status, user_group_id, name, provider_id,
con.close()
def update_provisioning_server_gcore_name(name, template_name, user_group_id, provider_id):
con, cur = get_cur()
sql = """update provisioned_servers set name_template = '%s'
where group_id = '%s' and name = '%s' and provider_id = '%s' """ % (template_name, 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()
@ -2628,7 +2901,7 @@ def update_provisioning_server_error(status, user_group_id, name, provider_id):
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):
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, volume_type):
con, cur = get_cur()
sql = """ update provisioned_servers set
region = '%s',
@ -2643,8 +2916,9 @@ def update_server_aws(region, size, public_ip, floating_ip, volume_size, ssh_nam
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)
delete_on_termination = '%s',
volume_type = '%s'
where id = '%s' """ % (region, size, public_ip, floating_ip, volume_size, ssh_name, workspace, oss, firewall, provider, group, status, delete_on_termination, volume_type, server_id)
try:
cur.execute(sql)
@ -2659,6 +2933,39 @@ def update_server_aws(region, size, public_ip, floating_ip, volume_size, ssh_nam
con.close()
def update_server_gcore(region, size, network_type, network_name, volume_size, ssh_name, workspace, oss, firewall, provider, group, status, server_id, delete_on_termination, volume_type, project):
con, cur = get_cur()
sql = """ update provisioned_servers set
region = '%s',
instance_type = '%s',
public_ip = '%s',
network_name = '%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',
volume_type = '%s',
project = '%s'
where id = '%s' """ % (region, size, network_type, network_name, volume_size, ssh_name, workspace, oss, firewall, provider, group, status, delete_on_termination, volume_type, project, 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()
@ -2706,7 +3013,7 @@ def delete_provisioned_servers(server_id):
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"""
sql = """select id, name, provider_id, type, group_id, instance_type, status, date, region, os, IP, last_error, name_template from provisioned_servers"""
if kwargs.get('all'):
sql = """select * from provisioned_servers where id = '%s' """ % kwargs.get('all')
@ -2743,6 +3050,25 @@ def select_aws_provider(provider_id):
return aws_key, aws_secret
def select_gcore_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():
user_name = p[0]
password = p[1]
cur.close()
con.close()
return user_name, password
def select_do_provider(provider_id):
con, cur = get_cur()
sql = """ select key from providers_creds where id = '%s'""" % provider_id
@ -2790,6 +3116,37 @@ def update_do_provider(new_name, new_token, provider_id):
con.close()
def update_gcore_provider(new_name, new_user, new_pass, provider_id):
con, cur = get_cur()
if mysql_enable == '1':
sql = """ update providers_creds set
name = '%s',
key = '%s',
secret = '%s',
edit_date = now()
where id = '%s' """ % (new_name, new_user, new_pass, provider_id)
else:
sql = """ update providers_creds set
name = '%s',
key = '%s',
secret = '%s',
edit_date = datetime('now', 'localtime')
where id = '%s' """ % (new_name, new_user, new_pass, 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()

View File

@ -1,5 +1,7 @@
{% from 'include/input_macros.html' import input, select, checkbox %}
{% from 'include/provisioning/variables.html' import aws_regions, aws_oss, aws_volume_type %}
{% for s in server %}
{% set region_name = [] %}
<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' %}
@ -42,7 +44,13 @@
Region
</td>
<td>
<span id="aws_edit_region">{{s.0}}</span>
{% for key, value in aws_regions.items() %}
{% if s.0|int() == key|int() %}
{% do region_name.append(value) %}
{% endif %}
{% endfor %}
<span id="aws_edit_region" style="display: none;">{{s.0}}</span>
{{region_name.0}}
</td>
</tr>
<tr>
@ -56,7 +64,7 @@
<span class="need-field">*</span>
</td>
<td>
{{input('aws_edit_size', size='30', value=s.1)}}
{{input('aws_edit_size', size='26', 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>
@ -68,11 +76,7 @@
<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') }}
{{ select('aws_edit_oss', values=aws_oss, first=s.7, disabled='false') }}
</td>
</tr>
<tr>
@ -81,7 +85,7 @@
<span class="need-field">*</span>
</td>
<td>
{{input('aws_edit_ssh_name', size='30', value=s.5)}}
{{input('aws_edit_ssh_name', size='26', value=s.5)}}
<div class="tooltip tooltipTop tooltipTd">SSH key must exists in region where instance create</div>
</td>
</tr>
@ -91,13 +95,29 @@
</td>
</tr>
<tr>
<td class="padding20 padding-top20">
<td class="padding20">
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>
{{input('aws_edit_volume_size', size='26', value=s.4, type='number')}}Gb
</td>
</tr>
<tr>
<td class="padding20">
Volume type
<span class="need-field">*</span>
</td>
<td>
<select id="aws_edit_volume_type">
{% for key, value in aws_volume_type.items() %}
{% if s.13 == key %}
<option value="{{key}}" selected>{{value}}</option>
{% else %}
<option value="{{key}}">{{value}}</option>
{% endif %}
{% endfor %}
</select>
</td>
</tr>
<tr>

View File

@ -1,5 +1,7 @@
{% from 'include/input_macros.html' import input, select, checkbox %}
{% from 'include/provisioning/variables.html' import do_regions, do_oss %}
{% for s in server %}
{% set region_name = [] %}
<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' %}
@ -42,7 +44,13 @@
Region
</td>
<td>
<span id="do_edit_regions">{{s.0}}</span>
{% for key, value in do_regions.items() %}
{% if s.0|int() == key|int() %}
{% do region_name.append(value) %}
{% endif %}
{% endfor %}
<span id="do_edit_regions" style="display: none;">{{s.0}}</span>
{{region_name.0}}
</td>
</tr>
<tr>
@ -63,10 +71,7 @@
<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') }}
{{ select('do_edit_oss', values=do_oss, first=s.7, disabled='false') }}
</td>
</tr>
<tr>

View File

@ -0,0 +1,244 @@
{% from 'include/input_macros.html' import input, select, checkbox %}
{% from 'include/provisioning/variables.html' import gcore_regions, gcore_volume_type %}
{% for s in server %}
{% set region_name = [] %}
<div id="gcore_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="gcore_edit_server_name">{{s.6}}</span>({{s.16}})
</td>
</tr>
{{input('gcore_edit_group', value=s.10, type='hidden')}}
{{input('gcore_edit_id', value=s.11, type='hidden')}}
<tr>
<td class="padding20">
Provider credentials
<span class="need-field">*</span>
</td>
<td>
<select id="gcore_edit_id_provider">
{% for p in providers %}
{% if p.2 == 'gcore' %}
{% 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>
{% for key, value in gcore_regions.items() %}
{% if s.0|int() == key|int() %}
{% do region_name.append(value) %}
{% endif %}
{% endfor %}
<span id="gcore_edit_region" style="display: none;">{{s.0}}</span>
{{region_name.0}}
</td>
</tr>
<tr>
<td class="padding20">
Project name
</td>
<td>
<span id="gcore_edit_project_name">{{s.13}}</span>
</td>
</tr>
<tr>
<td colspan="2" class="headers">
<b>Instance</b>
</td>
</tr>
<tr>
<td class="padding20">
Flavor
<span class="need-field">*</span>
</td>
<td>
{{input('gcore_edit_size', size='26', value=s.1)}}
</td>
</tr>
<tr>
<td class="padding20">
OS
<span class="need-field">*</span>
</td>
<td>
{% set oss = dict() %}
{% set oss = {"centos-7-1811-x64-qcow2": "Centos 7", "centos8-1911-x64": "Centos 8", "sles15-SP2": "SLES 15-SP2", "fedora-32-x64-qcow2": "Fedora 32", "fedora-33-x64-qcow2": "Fedora 33",
"fedora-coreos-32-x64": "Fedora CoreOS 32", "ubuntu-16.04-x64": "Ubuntu 16.04", "ubuntu-18.04-x64": "Ubuntu 18.04",
"ubuntu-20.04-x64": "Ubuntu 20.04", "ubuntu-20.10-x64": "Ubuntu 20.10", "debian-9.7-x64-qcow2": "Debian 9.7",
"debian-10.1-x64-qcow2": "Debian 10.1", "debian-10.3-x64-qcow2": "Debian 10.3"} %}
{{ select('gcore_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('gcore_edit_ssh_name', size='26', value=s.5)}}
<div class="tooltip tooltipTop tooltipTd">SSH key must exists in region where instance edit</div>
</td>
</tr>
<tr>
<td colspan="2" class="headers">
<b>Volume</b>
</td>
</tr>
<tr>
<td class="padding20">
Volume size
<span class="need-field">*</span>
</td>
<td>
{{input('gcore_edit_volume_size', size='26', value=s.4, type='number')}}Gb
</td>
</tr>
<tr>
<td class="padding20 padding-top20">
Volume type
<span class="need-field">*</span>
</td>
<td>
<select id="gcore_edit_volume_type">
{% for key, value in gcore_volume_type.items() %}
{% if s.15 == key %}
<option value="{{key}}" selected>{{value}}</option>
{% else %}
<option value="{{key}}">{{value}}</option>
{% endif %}
{% endfor %}
</select>
</td>
</tr>
<tr>
<td class="padding20 padding-top20">Delete on termination</td>
<td>
{% set checked='checked' %}
{% if s.12 == 'false' %}
{% set checked='' %}
{% endif %}
{{checkbox('gcore_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">Network Type</td>
<td>
<select id="gcore_edit_network_type">
{% if s.2 == 'external' %}
<option value="external" selected>External IP</option>
{% else %}
<option value="external">External IP</option>
{% endif %}
{% if s.2 == 'any_subnet' %}
<option value="any_subnet" selected>Custom network</option>
{% set style = 'display: table-row;' %}
{% else %}
<option value="any_subnet">Custom network</option>
{% set style = 'display: none;' %}
{% endif %}
</select>
</td>
</tr>
<tr id="gcore_edit_any_subnet" style="{{style}}">
<td class="padding20">
Network name
<span class="need-field">*</span>
</td>
<td>{{input('gcore_edit_network_name', size='26', value=s.14)}}</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('gcore_edit_firewall', checked=checked)}}
<div class="tooltip tooltipTop tooltipTd">HAProxy-WI will edit 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>
<script>
$( function() {
$('select').selectmenu();
$('#gcore_edit_network_type').on('selectmenuchange', function (){
if ($('#gcore_edit_network_type option:selected').val() == 'any_subnet') {
$('#gcore_edit_any_subnet').show();
} else if ($('#gcore_edit_network_type option:selected').val() == 'external') {
$('#gcore_edit_any_subnet').hide();
}
});
});
function refreshOss() {
var newOptions = {
"centos-7-gcore": "Centos 7"
};
if ($('#gcore_edit_region').text() == '6' || $('#gcore_edit_region').text() == '14') {
var newOptions = {
"centos-7-gcore": "Centos 7"
};
} else if ($('#gcore_edit_region').text() == '10') {
var newOptions = {
"centos-7-gcore": "Centos 7",
"sles15-SP2": "SLES 15-SP2"
};
} else if ($('#gcore_edit_region').text() == '18' || $('#gcore_edit_region').text() == '22') {
var newOptions = {
"centos-7-1811-x64-qcow2": "Centos 7",
"centos8-1911-x64": "Centos 8",
"sles15-SP2": "SLES 15-SP2",
"fedora-32-x64-qcow2": "Fedora 32",
"fedora-33-x64-qcow2": "Fedora 33",
"fedora-coreos-32-x64": "Fedora CoreOS 32",
"ubuntu-16.04-x64": "Ubuntu 16.04",
"ubuntu-18.04-x64": "Ubuntu 18.04",
"ubuntu-20.04-x64": "Ubuntu 20.04",
"ubuntu-20.10-x64": "Ubuntu 20.10",
"debian-9.7-x64-qcow2": "Debian 9.7",
"debian-10.1-x64-qcow2": "Debian 10.1",
"debian-10.3-x64-qcow2": "Debian 10.3"
};
}
var $el = $("#gcore_edit_oss");
$el.empty();
$.each(newOptions, function(key,value) {
$el.append($("<option></option>")
.attr("value", key).text(value));
});
$el.selectmenu("refresh");
}
refreshOss();
</script>
{% endfor %}

View File

@ -9,6 +9,9 @@
{% elif p.2 == 'aws' %}
AWS
{% set onclickEditAction = 'editAwsProvider' %}
{% elif p.2 == 'gcore' %}
G-Core Labs
{% set onclickEditAction = 'editGcoreProvider' %}
{% endif %}
</span>
</td>

View File

@ -1,6 +1,38 @@
{% from 'include/provisioning/variables.html' import gcore_regions, do_regions, aws_regions %}
{% for s in servers %}
{% set region_name = [] %}
{% if s.3 == 'do' %}
{% set provider_full_name = 'DigitalOcean' %}
{% set onclickEditAction = 'editDoServer' %}
{% for key, value in do_regions.items() %}
{% if s.8|int() == key|int() %}
{% do region_name.append(value) %}
{% endif %}
{% endfor %}
{% elif s.3 == 'aws' %}
{% set provider_full_name = 'AWS' %}
{% set onclickEditAction = 'editAwsServer' %}
{% for key, value in aws_regions.items() %}
{% if s.8|int() == key|int() %}
{% do region_name.append(value) %}
{% endif %}
{% endfor %}
{% elif s.3 == 'gcore' %}
{% set provider_full_name = 'G-Core Labs' %}
{% set onclickEditAction = 'editGcoreServer' %}
{% for key, value in gcore_regions.items() %}
{% if s.8|int() == key|int() %}
{% do region_name.append(value) %}
{% endif %}
{% endfor %}
{% endif %}
<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 class="padding10 first-collumn">
<span id="server-name-{{s.0}}">{{s.1}}</span>
{% if s.3 == 'gcore' %}
({{s.12}})
{% endif %}
</td>
<td style="width: 10%">
{% for p in providers %}
{% if p.0|int() == s.2|int() %}
@ -29,17 +61,11 @@
<span id="server-group-{{s.0}}" style="display: none;">{{user_group}}</span>
{% endif %}
<td style="width: 10%">
{% if s.3 == 'do' %}
DigitalOcean
{% set onclickEditAction = 'editDoServer' %}
{% elif s.3 == 'aws' %}
AWS
{% set onclickEditAction = 'editAwsServer' %}
{% endif %}
{{provider_full_name}}
<span id="server-cloud-{{s.0}}" style="display: none;">{{s.3}}</span>
</td>
<td style="width: 5%">
{{s.8}}
<td style="width: 10%">
{{region_name.0}}
</td>
<td style="width: 10%">
<span id="sever-os-{{s.0}}">{{s.9}}</span>
@ -51,8 +77,8 @@
<span id="sever-size-{{s.0}}">{{s.5}}</span>
</td>
<td style="width: 5%">
{% if s.6 == 'Created ' %}
{% set style='сolor: green;' %}
{% if s.6 == 'Created' %}
{% set style='color: var(--green-color);' %}
{% elif s.6 == 'Error ' %}
{% set style='color: red;cursor: help;' %}
{% endif %}

View File

@ -1,3 +1,4 @@
{% from 'include/provisioning/variables.html' import gcore_regions, do_regions, aws_regions, aws_oss, do_oss, aws_volume_type, gcore_volume_type %}
<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' %}
@ -12,7 +13,7 @@
<span class="need-field">*</span>
</td>
<td>
{{input('do_create_server_name', required='required', size='30')}}
{{input('do_create_server_name', required='required', size='26')}}
<div class="tooltip tooltipTop tooltipTd">The name must contain only URL safe characters, and no path separators</div>
</td>
</tr>
@ -54,12 +55,7 @@
<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) }}
{{ select('do_create_regions', values=do_regions) }}
<div class="tooltip tooltipTop tooltipTd">Not all regions may be active</div>
</td>
</tr>
@ -73,7 +69,44 @@
Size
<span class="need-field">*</span>
</td>
<td>{{input('do_create_size', required='required', size='30')}}</td>
<td>
<select id="do_create_size" required="required">
<optgroup label="Basic">
<option value="s-1vcpu-1gb">s-1vcpu-1gb</option>
<option value="s-1vcpu-2gb">s-1vcpu-2gb</option>
<option value="s-2vcpu-2gb">s-2vcpu-2gb</option>
<option value="s-2vcpu-4gb">s-2vcpu-4gb</option>
<option value="s-4vcpu-8gb">s-4vcpu-8gb</option>
<option value="s-8vcpu-16gb">s-8vcpu-16gb</option>
</optgroup>
<optgroup label="General Purpose">
<option value="g-2vcpu-8gb">g-2vcpu-8gb</option>
<option value="g-4vcpu-16gb">g-4vcpu-16gb</option>
<option value="g-8vcpu-32gb">g-8vcpu-32gb</option>
<option value="g-16vcpu-64gb">g-16vcpu-64gb</option>
<option value="g-32vcpu-128gb">g-32vcpu-128gb</option>
<option value="g-40vcpu-160gb">g-40vcpu-160gb</option>
</optgroup>
<optgroup label="CPU-Optimized">
<option value="c-2-4gib">c-2-4gib</option>
<option value="c-4-8gib">c-4-8gib</option>
<option value="c-8-16gib">c-8-16gib</option>
<option value="c-16-32gib">c-16-32gib</option>
<option value="c-32-64gib">c-32-64gib</option>
</optgroup>
<optgroup label="Memory-Optimized">
<option value="m-2vcpu-16gb">m-2vcpu-16gb</option>
<option value="m-4vcpu-32gb">m-4vcpu-32gb</option>
<option value="m-8vcpu-64gb">m-8vcpu-64gb</option>
<option value="m-16vcpu-128gb">m-16vcpu-128gb</option>
<option value="m-24vcpu-192gb">m-24vcpu-192gb</option>
<option value="m-32vcpu-256gb">m-32vcpu-256gb</option>
</optgroup>
</select>
{{input('do_create_size_text', size='26', style='display: none')}}
<a class="link" id="do-instance-enter">Enter manually</a>
<a class="link" id="do-instance-enter-select" style="display: none; margin-left: 27px;">Change to select</a>
</td>
</tr>
<tr>
<td class="padding20">
@ -81,10 +114,7 @@
<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) }}
{{ select('do_create_oss', values=do_oss) }}
</td>
</tr>
<tr>
@ -106,7 +136,7 @@
<span class="need-field">*</span>
</td>
<td>
{{input('do_create_ssh_ids', size='30')}}
{{input('do_create_ssh_ids', size='26')}}
<div class="tooltip tooltipTop tooltipTd">List comma separated. Required if SSH key name is empty</div>
</td>
</tr>
@ -116,7 +146,7 @@
<span class="need-field">*</span>
</td>
<td>
{{input('do_create_ssh_name', size='30')}}
{{input('do_create_ssh_name', size='26')}}
<div class="tooltip tooltipTop tooltipTd">Required if SSH key ids is empty</div>
</td>
</tr>
@ -164,7 +194,7 @@
<span class="need-field">*</span>
</td>
<td>
{{input('aws_create_server_name', required='required', size='30')}}
{{input('aws_create_server_name', required='required', size='26')}}
<div class="tooltip tooltipTop tooltipTd">The name must contain only URL safe characters, and no path separators</div>
</td>
</tr>
@ -206,15 +236,7 @@
<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) }}
{{ select('aws_create_regions', values=aws_regions) }}
<div class="tooltip tooltipTop tooltipTd">Not all regions may be active</div>
</td>
</tr>
@ -229,7 +251,7 @@
<span class="need-field">*</span>
</td>
<td>
{{input('aws_create_size', required='required', size='30')}}
{{input('aws_create_size', required='required', size='26')}}
<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>
@ -241,11 +263,7 @@
<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) }}
{{ select('aws_create_oss', values=aws_oss) }}
</td>
</tr>
<tr>
@ -254,7 +272,7 @@
<span class="need-field">*</span>
</td>
<td>
{{input('aws_create_ssh_name', size='30')}}
{{input('aws_create_ssh_name', size='26')}}
<div class="tooltip tooltipTop tooltipTd">SSH key must exists in region where instance create</div>
</td>
</tr>
@ -264,13 +282,21 @@
</td>
</tr>
<tr>
<td class="padding20 padding-top20">
<td class="padding20">
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>
{{input('aws_create_volume_size', size='26', value='10', type='number')}}Gb
</td>
</tr>
<tr>
<td class="padding20">
Volume type
<span class="need-field">*</span>
</td>
<td>
{{ select('aws_create_volume_type', values=aws_volume_type) }}
</td>
</tr>
<tr>
@ -304,6 +330,200 @@
</tr>
</table>
</div>
<div id="gcore_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('gcore_create_server_name', required='required', size='26')}}
<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="gcore_create_group">
{% for group in groups %}
<option value="{{ group.0 }}">{{ group.1 }}</option>
{% endfor %}
</select>
</td>
</tr>
{% else %}
{{input('gcore_create_group', value=groups, type='hidden')}}
{% endif %}
<tr>
<td class="padding20">
Provider credentials
<span class="need-field">*</span>
</td>
<td>
<select id="gcore_create_provider">
{% for p in providers %}
{% if p.2 == 'gcore' %}
<option value="{{ p.0 }}">{{ p.1 }}</option>
{% endif %}
{% endfor %}
</select>
</td>
</tr>
<tr>
<td class="padding20">
Region
<span class="need-field">*</span>
</td>
<td>
{{ select('gcore_create_regions', values=gcore_regions) }}
</td>
</tr>
<tr>
<td class="padding20">
Project name
<span class="need-field">*</span>
</td>
<td>
{{input('gcore_create_project_name', size='26', value='default')}}
</td>
</tr>
<tr>
<td colspan="2" class="headers">
<b>Instance</b>
</td>
</tr>
<tr>
<td class="padding20">
Flavor
<span class="need-field">*</span>
</td>
<td>
<select id="gcore_create_size" required="required">
<optgroup label="Standard">
<option value="g1-standard-1-2">g1-standard-1-2</option>
<option value="g1-standard-2-4">g1-standard-2-4</option>
<option value="g1-standard-2-8">g1-standard-2-8</option>
<option value="g1-standard-4-8">g1-standard-4-8</option>
<option value="g1-standard-4-16">g1-standard-4-16</option>
<option value="g1-standard-8-16">g1-standard-8-16</option>
<option value="g1-standard-8-32">g1-standard-8-32</option>
<option value="g1-standard-16-32">g1-standard-16-32</option>
<option value="g1-standard-16-64">g1-standard-16-64</option>
<option value="g1-standard-32-64">g1-standard-32-64</option>
<option value="g1-standard-32-128">g1-standard-32-128</option>
</optgroup>
<optgroup label="vCPU">
<option value="g1-cpu-2-2">g1-cpu-2-2</option>
<option value="g1-cpu-4-4">g1-cpu-4-4</option>
<option value="g1-cpu-8-8">g1-cpu-8-8</option>
<option value="g1-cpu-16-16">g1-cpu-16-16</option>
<option value="g1-cpu-32-32">g1-cpu-32-32</option>
</optgroup>
<optgroup label="Memory">
<option value="g1-memory-2-16">g1-memory-2-16</option>
<option value="g1-memory-4-32">g1-memory-4-32</option>
<option value="g1-memory-8-64">g1-memory-8-64</option>
<option value="g1-memory-16-128">g1-memory-16-128</option>
<option value="g1-memory-32-256">g1-memory-32-256</option>
</optgroup>
</select>
{{input('gcore_create_size_text', size='26', style='display: none')}}
<a class="link" id="gcore-instance-enter">Enter manually</a>
<a class="link" id="gcore-instance-enter-select" style="display: none; margin-left: 27px;">Change to select</a>
</td>
</tr>
<tr>
<td class="padding20">
OS
<span class="need-field">*</span>
</td>
<td>
{% set oss = dict() %}
{% set oss = {'centos-7-gcore':'Centos 7'} %}
{{ select('gcore_create_oss', values=oss) }}
</td>
</tr>
<tr>
<td class="padding20 padding-top20">
SSH key pair name
<span class="need-field">*</span>
</td>
<td>
{{input('gcore_create_ssh_name', size='26')}}
<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">
Volume size
<span class="need-field">*</span>
</td>
<td>
{{input('gcore_create_volume_size', size='26', value='10', type='number')}}Gb
</td>
</tr>
<tr>
<td class="padding20">
Volume type
<span class="need-field">*</span>
</td>
<td>
{{ select('gcore_create_volume_type', values=gcore_volume_type) }}
</td>
</tr>
<tr>
<td class="padding20 padding-top20">Delete on termination</td>
<td>
{{checkbox('gcore_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">Network Type</td>
<td>
<select id="gcore_create_network_type">
<option value="external">External IP</option>
<option value="any_subnet">Custom Network</option>
</select>
</td>
</tr>
<tr id="gcore_any_subnet" style="display: none">
<td class="padding20">
Network name
<span class="need-field">*</span>
</td>
<td>{{input('gcore_create_network_name', size='26')}}</td>
</tr>
<tr>
<td class="padding20" style="padding-bottom: 25px;padding-top: 25px;">Firewall</td>
<td>
{{checkbox('gcore_create_firewall', checked='checked')}}
<div class="tooltip tooltipTop tooltipTd">HAProxy-WI will create Security group and open 22, 443, 1999, 8085, 8086 ports. Otherwise will be used the default SG</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>

View File

@ -1,5 +1,5 @@
{% set providers_for_choose = dict() %}
{% set providers_for_choose = {'aws':'AWS','do':'DigitalOcean'} %}
{% set providers_for_choose = {'aws':'AWS','do':'DigitalOcean', 'gcore':'G-Core Labs'} %}
<div id="add_providers_choosing" style="display: none;">
{{ select('add_select_providers', values=providers_for_choose) }}
</div>
@ -91,6 +91,49 @@
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="gcore_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('gcore_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="gcore_new_group">
{% for group in groups %}
<option value="{{ group.0 }}">{{ group.1 }}</option>
{% endfor %}
</select>
</td>
</tr>
{% else %}
{{input('gcore_new_group', value=groups, type='hidden')}}
{% endif %}
<tr>
<td class="padding20">
User name
<span class="need-field">*</span>
</td>
<td>{{input('gcore_new_user', required='required', size='30')}}</td>
</tr>
<tr>
<td class="padding20">
Password
<span class="need-field">*</span>
</td>
<td>{{input('gcore_new_pass', required='required', type='password', size='30')}}</td>
</tr>
</table>
</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' %}
@ -139,4 +182,32 @@
<td>{{input('do_edit_provider_token', required='required', size='30')}}</td>
</tr>
</table>
</div>
<div id="gcore_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('gcore_edit_provider_name', required='required', size='30')}}</td>
</tr>
{{input('gcore_edit_provider_group', value=groups, type='hidden')}}
{{input('gcore_edit_provider_id', type='hidden')}}
<tr>
<td class="padding20">
User name
<span class="need-field">*</span>
</td>
<td>{{input('gcore_edit_provider_user', required='required', size='30')}}</td>
</tr>
<tr>
<td class="padding20">
Password
<span class="need-field">*</span>
</td>
<td>{{input('gcore_edit_provider_password', required='required', type='password', size='30')}}</td>
</tr>
</table>
</div>

View File

@ -0,0 +1,21 @@
{% set gcore_regions = {'6':'Luxembourg','10':'Moscow','14':'Manassas', '18':'Singapore','22':'Khabarovsk'} %}
{% set aws_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)'} %}
{% set do_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'} %}
{% set aws_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'} %}
{% set do_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'} %}
{% set aws_volume_type = {'gp2':'gp2', 'gp3':'gp3', 'standard':'standard', 'io1':'io1', 'io2':'io2', 'sc1':'sc1', 'st1':'st1'} %}
{% set gcore_volume_type = {'standard':'standard', 'ssd_hiiops':'ssd_hiiops', 'cold':'cold', 'ultra':'ultra'} %}

View File

@ -1,7 +1,7 @@
.padding20{ width: 160px;}
.server-creating {padding-bottom: 10px;}
.proccessing_done {color: green;}
.proccessing, .processing_error {font-weight: bold; color: green;}
.proccessing_done {color: var(--green-color);}
.proccessing, .processing_error {font-weight: bold; color: var(--green-color);}
.proccessing::before {
display: none;
font-family: "Font Awesome 5 Solid";

View File

@ -14,6 +14,84 @@ $( function() {
$('#do_create_ssh_ids_tr').show();
}
});
$('#gcore_create_network_type').on('selectmenuchange', function (){
if ($('#gcore_create_network_type option:selected').val() == 'any_subnet') {
$('#gcore_any_subnet').show();
} else if ($('#gcore_create_network_type option:selected').val() == 'external') {
$('#gcore_any_subnet').hide();
}
});
$('#gcore_create_regions').on('selectmenuchange', function (){
if ($('#gcore_create_regions option:selected').val() == '6' || $('#gcore_create_regions option:selected').val() == '14') {
var newOptions = {
"centos-7-gcore": "Centos 7"
};
} else if ($('#gcore_create_regions option:selected').val() == '10') {
var newOptions = {
"centos-7-gcore": "Centos 7",
"sles15-SP2": "SLES 15-SP2"
};
} else if ($('#gcore_create_regions option:selected').val() == '18' || $('#gcore_create_regions option:selected').val() == '22') {
var newOptions = {
"centos-7-1811-x64-qcow2": "Centos 7",
"centos8-1911-x64": "Centos 8",
"sles15-SP2": "SLES 15-SP2",
"fedora-32-x64-qcow2": "Fedora 32",
"fedora-33-x64-qcow2": "Fedora 33",
"fedora-coreos-32-x64": "Fedora CoreOS 32",
"ubuntu-16.04-x64": "Ubuntu 16.04",
"ubuntu-18.04-x64": "Ubuntu 18.04",
"ubuntu-20.04-x64": "Ubuntu 20.04",
"ubuntu-20.10-x64": "Ubuntu 20.10",
"debian-9.7-x64-qcow2": "Debian 9.7",
"debian-10.1-x64-qcow2": "Debian 10.1",
"debian-10.3-x64-qcow2": "Debian 10.3"
};
}
var $el = $("#gcore_create_oss");
$el.empty();
$.each(newOptions, function(key,value) {
$el.append($("<option></option>")
.attr("value", key).text(value));
});
$el.selectmenu("refresh");
});
$('#gcore-instance-enter').on('click', function() {
$('#gcore_create_size').css('display', 'none');
$('#gcore-instance-enter').css('display', 'none');
$('#gcore_create_size').attr('id', 'gcore_create_size_select');
$("#gcore_create_size_select" ).selectmenu( "destroy" );
$("#gcore_create_size_select" ).css('display', 'none');
$('#gcore_create_size_text').attr('id', 'gcore_create_size');
$('#gcore_create_size').css('display', 'inline');
$('#gcore-instance-enter-select').css('display', 'inline');
});
$('#gcore-instance-enter-select').on('click', function() {
$('#gcore_create_size').css('display', 'none');
$('#gcore_create_size').attr('id', 'gcore_create_size_text');
$('#gcore_create_size_select').attr('id', 'gcore_create_size');
$("#gcore_create_size" ).selectmenu();
$("#gcore-instance-enter-select" ).css('display', 'none');
$('#gcore-instance-enter').css('display', 'inline');
});
$('#do-instance-enter').on('click', function() {
$('#do_create_size').css('display', 'none');
$('#do-instance-enter').css('display', 'none');
$('#do_create_size').attr('id', 'do_create_size_select');
$("#do_create_size_select" ).selectmenu( "destroy" );
$("#do_create_size_select" ).css('display', 'none');
$('#do_create_size_text').attr('id', 'do_create_size');
$('#do_create_size').css('display', 'inline');
$('#do-instance-enter-select').css('display', 'inline');
});
$('#do-instance-enter-select').on('click', function() {
$('#do_create_size').css('display', 'none');
$('#do_create_size').attr('id', 'do_create_size_text');
$('#do_create_size_select').attr('id', 'do_create_size');
$("#do_create_size" ).selectmenu();
$("#do-instance-enter-select" ).css('display', 'none');
$('#do-instance-enter').css('display', 'inline');
});
});
var addProvidersChoosing = $( "#add_providers_choosing" ).dialog({
autoOpen: false,
@ -83,6 +161,23 @@ var doProvider = $( "#do_provider" ).dialog({
}
}
});
var gcoreProvider = $( "#gcore_provider" ).dialog({
autoOpen: false,
width: 574,
modal: true,
title: "Add G-Core Labs as provider",
buttons: {
"Add": function() {
addGcoreProvider($( this ));
clearTips();
},
Cancel: function() {
$( this ).dialog( "close" );
addProvidersChoosing.dialog('open');
clearTips();
}
}
});
var doCreate = $( "#do_create" ).dialog({
autoOpen: false,
width: 574,
@ -100,6 +195,23 @@ var doCreate = $( "#do_create" ).dialog({
}
}
});
var gcoreCreate = $( "#gcore_create" ).dialog({
autoOpen: false,
width: 574,
modal: true,
title: "Create a new Instance in G-Core Labs",
buttons: {
"Create": function() {
gcoreCreateServer($(this));
clearTips();
},
Cancel: function() {
$( this ).dialog( "close" );
createProvidersChoosing.dialog('open');
clearTips();
}
}
});
var awsCreate = $( "#aws_create" ).dialog({
autoOpen: false,
width: 574,
@ -156,6 +268,8 @@ function addProvider(provider) {
awsProvider.dialog('open');
} else if (provider == 'do') {
doProvider.dialog('open');
} else if (provider == 'gcore') {
gcoreProvider.dialog('open');
} else {
toastr.error('Choose provider before adding');
}
@ -165,6 +279,8 @@ function CreateServer(provider) {
awsCreate.dialog('open');
} else if (provider == 'do') {
doCreate.dialog('open');
} else if (provider == 'gcore') {
gcoreCreate.dialog('open');
} else {
toastr.error('Choose provider before creating server');
}
@ -183,6 +299,23 @@ function doCreateServer(dialog_id) {
startCreatingServer('do');
}
}
function gcoreCreateServer(dialog_id) {
var valid = true;
toastr.clear();
allFields = $( [] ).add( $('#gcore_create_server_name') ).add( $('#gcore_create_size') ).add( $('#gcore_create_volume_size') )
.add( $('#gcore_create_project_name') ).add( $('#gcore_create_ssh_name') );
allFields.removeClass( "ui-state-error" );
valid = valid && checkLength( $('#gcore_create_server_name'), "Server name", 1 );
valid = valid && checkLength( $('#gcore_create_size'), "Flavor", 1 );
valid = valid && checkLength( $('#gcore_create_project_name'), "Project", 1 );
valid = valid && checkLength( $('#gcore_create_ssh_name'), "SSH key pair name", 1 );
valid = valid && checkLength( $('#gcore_create_volume_size'), "Volume size ", 1 );
if (valid) {
clearTips();
dialog_id.dialog('close');
startCreatingServer('gcore');
}
}
function awsCreateServer(dialog_id) {
var valid = true;
toastr.clear();
@ -195,7 +328,7 @@ function awsCreateServer(dialog_id) {
valid = valid && checkLength( $('#aws_create_volume_size'), "Volume size", 1 );
if(valid) {
clearTips();
dialog_id.dialog('destroy');
dialog_id.dialog('close');
startCreatingServer('aws');
}
}
@ -222,6 +355,8 @@ function startCreatingServer(provider) {
awsInitServer();
} else if (provider == 'do') {
doInitServer();
} else if (provider == 'gcore') {
gcoreInitServer();
}
$.getScript("/inc/fontawesome.min.js");
}
@ -232,6 +367,8 @@ function startEditingServer(provider, server_id) {
awsEditInitServer(server_id);
} else if (provider == 'do') {
doEditInitServer(server_id);
} else if (provider == 'gcore') {
gcoreEditInitServer(server_id);
}
$.getScript("/inc/fontawesome.min.js");
}
@ -282,6 +419,7 @@ function awsVarsServer() {
aws_create_oss: $('#aws_create_oss').val(),
aws_create_ssh_name: $('#aws_create_ssh_name').val(),
aws_create_volume_size: $('#aws_create_volume_size').val(),
aws_create_volume_type: $('#aws_create_volume_type').val(),
delete_on_termination: aws_create_delete_on_termination,
aws_create_floating_net: aws_create_floating_net,
aws_create_firewall: aws_create_firewall,
@ -347,6 +485,7 @@ function awsWorkspaceServer() {
aws_create_oss: $('#aws_create_oss option:selected').val(),
aws_create_ssh_name: $('#aws_create_ssh_name').val(),
aws_create_volume_size: $('#aws_create_volume_size').val(),
aws_create_volume_type: $('#aws_create_volume_type').val(),
aws_create_delete_on_termination: aws_create_delete_on_termination,
aws_create_floating_net: aws_create_floating_net,
aws_create_firewall: aws_create_firewall,
@ -357,11 +496,7 @@ function awsWorkspaceServer() {
success: function( data ) {
data = data.replace(/\s+/g, ' ');
if (data.indexOf('error:') != '-1' && data.indexOf('Last error:') == '-1') {
var server_id = $('#ajax-provisioning-body tr td span:regex(id, sever-ip-)').last().attr('id').split('-')[2]
showProvisioningError(data, '#creating-workspace', '#creating-validate', '#wait-mess', '#creating-error', '#creating-progress', 'aws');
$('#sever-status-'+server_id).text('Error');
$('#sever-status-'+server_id).attr('title', data);
$('#sever-status-'+server_id).css('color', 'red');
} else {
showProvisioningProccess('#creating-validate', '#creating-workspace', '#creating-server', '80', '#creating-progress');
common_ajax_action_after_success('1', 'newserver', 'ajax-provisioning-body', data);
@ -423,7 +558,7 @@ function awsEditInitServer(server_id) {
}
} );
}
function awsEditingVarsServer(server_id, dialog_id) {
function awsEditingVarsServer(server_id) {
var aws_edit_floating_net = 'false';
var aws_editing_firewall = 'false';
var aws_edit_public_ip = 'false';
@ -450,6 +585,7 @@ function awsEditingVarsServer(server_id, dialog_id) {
aws_editing_oss: $('#aws_edit_oss option:selected').val(),
aws_editing_ssh_name: $('#aws_edit_ssh_name').val(),
aws_editing_volume_size: $('#aws_edit_volume_size').val(),
aws_editing_volume_type: $('#aws_edit_volume_type').val(),
aws_editing_delete_on_termination: aws_edit_delete_on_termination,
aws_editing_floating_net: aws_edit_floating_net,
aws_editing_firewall: aws_editing_firewall,
@ -519,6 +655,7 @@ function awsEditWorkspaceServer(server_id) {
aws_editing_oss: $('#aws_edit_oss option:selected').val(),
aws_editing_ssh_name: $('#aws_edit_ssh_name').val(),
aws_editing_volume_size: $('#aws_edit_volume_size').val(),
aws_editing_volume_type: $('#aws_edit_volume_type').val(),
aws_editing_delete_on_termination: aws_edit_delete_on_termination,
aws_editing_floating_net: aws_edit_floating_net,
aws_editing_firewall: aws_editing_firewall,
@ -659,6 +796,48 @@ function editAwsServer(id) {
}
} );
}
function editGcoreServer(id) {
$.ajax( {
url: "options.py",
data: {
editGcoreServer: id,
editGcoreGroup: $('#server-group-'+id).text(),
token: $('#token').val()
},
type: "POST",
success: function( data ) {
data = data.replace(/\s+/g,' ');
if (data.indexOf('error: ') != '-1') {
toastr.error(data);
} else if (data.indexOf('warning: ') != '-1') {
toastr.clear();
toastr.warning(data);
} else {
$('#ajax').html(data);
var gcoreEdit = $( "#gcore_edit" ).dialog({
autoOpen: false,
width: 576,
modal: true,
title: "Editing G-Core Labs server: " + $('#server-name-'+id).text(),
close: function( event, ui ) {$( this ).dialog( "destroy" );},
buttons: {
"Edit": function() {
gcoreEditServer($(this), id);
},
Cancel: function() {
$( this ).dialog( "destroy" );
clearTips();
}
}
});
$( "select" ).selectmenu();
$( "input[type=checkbox]" ).checkboxradio();
$.getScript("/inc/fontawesome.min.js");
gcoreEdit.dialog('open');
}
}
} );
}
function editDoServer(id) {
$.ajax( {
url: "options.py",
@ -727,6 +906,19 @@ function add_do_button_after_server_created() {
} });
creatingServer.dialog("option", "buttons", buttons);
}
function add_gcore_button_after_server_created() {
var buttons = creatingServer.dialog("option", "buttons");
$.extend(buttons, { Back: function() {
$( this ).dialog( "close" );
gcoreCreate.dialog( "open" );
cleanProvisioningProccess('#server_creating ul li', '#created-mess');
$('#wait-mess').show();
$('#edited-mess').html('');
$('#edited-mess').hide();
hideProvisioningError('#creating-error');
} });
creatingServer.dialog("option", "buttons", buttons);
}
function add_button_after_server_edited(server_id) {
var buttons = editingServer.dialog("option", "buttons");
$.extend(buttons, { Back: function() {
@ -740,6 +932,19 @@ function add_button_after_server_edited(server_id) {
} });
editingServer.dialog("option", "buttons", buttons);
}
function add_gcore_button_after_server_edited(server_id) {
var buttons = editingServer.dialog("option", "buttons");
$.extend(buttons, { Back: function() {
$( this ).dialog( "close" );
editGcoreServer(server_id)
cleanProvisioningProccess('#server_editing ul li', '#edited-mess');
$('#wait-mess').show();
$('#edited-mess').html('');
$('#edited-mess').hide();
hideProvisioningError('#editing-error');
} });
editingServer.dialog("option", "buttons", buttons);
}
function add_do_button_after_server_edited(server_id) {
var buttons = editingServer.dialog("option", "buttons");
$.extend(buttons, { Back: function() {
@ -753,6 +958,19 @@ function add_do_button_after_server_edited(server_id) {
} });
editingServer.dialog("option", "buttons", buttons);
}
function add_gcore_button_after_server_edited(server_id) {
var buttons = editingServer.dialog("option", "buttons");
$.extend(buttons, { Back: function() {
$( this ).dialog( "close" );
editGcoreServer(server_id);
cleanProvisioningProccess('#server_editing ul li', '#edited-mess');
$('#wait-mess').show();
$('#edited-mess').html('');
$('#edited-mess').hide();
hideProvisioningError('#editing-error');
} });
editingServer.dialog("option", "buttons", buttons);
}
function remove_button_after_server_created() {
creatingServer.dialog("option",{buttons:{ Close: function() {
$( this ).dialog( "close" );
@ -778,6 +996,8 @@ function showProvisioningError(data, step_id, prev_step_id, wait_mess, error_id,
add_button_after_server_created();
} else if (cloud == 'do') {
add_do_button_after_server_created();
} else if (cloud == 'gcore') {
add_gcore_button_after_server_created();
}
$.getScript("/inc/fontawesome.min.js");
}
@ -837,6 +1057,39 @@ function addDoProvider(dialog_id) {
} );
}
}
function addGcoreProvider(dialog_id) {
var valid = true;
toastr.clear();
allFields = $( [] ).add( $('#gcore_new_name') ).add( $('#gcore_new_name')).add( $('#gcore_new_pass') );
allFields.removeClass( "ui-state-error" );
valid = valid && checkLength( $('#gcore_new_name'), "Provider name", 1 );
valid = valid && checkLength( $('#gcore_new_name'), "User name", 1 );
valid = valid && checkLength( $('#gcore_new_pass'), "Password", 1 );
if (valid) {
$.ajax( {
url: "options.py",
data: {
gcore_new_name: $('#gcore_new_name').val(),
gcore_new_group: $('#do_new_group').val(),
gcore_new_user: $('#gcore_new_user').val(),
gcore_new_pass: $('#gcore_new_pass').val(),
token: $('#token').val()
},
type: "POST",
success: function( data ) {
data = data.replace(/\s+/g,' ');
if (data.indexOf('error:') != '-1') {
toastr.error(data);
} else {
var getId = new RegExp('[0-9]+');
var id = data.match(getId);
$('select:regex(id, gcore_create_provider)').append('<option value=' + id + '>' +$('#gcore_new_name').val()+'</option>').selectmenu("refresh");
common_ajax_action_after_success(dialog_id, 'newprovider', 'ajax-providers', data);
}
}
} );
}
}
function addAwsProvider(dialog_id) {
var valid = true;
toastr.clear();
@ -913,7 +1166,6 @@ var doEditProvider = $( "#do_edit_provider" ).dialog({
buttons: {
"Edit": function() {
doEditProviderSave();
$( this ).dialog( "close" );
},
Cancel: function() {
$( this ).dialog( "close" );
@ -928,32 +1180,103 @@ function editDoProvider(id) {
doEditProvider.dialog('open');
}
function doEditProviderSave() {
id = $('#do_edit_provider_id').val();
token = $('#do_edit_provider_token').val();
new_name = $('#do_edit_provider_name').val();
$.ajax( {
url: "options.py",
data: {
edit_do_provider: id,
edit_do_provider_name: new_name,
edit_do_provider_token: token,
token: $('#token').val()
},
type: "POST",
success: function( data ) {
data = data.replace(/\s+/g,' ');
if(data == "ok ") {
$("#provider-name-"+id).text(new_name);
$("#provider-"+id).addClass( "update", 1000 );
setTimeout(function() {
$( "#provider-"+id ).removeClass( "update" );
}, 2500 );
$('#provider-edited-date-'+id).text(returnFormatedDate())
} else if (data.indexOf('error:') != '-1') {
toastr.error(data);
}
}
} );
var valid = true;
toastr.clear();
allFields = $( [] ).add( $('#do_edit_provider_name')).add( $('#do_edit_provider_token') );
allFields.removeClass( "ui-state-error" );
valid = valid && checkLength( $('#do_edit_provider_name'), "Provider name", 1 );
valid = valid && checkLength( $('#do_edit_provider_token'), "Token", 1 );
if(valid) {
doEditProvider.dialog( "close" );
id = $('#do_edit_provider_id').val();
token = $('#do_edit_provider_token').val();
new_name = $('#do_edit_provider_name').val();
$.ajax({
url: "options.py",
data: {
edit_do_provider: id,
edit_do_provider_name: new_name,
edit_do_provider_token: token,
token: $('#token').val()
},
type: "POST",
success: function (data) {
data = data.replace(/\s+/g, ' ');
if (data == "ok ") {
$("#provider-name-" + id).text(new_name);
$("#provider-" + id).addClass("update", 1000);
setTimeout(function () {
$("#provider-" + id).removeClass("update");
}, 2500);
$('#provider-edited-date-' + id).text(returnFormatedDate())
} else if (data.indexOf('error:') != '-1') {
toastr.error(data);
}
}
});
}
}
var gcoreEditProvider = $( "#gcore_edit_provider" ).dialog({
autoOpen: false,
width: 574,
modal: true,
title: "Editing G-Core Labs provider",
buttons: {
"Edit": function() {
gcoreEditProviderSave();
},
Cancel: function() {
$( this ).dialog( "close" );
clearTips();
}
}
});
function editGcoreProvider(id) {
$('#gcore_edit_provider_id').val(id);
name = $('#provider-name-'+id).text();
$('#gcore_edit_provider_name').val(name);
gcoreEditProvider.dialog('open');
}
function gcoreEditProviderSave() {
var valid = true;
toastr.clear();
allFields = $( [] ).add( $('#gcore_edit_provider_name')).add( $('#gcore_edit_provider_user') ).add( $('#gcore_edit_provider_password'));
allFields.removeClass( "ui-state-error" );
valid = valid && checkLength( $('#gcore_edit_provider_name'), "User name", 1 );
valid = valid && checkLength( $('#gcore_edit_provider_user'), "Provider name", 1 );
valid = valid && checkLength( $('#gcore_edit_provider_password'), "Password", 1 );
if(valid) {
gcoreEditProvider.dialog('close');
clearTips();
id = $('#gcore_edit_provider_id').val();
username = $('#gcore_edit_provider_user').val();
pass = $('#gcore_edit_provider_password').val();
new_name = $('#gcore_edit_provider_name').val();
$.ajax({
url: "options.py",
data: {
edit_gcore_provider: id,
edit_gcore_provider_name: new_name,
edit_gcore_provider_user: username,
edit_gcore_provider_pass: pass,
token: $('#token').val()
},
type: "POST",
success: function (data) {
data = data.replace(/\s+/g, ' ');
if (data == "ok ") {
$("#provider-name-" + id).text(new_name);
$("#provider-" + id).addClass("update", 1000);
setTimeout(function () {
$("#provider-" + id).removeClass("update");
}, 2500);
$('#provider-edited-date-' + id).text(returnFormatedDate())
} else if (data.indexOf('error:') != '-1') {
toastr.error(data);
}
}
});
}
}
var awsEditProvider = $("#aws_edit_provider").dialog({
autoOpen: false,
@ -963,7 +1286,6 @@ var awsEditProvider = $("#aws_edit_provider").dialog({
buttons: {
"Edit": function () {
awsEditProviderSave($(this));
$( this ).dialog( "close" );
},
Cancel: function () {
$(this).dialog("close");
@ -978,34 +1300,44 @@ function editAwsProvider(id) {
awsEditProvider.dialog('open');
}
function awsEditProviderSave() {
id = $('#aws_edit_provider_id').val();
new_name = $('#aws_edit_provider_name').val();
key = $('#aws_edit_provider_key').val();
secret = $('#aws_edit_provider_secret').val();
$.ajax( {
url: "options.py",
data: {
edit_aws_provider: id,
edit_aws_provider_name: new_name,
edit_aws_provider_key: key,
edit_aws_provider_secret: secret,
token: $('#token').val()
},
type: "POST",
success: function( data ) {
data = data.replace(/\s+/g,' ');
if(data == "ok ") {
$("#provider-name-"+id).text(new_name);
$("#provider-"+id).addClass( "update", 1000 );
$('#provider-edited-date-'+id).text(returnFormatedDate())
setTimeout(function() {
$( "#provider-"+id ).removeClass( "update" );
}, 2500 );
} else if (data.indexOf('error:') != '-1') {
toastr.error(data);
}
}
} );
var valid = true;
toastr.clear();
allFields = $( [] ).add( $('#aws_edit_provider_name')).add( $('#aws_edit_provider_key') ).add($('#aws_edit_provider_secret'));
allFields.removeClass( "ui-state-error" );
valid = valid && checkLength( $('#aws_edit_provider_name'), "Provider name", 1 );
valid = valid && checkLength( $('#aws_edit_provider_key'), "ACCESS_KEY", 1 );
valid = valid && checkLength( $('#aws_edit_provider_secret'), "ACCESS_SECRET", 1 );
if(valid) {
awsEditProvider.dialog("close");
id = $('#aws_edit_provider_id').val();
new_name = $('#aws_edit_provider_name').val();
key = $('#aws_edit_provider_key').val();
secret = $('#aws_edit_provider_secret').val();
$.ajax({
url: "options.py",
data: {
edit_aws_provider: id,
edit_aws_provider_name: new_name,
edit_aws_provider_key: key,
edit_aws_provider_secret: secret,
token: $('#token').val()
},
type: "POST",
success: function (data) {
data = data.replace(/\s+/g, ' ');
if (data == "ok ") {
$("#provider-name-" + id).text(new_name);
$("#provider-" + id).addClass("update", 1000);
$('#provider-edited-date-' + id).text(returnFormatedDate())
setTimeout(function () {
$("#provider-" + id).removeClass("update");
}, 2500);
} else if (data.indexOf('error:') != '-1') {
toastr.error(data);
}
}
});
}
}
function doEditServer(dialog_id, server_id) {
var valid = true;
@ -1339,11 +1671,7 @@ function doWorkspaceServer() {
success: function( data ) {
data = data.replace(/\s+/g, ' ');
if (data.indexOf('error:') != '-1' && data.indexOf('Last error:') == '-1') {
var server_id = $('#ajax-provisioning-body tr td span:regex(id, sever-ip-)').last().attr('id').split('-')[2]
showProvisioningError(data, '#creating-workspace', '#creating-validate', '#wait-mess', '#creating-error', '#creating-progress', 'do');
$('#sever-status-'+server_id).text('Error');
$('#sever-status-'+server_id).attr('title', data);
$('#sever-status-'+server_id).css('color', 'red');
} else {
showProvisioningProccess('#creating-validate', '#creating-workspace', '#creating-server', '80', '#creating-progress');
common_ajax_action_after_success('1', 'newserver', 'ajax-provisioning-body', data);
@ -1382,8 +1710,347 @@ function doProvisiningServer() {
}
} );
}
function gcoreInitServer() {
$('#creating-init').addClass('proccessing');
$.ajax( {
url: "options.py",
data: {
gcoreinitserver: 1,
token: $('#token').val()
},
type: "POST",
success: function( data ) {
data = data.replace(/\s+/g, ' ');
if (data.indexOf('error:') != '-1') {
showProvisioningError(data, '#creating-init', '#creating-init', '#wait-mess', '#creating-error', '#creating-progress', 'gcore');
} else {
showProvisioningProccess('#creating-init', '#creating-init', '#creating-vars', '20', '#creating-progress');
gcoreVarsServer();
}
}
} );
}
function gcoreVarsServer() {
var gcore_create_firewall = 'false';
var gcore_create_delete_on_termination = 'false';
if ($('#gcore_create_firewall').is(':checked')) {
gcore_create_firewall = 'true';
}
if ($('#gcore_create_delete_on_termination').is(':checked')) {
gcore_create_delete_on_termination = 'true';
}
$.ajax( {
url: "options.py",
data: {
gcorevars: $('#gcore_create_server_name').val(),
gcore_create_group: $('#gcore_create_group').val(),
gcore_create_provider: $('#gcore_create_provider').val(),
gcore_create_regions: $('#gcore_create_regions').val(),
gcore_create_project: $('#gcore_create_project_name').val(),
gcore_create_size: $('#gcore_create_size').val(),
gcore_create_oss: $('#gcore_create_oss').val(),
gcore_create_ssh_name: $('#gcore_create_ssh_name').val(),
gcore_create_volume_size: $('#gcore_create_volume_size').val(),
gcore_create_volume_type: $('#gcore_create_volume_type').val(),
gcore_create_delete_on_termination: gcore_create_delete_on_termination,
gcore_create_network_name: $('#gcore_create_network_name').val(),
gcore_create_firewall: gcore_create_firewall,
gcore_create_network_type: $('#gcore_create_network_type').val(),
token: $('#token').val()
},
type: "POST",
success: function( data ) {
data = data.replace(/\s+/g, ' ');
if (data.indexOf('error:') != '-1') {
showProvisioningError(data, '#creating-vars', '#creating-init', '#wait-mess', '#creating-error', '#creating-progress', 'gcore');
} else {
showProvisioningProccess('#creating-init', '#creating-vars', '#creating-validate', '40', '#creating-progress');
gcoreValidateServer();
}
}
} );
}
function gcoreValidateServer() {
$.ajax( {
url: "options.py",
data: {
gcorevalidate: $('#gcore_create_server_name').val(),
gcore_create_group: $('#gcore_create_group').val(),
token: $('#token').val()
},
type: "POST",
success: function( data ) {
data = data.replace(/\s+/g, ' ');
if (data.indexOf('error:') != '-1') {
showProvisioningError(data, '#creating-validate', '#creating-vars', '#wait-mess', '#creating-error', '#creating-progress', 'gcore');
} else {
showProvisioningProccess('#creating-vars', '#creating-validate', '#creating-workspace', '60', '#creating-progress');
gcoreWorkspaceServer();
}
}
} );
}
function gcoreWorkspaceServer() {
var gcore_create_firewall = 'false';
var gcore_create_delete_on_termination = 'false';
if ($('#gcore_create_firewall').is(':checked')) {
gcore_create_firewall = 'true';
}
if ($('#gcore_create_delete_on_termination').is(':checked')) {
gcore_create_delete_on_termination = 'true';
}
$.ajax( {
url: "options.py",
data: {
gcoreworkspace: $('#gcore_create_server_name').val(),
gcore_create_group: $('#gcore_create_group').val(),
gcore_create_provider: $('#gcore_create_provider').val(),
gcore_create_regions: $('#gcore_create_regions').val(),
gcore_create_project: $('#gcore_create_project_name').val(),
gcore_create_size: $('#gcore_create_size').val(),
gcore_create_oss: $('#gcore_create_oss').val(),
gcore_create_ssh_name: $('#gcore_create_ssh_name').val(),
gcore_create_volume_size: $('#gcore_create_volume_size').val(),
gcore_create_volume_type: $('#gcore_create_volume_type').val(),
gcore_create_delete_on_termination: gcore_create_delete_on_termination,
gcore_create_network_name: $('#gcore_create_network_name').val(),
gcore_create_firewall: gcore_create_firewall,
gcore_create_network_type: $('#gcore_create_network_type').val(),
token: $('#token').val()
},
type: "POST",
success: function( data ) {
data = data.replace(/\s+/g, ' ');
if (data.indexOf('error:') != '-1' && data.indexOf('Last error:') == '-1') {
showProvisioningError(data, '#creating-workspace', '#creating-validate', '#wait-mess', '#creating-error', '#creating-progress', 'gcore');
} else {
showProvisioningProccess('#creating-validate', '#creating-workspace', '#creating-server', '80', '#creating-progress');
common_ajax_action_after_success('1', 'newserver', 'ajax-provisioning-body', data);
gcoreProvisiningServer();
}
}
} );
}
function gcoreProvisiningServer() {
var gcoreprovisining = $('#gcore_create_server_name').val()
$.ajax( {
url: "options.py",
data: {
gcoreprovisining: gcoreprovisining,
gcore_create_group: $('#gcore_create_group').val(),
gcore_create_provider: $('#gcore_create_provider').val(),
token: $('#token').val()
},
type: "POST",
success: function( data ) {
data = data.replace(/\s+/g, ' ');
var server_id = $('#ajax-provisioning-body tr td span:regex(id, sever-ip-)').last().attr('id').split('-')[2]
if (data.indexOf('error:') != '-1' && data.indexOf('Last error:') == '-1') {
showProvisioningError(data, '#creating-server', '#creating-workspace', '#wait-mess', '#creating-error', '#creating-progress', 'gcore');
$('#sever-status-'+server_id).text('Error');
$('#sever-status-'+server_id).attr('title', data);
$('#sever-status-'+server_id).css('color', 'red');
} else {
data = data.split(':');
data[1] = data[1].replace(/\s+/g, ' ');
showProvisioningProccess('#creating-workspace', '#creating-server', '', '100', '#creating-progress');
$('#wait-mess').hide();
$('#created-mess').html('Server has been created. Server IPs are:' + data[0]);
$('#created-mess').show();
$('#sever-status-'+server_id).text('Created');
$('#sever-status-'+server_id).css('color', 'var(--green-color)');
$('#sever-ip-'+server_id).text(data[0]);
$('#server-name-'+server_id).text(gcoreprovisining+'('+data[1]+')');
add_gcore_button_after_server_created();
}
}
} );
}
function gcoreEditServer(dialog_id, server_id) {
var valid = true;
toastr.clear();
allFields = $( [] ).add( $('#gcore_edit_size')).add( $('#gcore_edit_ssh_name')).add( $('#gcore_edit_volume_size'));
allFields.removeClass( "ui-state-error" );
valid = valid && checkLength( $('#gcore_edit_size'), "Instance type", 1 );
valid = valid && checkLength( $('#gcore_edit_ssh_name'), "SSH key pair name", 1 );
valid = valid && checkLength( $('#gcore_edit_volume_size'), "Volume size", 1 );
if(valid) {
clearTips();
dialog_id.dialog('destroy');
startEditingServer('gcore', server_id);
$('#editing-wait-mess').show();
}
}
function gcoreEditInitServer(server_id) {
$('#editing-init').addClass('proccessing');
$('#server-'+server_id).css('background-color', '#fff3cd');
$.ajax( {
url: "options.py",
data: {
gcoreinitserver: 1,
token: $('#token').val()
},
type: "POST",
success: function( data ) {
data = data.replace(/\s+/g, ' ');
if (data.indexOf('error:') != '-1') {
showProvisioningError(data, '#editing-init', '#editing-init', '#editing-wait-mess', '#editing-error', '#editing-progress', 'gcore');
$('#server-'+server_id).css('background-color', '#fff');
add_gcore_button_after_server_edited(server_id)
} else {
showProvisioningProccess('#editing-init', '#editing-init', '#editing-vars', '20', '#editing-progress');
gcoreEditingVarsServer(server_id);
}
}
} );
}
function gcoreEditingVarsServer(server_id, dialog_id) {
var gcore_edit_firewall = 'false';
var gcore_edit_delete_on_termination = 'false';
if ($('#gcore_edit_firewall').is(':checked')) {
gcore_edit_firewall = 'true';
}
if ($('#gcore_edit_delete_on_termination').is(':checked')) {
gcore_edit_delete_on_termination = 'true';
}
$.ajax( {
url: "options.py",
data: {
gcoreeditvars: $('#gcore_edit_server_name').text(),
gcore_edit_group: $('#gcore_edit_group').val(),
gcore_edit_provider: $('#gcore_edit_id_provider').val(),
gcore_edit_regions: $('#gcore_edit_region').text(),
gcore_edit_project: $('#gcore_edit_project_name').text(),
gcore_edit_size: $('#gcore_edit_size').val(),
gcore_edit_oss: $('#gcore_edit_oss').val(),
gcore_edit_ssh_name: $('#gcore_edit_ssh_name').val(),
gcore_edit_volume_size: $('#gcore_edit_volume_size').val(),
gcore_edit_volume_type: $('#gcore_edit_volume_type').val(),
gcore_edit_delete_on_termination: gcore_edit_delete_on_termination,
gcore_edit_network_name: $('#gcore_edit_network_name').val(),
gcore_edit_firewall: gcore_edit_firewall,
gcore_edit_network_type: $('#gcore_edit_network_type').val(),
token: $('#token').val()
},
type: "POST",
success: function( data ) {
data = data.replace(/\s+/g, ' ');
if (data.indexOf('error:') != '-1') {
showProvisioningError(data, '#editing-vars', '#editing-init', '#editing-wait-mess', '#editing-error', '#editing-progress', 'gcore');
$('#server-'+server_id).css('background-color', '#fff');
add_gcore_button_after_server_edited(server_id);
} else {
showProvisioningProccess('#editing-init', '#editing-vars', '#editing-validate', '40', '#editing-progress');
gcoreEditValidateServer(server_id);
}
}
} );
}
function gcoreEditValidateServer(server_id) {
$.ajax( {
url: "options.py",
data: {
gcoreeditvalidate: $('#gcore_edit_server_name').text(),
gcore_edit_group: $('#gcore_edit_group').val(),
token: $('#token').val()
},
type: "POST",
success: function( data ) {
data = data.replace(/\s+/g, ' ');
if (data.indexOf('error:') != '-1') {
showProvisioningError(data, '#editing-validate', '#editing-vars', '#editing-wait-mess', '#editing-error', '#editing-progress', 'gcore');
$('#server-'+server_id).css('background-color', '#fff');
add_gcore_button_after_server_edited(server_id);
} else {
showProvisioningProccess('#editing-vars', '#editing-validate', '#editing-workspace', '60', '#editing-progress');
gcoreEditWorkspaceServer(server_id);
}
}
} );
}
function gcoreEditWorkspaceServer(server_id) {
var gcore_edit_firewall = 'false';
var gcore_edit_delete_on_termination = 'false';
if ($('#gcore_edit_firewall').is(':checked')) {
gcore_edit_firewall = 'true';
}
if ($('#gcore_edit_delete_on_termination').is(':checked')) {
gcore_edit_delete_on_termination = 'true';
}
$.ajax( {
url: "options.py",
data: {
gcoreeditworkspace: $('#gcore_edit_server_name').text(),
gcore_edit_group: $('#gcore_edit_group').val(),
gcore_edit_provider: $('#gcore_edit_id_provider').val(),
gcore_edit_regions: $('#gcore_edit_region').text(),
gcore_edit_project: $('#gcore_edit_project_name').text(),
gcore_edit_size: $('#gcore_edit_size').val(),
gcore_edit_oss: $('#gcore_edit_oss').val(),
gcore_edit_ssh_name: $('#gcore_edit_ssh_name').val(),
gcore_edit_volume_size: $('#gcore_edit_volume_size').val(),
gcore_edit_volume_type: $('#gcore_edit_volume_type').val(),
gcore_edit_delete_on_termination: gcore_edit_delete_on_termination,
gcore_edit_network_name: $('#gcore_edit_network_name').val(),
gcore_edit_firewall: gcore_edit_firewall,
gcore_edit_network_type: $('#gcore_edit_network_type').val(),
server_id: server_id,
token: $('#token').val()
},
type: "POST",
success: function( data ) {
data = data.replace(/\s+/g, ' ');
if (data.indexOf('error:') != '-1' && data.indexOf('Last error:') == '-1') {
showProvisioningError(data, '#editing-workspace', '#editing-validate', '#editing-wait-mess', '#editing-error', '#editing-progress', 'gcore');
showEditProvisioningError(data, server_id);
add_gcore_button_after_server_edited(server_id);
} else {
showProvisioningProccess('#editing-validate', '#editing-workspace', '#editing-server', '80', '#editing-progress');
$('#sever-status-'+server_id).text('Editing');
$('#sever-status-'+server_id).css('color', '#000');
gcoreEditProvisiningServer(server_id);
}
}
} );
}
function gcoreEditProvisiningServer(server_id, dialog_id) {
var gcoreeditgprovisining = $('#gcore_edit_server_name').text();
$.ajax( {
url: "options.py",
data: {
gcoreeditgprovisining: gcoreeditgprovisining,
gcore_edit_group: $('#gcore_edit_group').val(),
gcore_edit_provider: $('#gcore_edit_id_provider option:selected').val(),
token: $('#token').val()
},
type: "POST",
success: function( data ) {
data = data.replace(/\s+/g, ' ');
if (data.indexOf('error:') != '-1' && data.indexOf('Last error:') == '-1') {
showProvisioningError(data, '#editing-server', '#editing-workspace', '#editing-wait-mess', '#editing-error', '#editing-progress', 'gcore');
showEditProvisioningError(data, server_id);
add_gcore_button_after_server_edited(server_id);
} else {
showProvisioningProccess('#editing-workspace', '#editing-server', '', '100', '#editing-progress');
data = data.split(':');
data[1] = data[1].replace(/\s+/g, ' ');
$('#editing-wait-mess').hide();
$('#edited-mess').html('Server has been changed. IPs are: ' + data[0]);
$('#edited-mess').show();
$('#sever-status-'+server_id).text('Created');
$('#sever-size-'+server_id).text($('#gcore_edit_size').val());
$('#sever-os-'+server_id).text($('#gcore_edit_oss').val());
$('#server-'+server_id).css('background-color', '#fff');
$('#sever-status-'+server_id).css('color', 'var(--green-color)');
$('#sever-ip-'+server_id).text(data[0]);
$('#server-name-'+server_id).text(gcoreeditgprovisining+'('+data[1]+')');
}
}
} );
}
function returnFormatedDate() {
let date = new Date();
current_date = date.toISOString().slice(0,10)+' '+date.toTimeString().split(' ')[0]
return current_date
}
}

View File

@ -1,3 +1,6 @@
:root {
--green-color: #5ad05a;
}
html {
font-size: 10px;
}
@ -389,7 +392,7 @@ pre {
font-weight: bold;
}
.serverUp {
background-color: #5ad05a;
background-color: var(--green-color);
}
.serverNone {
background-color: #ddd;
@ -753,7 +756,7 @@ label {
height: 95px;
}
.div-server-head-up {
border-top: 3px solid #5ad05a !important;
border-top: 3px solid var(--green-color) !important;
}
.div-server-head-down {
border-top: 3px solid #be2424 !important;