diff --git a/app/options.py b/app/options.py index bea22022..e2fe511f 100644 --- a/app/options.py +++ b/app/options.py @@ -1032,11 +1032,26 @@ if form.getvalue('masteradd'): funct.show_installation_output(error, output, 'master VRRP address') +if form.getvalue('masteradd_slave'): + master = form.getvalue('masteradd_slave') + slave = form.getvalue('slaveadd') + ETH = form.getvalue('interfaceadd') + IP = form.getvalue('vrrpipadd') + kp = form.getvalue('kp') + script = "install_keepalived.sh" + proxy = sql.get_setting('proxy') ssh_enable, ssh_user_name, ssh_user_password, ssh_key_name = funct.return_ssh_keys_path(slave) if ssh_enable == 0: ssh_key_name = '' + if proxy is not None and proxy != '' and proxy != 'None': + proxy_serv = proxy + else: + proxy_serv = '' + + os.system("cp scripts/%s ." % script) + servers = sql.select_servers(server=slave) for server in servers: ssh_port = str(server[10]) diff --git a/app/scripts/ansible/roles/keepalived/templates/add_vrrp.conf.j2 b/app/scripts/ansible/roles/keepalived/templates/add_vrrp.conf.j2 index aad660ca..50c16ae0 100644 --- a/app/scripts/ansible/roles/keepalived/templates/add_vrrp.conf.j2 +++ b/app/scripts/ansible/roles/keepalived/templates/add_vrrp.conf.j2 @@ -1,7 +1,7 @@ vrrp_instance VI_{{IP}} { state {{MASTER}} interface {{ETH}} - virtual_router_id 101 + virtual_router_id {{ range(101, 1000) | random }} priority 103 track_script { @@ -16,4 +16,4 @@ vrrp_instance VI_{{IP}} { virtual_ipaddress { {{IP}} } -} \ No newline at end of file +} diff --git a/app/templates/ha.html b/app/templates/ha.html index 71c93c12..86b6b583 100644 --- a/app/templates/ha.html +++ b/app/templates/ha.html @@ -111,4 +111,17 @@
+ {% endblock %} \ No newline at end of file diff --git a/inc/ha.js b/inc/ha.js index 5d91797e..6c9c8482 100644 --- a/inc/ha.js +++ b/inc/ha.js @@ -3,6 +3,33 @@ $( function() { width: 180 }); var ipformat = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/; + + var server_creating = $( "#server_creating" ).dialog({ + autoOpen: false, + width: 574, + modal: true, + title: "Creating a new HA cluster", + buttons: { + Close: function() { + $( this ).dialog( "close" ); + cleanProvisioningProccess('#server_creating ul li', '#created-mess', '#creating-error', '#creating-warning', '#creating-progress', '#creating-master', '#creating-slave', '#haproxy_installing_div', '#nginx_installing_div'); + $('#wait_mess').show(); + } + } + }); + var address_add = $( "#address_creating" ).dialog({ + autoOpen: false, + width: 574, + modal: true, + title: "Adding a new VRRP address", + buttons: { + Close: function() { + $( this ).dialog( "close" ); + cleanProvisioningProccess('#address_creating ul li', '#created-mess-add', '#creating-error', '#creating-warning-add', '#creating-progress-add', '#creating-master-add', '#creating-slave-add', '', ''); + $('#wait_mess-add').show(); + } + } + }); $('#add-vrrp').click(function() { var kp = 0; if ($('#kp').is(':checked')) { @@ -17,47 +44,14 @@ $( function() { } else if(! $("#vrrp-ip-add").val().match(ipformat)) { toastr.warning('Please enter IP in "VRRP IP" field') } else { - $("#ajax").html(wait_mess); - $.ajax( { - url: "options.py", - data: { - masteradd: $('#master-add').val(), - slaveadd: $('#slave-add').val(), - interfaceadd: $("#interface-add").val(), - vrrpipadd: $('#vrrp-ip-add').val(), - kp: kp, - token: $('#token').val() - }, - type: "POST", - success: function( data ) { - data = data.replace(/\s+/g,' '); - if (data.indexOf('error:') != '-1') { - toastr.clear(); - toastr.error(data); - } else if (data.indexOf('success') != '-1'){ - toastr.clear(); - toastr.success(data); - } else { - toastr.clear(); - toastr.info(data); - } - } - } ); + $("#wait-mess-add").html(wait_mess); + address_add.dialog('open'); + add_master_addr(kp); + $.getScript("/inc/fontawesome.min.js"); + add_slave_addr(kp); + } }); - var server_creating = $( "#server_creating" ).dialog({ - autoOpen: false, - width: 574, - modal: true, - title: "Creating a new HA cluster", - buttons: { - Close: function() { - $( this ).dialog( "close" ); - cleanProvisioningProccess('#server_creating ul li', '#created-mess'); - $('#wait_mess').show(); - } - } - }); $('#create').click(function() { var hap = 0; var nginx = 0; @@ -83,6 +77,7 @@ $( function() { $("#wait-mess").html(wait_mess); server_creating.dialog('open'); create_master_keepalived(hap, nginx, syn_flood); + $.getScript("/inc/fontawesome.min.js"); create_slave_keepalived(hap, nginx, syn_flood); if (hap == '1') { $('#haproxy_installing_div').show(); @@ -93,6 +88,54 @@ $( function() { } }); }); +function add_master_addr(kp) { + $.ajax( { + url: "options.py", + data: { + masteradd: $('#master-add').val(), + slaveadd: $('#slave-add').val(), + interfaceadd: $("#interface-add").val(), + vrrpipadd: $('#vrrp-ip-add').val(), + kp: kp, + token: $('#token').val() + }, + type: "POST", + success: function( data ) { + data = data.replace(/\s+/g,' '); + if (data.indexOf('error:') != '-1') { + showProvisioningError(data, '#creating-master-add', '#wait-mess-add', '#creating-error-add'); + } else if (data == '' ){ + showProvisioningWarning('#creating-master-add', 'master Keepalived', '#creating-warning-add', '#wait_mess-add'); + } else if (data.indexOf('success') != '-1' ){ + showProvisioningProccess(''+data+'
', '#creating-master-add', '50', '#creating-progress-add', '#created-mess-add', '#wait-mess-add'); + } + } + } ); +} +function add_slave_addr(kp) { + $.ajax( { + url: "options.py", + data: { + masteradd_slave: $('#master-add').val(), + slaveadd: $('#slave-add').val(), + interfaceadd: $("#interface-add").val(), + vrrpipadd: $('#vrrp-ip-add').val(), + kp: kp, + token: $('#token').val() + }, + type: "POST", + success: function( data ) { + data = data.replace(/\s+/g,' '); + if (data.indexOf('error:') != '-1') { + showProvisioningError(data, '#creating-slave-add', '#wait-mess-add', '#creating-error-add'); + } else if (data == '' ){ + showProvisioningWarning('#creating-slave-add', 'master Keepalived', '#creating-warning-add', '#wait_mess-add'); + } else if (data.indexOf('success') != '-1' ){ + showProvisioningProccess(''+data+'
', '#creating-slave-add', '100', '#creating-progress-add', '#created-mess-add', '#wait-mess-add'); + } + } + } ); +} function create_master_keepalived(hap, nginx, syn_flood) { if (hap == '0' && nginx == '0') { var progress_value = '50'; @@ -119,9 +162,9 @@ function create_master_keepalived(hap, nginx, syn_flood) { if (data.indexOf('error:') != '-1' || data.indexOf('FAILED') != '-1') { showProvisioningError(data, '#creating-master', '#wait-mess', '#creating-error'); } else if (data == '' ){ - showProvisioningWarning(step_id, 'master Keepalived'); + showProvisioningWarning(step_id, 'master Keepalived', '#creating-warning', '#wait_mess'); } else if (data.indexOf('success') != '-1' ){ - showProvisioningProccess(''+data+'
', '#creating-master', progress_value, '#creating-progress'); + showProvisioningProccess(''+data+'
', '#creating-master', progress_value, '#creating-progress', '#created-mess', '#wait-mess'); if (hap === '1') { create_keep_alived_hap(nginx, 'master'); } @@ -161,9 +204,9 @@ function create_slave_keepalived(hap, nginx, syn_flood) { if (data.indexOf('error:') != '-1' || data.indexOf('FAILED') != '-1') { showProvisioningError(data, '#creating-slave', '#wait-mess', '#creating-error'); } else if (data == '' ){ - showProvisioningWarning(step_id, 'slave Keepalived'); + showProvisioningWarning(step_id, 'slave Keepalived', '#creating-warning', '#wait_mess'); } else if (data.indexOf('success') != '-1' ){ - showProvisioningProccess(''+data+'
', '#creating-slave', progress_value, '#creating-progress'); + showProvisioningProccess(''+data+'
', '#creating-slave', progress_value, '#creating-progress', '#created-mess', '#wait-mess'); } else { toastr.clear(); toastr.info(data); @@ -205,9 +248,9 @@ function create_keep_alived_hap(nginx, server) { if (data.indexOf('error:') != '-1' || data.indexOf('FAILED') != '-1') { showProvisioningError(data, step_id, '#wait-mess', '#creating-error'); } else if (data == '' ){ - showProvisioningWarning(step_id, install_step); + showProvisioningWarning(step_id, install_step, '#creating-warning', '#wait_mess'); } else if (data.indexOf('success') != '-1' ){ - showProvisioningProccess('Something went wrong with installation on ' + install_step + ', check logs
'); - $('#creating-warning').show(); +function showProvisioningWarning(step_id, install_step, warning_id, wait_id) { + $(warning_id).append('Something went wrong with installation on ' + install_step + ', check logs
'); + $(warning_id).show(); $(step_id).removeClass('proccessing'); $(step_id).addClass('processing_warning'); - $('#wait_mess').hide(); + $(wait_id).hide(); $.getScript("/inc/fontawesome.min.js"); } -function cleanProvisioningProccess(div_id, success_div) { +function cleanProvisioningProccess(div_id, success_div, error_id, warning_id, progres_id, keepalived_m_div, keepalived_s_div, haproxy_div, nginx_div) { $(success_div).empty(); $(success_div).hide(); - $('#creating-error').empty(); - $('#creating-error').hide(); - $('#creating-warning').empty(); - $('#creating-warning').hide(); - $('#creating-progress').css('width', '0%'); - $('#haproxy_installing_div').hide(); - $('#nginx_installing_div').hide(); + $(error_id).empty(); + $(error_id).hide(); + $(warning_id).empty(); + $(warning_id).hide(); + $(progres_id).css('width', '0%'); + $(haproxy_div).hide(); + $(nginx_div).hide(); $(div_id).each(function () { $(this).removeClass('proccessing_done'); $(this).removeClass('processing_error'); $(this).removeClass('processing_warning'); $(this).removeClass('proccessing'); }); - $('#creating-master').addClass('proccessing'); - $('#creating-slave').addClass('proccessing'); + $(keepalived_m_div).addClass('proccessing'); + $(keepalived_s_div).addClass('proccessing'); $.getScript("/inc/fontawesome.min.js"); } -function showProvisioningProccess(data, step_id, progress_value, progress_id) { +function showProvisioningProccess(data, step_id, progress_value, progress_id, created_id, waid_id) { $(step_id).addClass('proccessing_done'); $(step_id).removeClass('proccessing'); - $('#created-mess').show(); - $('#created-mess').append(data); + $(created_id).show(); + $(created_id).append(data); $(progress_id).css('width', progress_value+'%'); if (progress_value === '100') - $("#wait-mess").hide(); + $(waid_id).hide(); $.getScript("/inc/fontawesome.min.js"); }