Pavel Loginov 2021-03-05 11:02:52 +06:00
parent 79f0a0a8bc
commit 45e9510e02
4 changed files with 138 additions and 67 deletions

View File

@ -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])

View File

@ -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}}
}
}
}

View File

@ -111,4 +111,17 @@
<div id="creating-progress" style="width: 0%;"></div>
</div>
</div>
<div id="address_creating" style="display: none;">
<ul style="padding: 20px 20px 0px 20px;font-size: 15px;">
<li id="creating-master-add" class="server-creating proccessing">Creating a new address on Master Keepalived...</li>
<li id="creating-slave-add" class="server-creating proccessing">Creating a new address on Slave Keepalived...</li>
</ul>
<div id="wait-mess-add"></div>
<div id="created-mess-add" class="alert alert-success" style="display:none;"></div>
<div id="creating-error-add" class="alert alert-danger" style="display:none;"></div>
<div id="creating-warning-add" class="alert alert-warning" style="display:none;"></div>
<div class="progress-bar-striped">
<div id="creating-progress-add" style="width: 0%;"></div>
</div>
</div>
{% endblock %}

173
inc/ha.js
View File

@ -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('<p>'+data+'</p>', '#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('<p>'+data+'</p>', '#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('<p>'+data+'</p>', '#creating-master', progress_value, '#creating-progress');
showProvisioningProccess('<p>'+data+'</p>', '#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('<p>'+data+'</p>', '#creating-slave', progress_value, '#creating-progress');
showProvisioningProccess('<p>'+data+'</p>', '#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('<br>'+data, step_id, progress_value, '#creating-progress');
showProvisioningProccess('<br>'+data, step_id, progress_value, '#creating-progress', '#created-mess', '#wait-mess');
} else {
toastr.clear();
toastr.info(data);
@ -241,9 +284,9 @@ function create_keep_alived_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('<br>'+data, step_id, '100', '#creating-progress');
showProvisioningProccess('<br>'+data, step_id, '100', '#creating-progress', '#created-mess', '#wait-mess');
} else {
toastr.clear();
toastr.info(data);
@ -259,41 +302,41 @@ function showProvisioningError(data, step_id, wait_mess, error_id) {
$(step_id).addClass('processing_error');
$.getScript("/inc/fontawesome.min.js");
}
function showProvisioningWarning(step_id, install_step) {
$('#creating-warning').append('<p>Something went wrong with installation on ' + install_step + ', check logs</p>');
$('#creating-warning').show();
function showProvisioningWarning(step_id, install_step, warning_id, wait_id) {
$(warning_id).append('<p>Something went wrong with installation on ' + install_step + ', check logs</p>');
$(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");
}