luci/applications/luci-app-keepalived/htdocs/luci-static/resources/view/keepalived/servers.js
Jaymin Patel d1a82d2886 luci-app-keepalived: Add LuCI for keepalived
LuCI Support for Keepalived

Signed-off-by: Jaymin Patel <jem.patel@gmail.com>
2022-10-23 16:19:33 +05:30

204 lines
5.6 KiB
JavaScript

'use strict';
'require view';
'require form';
'require uci';
return view.extend({
load: function() {
return Promise.all([
uci.load('keepalived'),
]);
},
renderVirtualServer: function(m) {
var s, o;
var real_servers;
s = m.section(form.GridSection, 'virtual_server', _('Virtual Server'),
_('A virtual server is a service configured to listen on a specific virtual IP.') + '<br/>' +
_('A VIP address migrates from one LVS router to the other during a failover,') +
_('thus maintaining a presence at that IP address'));
s.anonymous = true;
s.addremove = true;
s.nodescriptions = true;
s.tab('general', _('General'));
s.tab('advanced', _('Advanced'));
o = s.taboption('general', form.Flag, 'enabled', _('Enable'));
o.optional = true;
o.placeholder = 'name';
o = s.taboption('general', form.Value, 'ipaddr', _('Address'),
_('Address of the Server'));
o.datatype = 'ipaddr';
o = s.taboption('general', form.ListValue, 'protocol', _('Protocol'));
o.value('TCP');
o.value('UDP');
o.default = 'TCP';
o.modalonly = true;
o = s.taboption('general', form.Value, 'port', _('Port'),
_('Server Port'));
o.rmempty = false;
o.optional = false;
o.datatype = 'port';
o = s.taboption('general', form.Value, 'fwmark', _('Mark'),
_('Firewall fwmark. Use Virtual server from FWMARK'));
o.datatype = 'hexstring';
real_servers = uci.sections('keepalived', 'real_server');
o = s.taboption('general', form.DynamicList, 'real_server', _('Real Server'));
if (real_servers != '') {
for (i = 0; i < real_servers.length; i++) {
o.value(real_servers[i]['name']);
}
}
o.optional = false;
o = s.taboption('general', form.Value, 'virtualhost', _('Virtual Host'),
_('HTTP virtualhost to use for HTTP_GET | SSL_GET'));
o.datatype = 'hostname';
o.modalonly = true;
o = s.taboption('general', form.ListValue, 'lb_kind', _('Forwarding Method'));
o.value('NAT');
o.value('DR');
o.value('TUN');
o.default = 'NAT';
o = s.taboption('advanced', form.Value, 'delay_loop', _('Delay Loop'),
_('Interval between checks in seconds'));
o.optional = false;
o.datatype = 'uinteger';
o.modalonly = true;
o = s.taboption('advanced', form.ListValue, 'lb_algo', _('Scheduler Algorigthm'));
o.value('rr', _('Round-Robin'));
o.value('wrr', _('Weighted Round-Robin'));
o.value('lc', _('Least-Connection'));
o.value('wlc', _('Weighted Least-Connection'));
o.default = 'rr';
o = s.taboption('advanced', form.Value, 'persistence_timeout', _('Persist Timeout'),
_('Timeout value for persistent connections'));
o.datatype = 'uinteger';
o.default = 50;
o.modalonly = true;
o = s.taboption('advanced', form.Value, 'persistence_granularity', _('Persist Granularity'),
_('Granularity mask for persistent connections'));
o.datatype = 'ipaddr';
o.modalonly = true;
o = s.taboption('advanced', form.Value, 'sorry_server_ip', _('Sorry Server Address'),
_('Server to be added to the pool if all real servers are down'));
o.optional = false;
o.datatype = 'ipaddr';
o.modalonly = true;
o = s.taboption('advanced', form.Value, 'sorry_server_port', _('Sorry Server Port'));
o.optional = false;
o.datatype = 'port';
o.modalonly = true;
o = s.taboption('advanced', form.Value, 'rise', _('Rise'),
_('Required number of successes for OK transition'));
o.optional = true;
o.datatype = 'uinteger';
o.modalonly = true;
o = s.taboption('advanced', form.Value, 'fail', _('Fail'),
_('Required number of successes for KO transition'));
o.optional = true;
o.datatype = 'uinteger';
o.modalonly = true;
},
renderRealServer: function(m) {
var s, o;
var urls;
s = m.section(form.GridSection, 'real_server', _('Real Servers'),
_('Real Server to redirect all request'));
s.anonymous = true;
s.addremove = true;
s.nodescriptions = true;
o = s.option(form.Value, 'name', _('Name'));
o.rmempty = false;
o.optional = false;
o.placeholder = 'name';
o = s.option(form.Flag, 'enabled', _('Enabled'));
o.default = true;
o = s.option(form.Value, 'ipaddr', _('Address'),
_('Address of the Server'));
o.rmempty = false;
o.optional = false;
o.datatype = 'ipaddr';
o = s.option(form.Value, 'port', _('Port'),
_('Server Port'));
o.rmempty = false;
o.optional = false;
o.datatype = 'port';
o = s.option(form.Value, 'weight', _('Weight'),
_('Relative weight to use'));
o.rmempty = false;
o.optional = false;
o.placeholder = 1;
o.datatype = 'uinteger';
o = s.option(form.ListValue, 'check', _('Check'),
_('Healthcheckers. Can be multiple of each type'));
o.value('HTTP_GET');
o.value('SSL_GET');
o.value('TCP_CHECK');
o.value('MISC_CHECK');
o = s.option(form.Value, 'connect_timeout', _('Connect Timeout'));
o.datatype = 'uinteger';
o.depends('check', 'TCP_CHECK');
o = s.option(form.Value, 'connect_port', _('Port'),
_('Port to connect to'));
o.datatype = 'port';
o.depends('check', 'TCP_CHECK');
o = s.option(form.Value, 'misc_path', _('User Check Script'));
o.datatype = 'file';
o.depends('check', 'MISC_CHECK');
urls = uci.sections('keepalived', 'url');
o = s.option(form.DynamicList, 'url', _('URLs'));
if (urls != '') {
for (var i = 0; i < urls.length; i++) {
o.value(urls[i].name);
}
}
o.depends('check', 'HTTP_GET');
o.depends('check', 'SSL_GET');
o = s.option(form.Value, 'retry', _('Retry'));
o.datatype = 'uinteger';
o = s.option(form.Value, 'delay_before_retry', _('Delay Before Retry'));
o.datatype = 'uinteger';
},
render: function() {
var m;
m = new form.Map('keepalived');
this.renderVirtualServer(m);
this.renderRealServer(m);
return m.render();
}
});