diff --git a/app/create_db.py b/app/create_db.py index d18da350..d02efce8 100644 --- a/app/create_db.py +++ b/app/create_db.py @@ -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() diff --git a/app/options.py b/app/options.py index 0a854422..050a4808 100644 --- a/app/options.py +++ b/app/options.py @@ -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') diff --git a/app/sql.py b/app/sql.py index 4e7d085f..e67f9acb 100644 --- a/app/sql.py +++ b/app/sql.py @@ -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() diff --git a/app/templates/ajax/provisioning/aws_edit_dialog.html b/app/templates/ajax/provisioning/aws_edit_dialog.html index 5923b0f4..6c04c0c1 100644 --- a/app/templates/ajax/provisioning/aws_edit_dialog.html +++ b/app/templates/ajax/provisioning/aws_edit_dialog.html @@ -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 = [] %} + +{% endfor %} \ No newline at end of file diff --git a/app/templates/ajax/provisioning/providers.html b/app/templates/ajax/provisioning/providers.html index be96723a..a417b48e 100644 --- a/app/templates/ajax/provisioning/providers.html +++ b/app/templates/ajax/provisioning/providers.html @@ -9,6 +9,9 @@ {% elif p.2 == 'aws' %} AWS {% set onclickEditAction = 'editAwsProvider' %} + {% elif p.2 == 'gcore' %} + G-Core Labs + {% set onclickEditAction = 'editGcoreProvider' %} {% endif %} diff --git a/app/templates/ajax/provisioning/provisioned_servers.html b/app/templates/ajax/provisioning/provisioned_servers.html index 304ff613..264f3aae 100644 --- a/app/templates/ajax/provisioning/provisioned_servers.html +++ b/app/templates/ajax/provisioning/provisioned_servers.html @@ -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 %} - {{s.1}} + + {{s.1}} + {% if s.3 == 'gcore' %} + ({{s.12}}) + {% endif %} + {% for p in providers %} {% if p.0|int() == s.2|int() %} @@ -29,17 +61,11 @@ {% endif %} - {% if s.3 == 'do' %} - DigitalOcean - {% set onclickEditAction = 'editDoServer' %} - {% elif s.3 == 'aws' %} - AWS - {% set onclickEditAction = 'editAwsServer' %} - {% endif %} + {{provider_full_name}} - - {{s.8}} + + {{region_name.0}} {{s.9}} @@ -51,8 +77,8 @@ {{s.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 %} diff --git a/app/templates/include/provisioning/creating_dialogs.html b/app/templates/include/provisioning/creating_dialogs.html index 46003029..33eccd93 100644 --- a/app/templates/include/provisioning/creating_dialogs.html +++ b/app/templates/include/provisioning/creating_dialogs.html @@ -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 %} + + + \ No newline at end of file diff --git a/app/templates/include/provisioning/variables.html b/app/templates/include/provisioning/variables.html new file mode 100644 index 00000000..92b1fc04 --- /dev/null +++ b/app/templates/include/provisioning/variables.html @@ -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'} %} \ No newline at end of file diff --git a/inc/provisioning.css b/inc/provisioning.css index f7505562..bb7b87c0 100644 --- a/inc/provisioning.css +++ b/inc/provisioning.css @@ -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"; diff --git a/inc/provisioning.js b/inc/provisioning.js index 210314b5..a0da9608 100644 --- a/inc/provisioning.js +++ b/inc/provisioning.js @@ -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($("") + .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('').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 -} \ No newline at end of file +} diff --git a/inc/style.css b/inc/style.css index 228108ef..83bd03d6 100644 --- a/inc/style.css +++ b/inc/style.css @@ -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;