mirror of
https://git.proxmox.com/git/pve-manager
synced 2025-08-13 17:45:15 +00:00
ui: eslint: fix trailing comma and comma related whitespaces errors
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
This commit is contained in:
parent
2a4971d8c9
commit
f6710aac38
@ -366,7 +366,7 @@ Ext.define('PVE.Parser', { statics: {
|
||||
|
||||
Ext.Object.each(netif, function(iface, data) {
|
||||
var tmparray = [];
|
||||
Ext.Array.each(['ifname', 'mac', 'bridge', 'host_ifname' , 'host_mac', 'mac_filter', 'tag', 'firewall'], function(key) {
|
||||
Ext.Array.each(['ifname', 'mac', 'bridge', 'host_ifname', 'host_mac', 'mac_filter', 'tag', 'firewall'], function(key) {
|
||||
var value = data[key];
|
||||
if (key === 'bridge'){
|
||||
if(data.tag){
|
||||
@ -686,7 +686,7 @@ Ext.define('PVE.Parser', { statics: {
|
||||
return {
|
||||
type: m[1],
|
||||
key: m[2],
|
||||
comment: m[3]
|
||||
comment: m[3],
|
||||
};
|
||||
}
|
||||
if (m[2].match(typere)) {
|
||||
@ -694,7 +694,7 @@ Ext.define('PVE.Parser', { statics: {
|
||||
options: m[1],
|
||||
type: m[2],
|
||||
key: m[3],
|
||||
comment: m[4]
|
||||
comment: m[4],
|
||||
};
|
||||
}
|
||||
return null;
|
||||
|
@ -44,7 +44,7 @@ Ext.define('PVE.StateProvider', {
|
||||
['pooltab', ''],
|
||||
['kvmtab', ''],
|
||||
['lxctab', ''],
|
||||
['dctab', '']
|
||||
['dctab', ''],
|
||||
],
|
||||
|
||||
hprefix: 'v1',
|
||||
@ -103,7 +103,7 @@ Ext.define('PVE.StateProvider', {
|
||||
clog: 3,
|
||||
storage: 2,
|
||||
folder: 1,
|
||||
server: 0
|
||||
server: 0,
|
||||
},
|
||||
|
||||
decodeHToken: function(token) {
|
||||
@ -253,5 +253,5 @@ Ext.define('PVE.StateProvider', {
|
||||
} else {
|
||||
me.callParent(arguments);
|
||||
}
|
||||
}
|
||||
},
|
||||
});
|
||||
|
@ -12,7 +12,7 @@ Ext.apply(Ext.form.field.VTypes, {
|
||||
IP64AddressList: v => PVE.Utils.verify_ip64_address_list(v, false),
|
||||
IP64AddressWithSuffixList: v => PVE.Utils.verify_ip64_address_list(v, true),
|
||||
IP64AddressListText: gettext('Example') + ': 192.168.1.1,192.168.1.2',
|
||||
IP64AddressListMask: /[A-Fa-f0-9\,\:\.\;\ ]/
|
||||
IP64AddressListMask: /[A-Fa-f0-9\,\:\.\;\ ]/,
|
||||
});
|
||||
|
||||
Ext.define('PVE.form.field.Display', {
|
||||
@ -21,5 +21,5 @@ Ext.define('PVE.form.field.Display', {
|
||||
setSubmitValue: function(value) {
|
||||
// do nothing, this is only to allow generalized bindings for the:
|
||||
// `me.isCreate ? 'textfield' : 'displayfield'` cases we have.
|
||||
}
|
||||
},
|
||||
});
|
||||
|
@ -10,13 +10,13 @@ Ext.enableAriaPanels = false;
|
||||
// avoid errors when running without development tools
|
||||
if (!Ext.isDefined(Ext.global.console)) {
|
||||
var console = {
|
||||
log: function() {}
|
||||
log: function() {},
|
||||
};
|
||||
}
|
||||
console.log("Starting PVE Manager");
|
||||
|
||||
Ext.Ajax.defaultHeaders = {
|
||||
'Accept': 'application/json'
|
||||
'Accept': 'application/json',
|
||||
};
|
||||
|
||||
Ext.define('PVE.Utils', { utilities: {
|
||||
@ -35,14 +35,14 @@ Ext.define('PVE.Utils', { utilities: {
|
||||
4: "warning",
|
||||
5: "notice",
|
||||
6: "info",
|
||||
7: "debug"
|
||||
7: "debug",
|
||||
},
|
||||
|
||||
support_level_hash: {
|
||||
'c': gettext('Community'),
|
||||
'b': gettext('Basic'),
|
||||
's': gettext('Standard'),
|
||||
'p': gettext('Premium')
|
||||
'p': gettext('Premium'),
|
||||
},
|
||||
|
||||
noSubKeyHtml: 'You do not have a valid subscription for this server. Please visit <a target="_blank" href="https://www.proxmox.com/products/proxmox-ve/subscription-service-plans">www.proxmox.com</a> to get a list of available options.',
|
||||
@ -50,7 +50,7 @@ Ext.define('PVE.Utils', { utilities: {
|
||||
kvm_ostypes: {
|
||||
'Linux': [
|
||||
{ desc: '5.x - 2.6 Kernel', val: 'l26' },
|
||||
{ desc: '2.4 Kernel', val: 'l24' }
|
||||
{ desc: '2.4 Kernel', val: 'l24' },
|
||||
],
|
||||
'Microsoft Windows': [
|
||||
{ desc: '10/2016/2019', val: 'win10' },
|
||||
@ -58,14 +58,14 @@ Ext.define('PVE.Utils', { utilities: {
|
||||
{ desc: '7/2008r2', val: 'win7' },
|
||||
{ desc: 'Vista/2008', val: 'w2k8' },
|
||||
{ desc: 'XP/2003', val: 'wxp' },
|
||||
{ desc: '2000', val: 'w2k' }
|
||||
{ desc: '2000', val: 'w2k' },
|
||||
],
|
||||
'Solaris Kernel': [
|
||||
{ desc: '-', val: 'solaris'}
|
||||
{ desc: '-', val: 'solaris'},
|
||||
],
|
||||
'Other': [
|
||||
{ desc: '-', val: 'other'}
|
||||
]
|
||||
{ desc: '-', val: 'other'},
|
||||
],
|
||||
},
|
||||
|
||||
get_health_icon: function(state, circle) {
|
||||
@ -172,13 +172,13 @@ Ext.define('PVE.Utils', { utilities: {
|
||||
'HEALTH_UPGRADE':'upgrade',
|
||||
'HEALTH_OLD':'old',
|
||||
'HEALTH_WARN':'warning',
|
||||
'HEALTH_ERR':'critical'
|
||||
'HEALTH_ERR':'critical',
|
||||
},
|
||||
|
||||
render_ceph_health: function(healthObj) {
|
||||
var state = {
|
||||
iconCls: PVE.Utils.get_health_icon(),
|
||||
text: ''
|
||||
text: '',
|
||||
};
|
||||
|
||||
if (!healthObj || !healthObj.status) {
|
||||
@ -544,7 +544,7 @@ Ext.define('PVE.Utils', { utilities: {
|
||||
sl: 'Slovenian',
|
||||
sv: 'Swedish',
|
||||
//th: 'Thai',
|
||||
tr: 'Turkish'
|
||||
tr: 'Turkish',
|
||||
},
|
||||
|
||||
kvm_vga_drivers: {
|
||||
@ -559,7 +559,7 @@ Ext.define('PVE.Utils', { utilities: {
|
||||
serial2: gettext('Serial terminal') + ' 2',
|
||||
serial3: gettext('Serial terminal') + ' 3',
|
||||
virtio: 'VirtIO-GPU',
|
||||
none: Proxmox.Utils.noneText
|
||||
none: Proxmox.Utils.noneText,
|
||||
},
|
||||
|
||||
render_kvm_language: function (value) {
|
||||
@ -586,7 +586,7 @@ Ext.define('PVE.Utils', { utilities: {
|
||||
'__default__': Proxmox.Utils.defaultText + ' (xterm.js)',
|
||||
'vv': 'SPICE (remote-viewer)',
|
||||
'html5': 'HTML5 (noVNC)',
|
||||
'xtermjs': 'xterm.js'
|
||||
'xtermjs': 'xterm.js',
|
||||
},
|
||||
|
||||
render_console_viewer: function(value) {
|
||||
@ -673,7 +673,7 @@ Ext.define('PVE.Utils', { utilities: {
|
||||
'vztmpl': gettext('Container template'),
|
||||
'iso': gettext('ISO image'),
|
||||
'rootdir': gettext('Container'),
|
||||
'snippets': gettext('Snippets')
|
||||
'snippets': gettext('Snippets'),
|
||||
},
|
||||
|
||||
volume_is_qemu_backup: function(volid, format) {
|
||||
@ -806,51 +806,51 @@ Ext.define('PVE.Utils', { utilities: {
|
||||
sdnvnetSchema: {
|
||||
vnet: {
|
||||
name: 'vnet',
|
||||
faIcon: 'folder'
|
||||
faIcon: 'folder',
|
||||
},
|
||||
},
|
||||
|
||||
sdnzoneSchema: {
|
||||
zone: {
|
||||
name: 'zone',
|
||||
hideAdd: true
|
||||
hideAdd: true,
|
||||
},
|
||||
simple: {
|
||||
name: 'Simple',
|
||||
ipanel: 'SimpleInputPanel',
|
||||
faIcon: 'th'
|
||||
faIcon: 'th',
|
||||
},
|
||||
vlan: {
|
||||
name: 'VLAN',
|
||||
ipanel: 'VlanInputPanel',
|
||||
faIcon: 'th'
|
||||
faIcon: 'th',
|
||||
},
|
||||
qinq: {
|
||||
name: 'QinQ',
|
||||
ipanel: 'QinQInputPanel',
|
||||
faIcon: 'th'
|
||||
faIcon: 'th',
|
||||
},
|
||||
vxlan: {
|
||||
name: 'VXLAN',
|
||||
ipanel: 'VxlanInputPanel',
|
||||
faIcon: 'th'
|
||||
faIcon: 'th',
|
||||
},
|
||||
evpn: {
|
||||
name: 'EVPN',
|
||||
ipanel: 'EvpnInputPanel',
|
||||
faIcon: 'th'
|
||||
faIcon: 'th',
|
||||
},
|
||||
},
|
||||
|
||||
sdncontrollerSchema: {
|
||||
controller: {
|
||||
name: 'controller',
|
||||
hideAdd: true
|
||||
hideAdd: true,
|
||||
},
|
||||
evpn: {
|
||||
name: 'evpn',
|
||||
ipanel: 'EvpnInputPanel',
|
||||
faIcon: 'crosshairs'
|
||||
faIcon: 'crosshairs',
|
||||
},
|
||||
},
|
||||
|
||||
@ -917,10 +917,10 @@ Ext.define('PVE.Utils', { utilities: {
|
||||
Ext.isNumber(data.id) &&
|
||||
Ext.isNumber(data.lun)) {
|
||||
return "CH " +
|
||||
Ext.String.leftPad(data.channel,2, '0') +
|
||||
Ext.String.leftPad(data.channel, 2, '0') +
|
||||
" ID " + data.id + " LUN " + data.lun;
|
||||
}
|
||||
return data.volid.replace(/^.*?:(.*?\/)?/,'');
|
||||
return data.volid.replace(/^.*?:(.*?\/)?/, '');
|
||||
},
|
||||
|
||||
render_serverity: function (value) {
|
||||
@ -1077,7 +1077,7 @@ Ext.define('PVE.Utils', { utilities: {
|
||||
|
||||
render_resource_type: function(value, metaData, record, rowIndex, colIndex, store) {
|
||||
|
||||
var cls = PVE.Utils.get_object_icon_class(value,record.data);
|
||||
var cls = PVE.Utils.get_object_icon_class(value, record.data);
|
||||
|
||||
var fa = '<i class="fa-fw x-grid-icon-custom ' + cls + '"></i> ';
|
||||
return fa + value;
|
||||
@ -1157,7 +1157,7 @@ Ext.define('PVE.Utils', { utilities: {
|
||||
'2': gettext('Bad Request'),
|
||||
'3': gettext('Configuration Unsupported'),
|
||||
'4': gettext('Device Ineligible'),
|
||||
'5': gettext('Timeout')
|
||||
'5': gettext('Timeout'),
|
||||
};
|
||||
return "U2F Error: " + ErrorNames[error] || Proxmox.Utils.unknownText;
|
||||
},
|
||||
@ -1240,7 +1240,7 @@ Ext.define('PVE.Utils', { utilities: {
|
||||
vmname: vmname,
|
||||
node: nodename,
|
||||
resize: scaling,
|
||||
cmd: cmd
|
||||
cmd: cmd,
|
||||
});
|
||||
var nw = window.open("?" + url, '_blank', "innerWidth=745,innerheight=427");
|
||||
if (nw) {
|
||||
@ -1254,7 +1254,7 @@ Ext.define('PVE.Utils', { utilities: {
|
||||
var link = Ext.DomHelper.append(document.body, {
|
||||
tag: 'a',
|
||||
href: uri,
|
||||
css : 'display:none;visibility:hidden;height:0px;'
|
||||
css : 'display:none;visibility:hidden;height:0px;',
|
||||
});
|
||||
|
||||
// Note: we need to tell android the correct file name extension
|
||||
@ -1290,7 +1290,7 @@ Ext.define('PVE.Utils', { utilities: {
|
||||
encodeURIComponent(raw);
|
||||
|
||||
downloadWithName(url, "pve-spice.vv");
|
||||
}
|
||||
},
|
||||
});
|
||||
},
|
||||
|
||||
@ -1312,7 +1312,7 @@ Ext.define('PVE.Utils', { utilities: {
|
||||
xtermjs: !!conf.serial,
|
||||
};
|
||||
PVE.Utils.openDefaultConsoleWindow(consoles, 'kvm', vmid, nodename, vmname);
|
||||
}
|
||||
},
|
||||
});
|
||||
} else if (record.data.type === 'lxc' && !record.data.template) {
|
||||
PVE.Utils.openDefaultConsoleWindow(true, 'lxc', vmid, nodename, vmname);
|
||||
@ -1348,7 +1348,7 @@ Ext.define('PVE.Utils', { utilities: {
|
||||
if (template) {
|
||||
if (type === 'qemu' || type == 'lxc') {
|
||||
menu = Ext.create('PVE.menu.TemplateMenu', {
|
||||
pveSelNode: record
|
||||
pveSelNode: record,
|
||||
});
|
||||
}
|
||||
} else if (type === 'qemu' ||
|
||||
@ -1356,7 +1356,7 @@ Ext.define('PVE.Utils', { utilities: {
|
||||
type === 'node') {
|
||||
menu = Ext.create('PVE.' + type + '.CmdMenu', {
|
||||
pveSelNode: record,
|
||||
nodename: record.data.node
|
||||
nodename: record.data.node,
|
||||
});
|
||||
} else {
|
||||
return;
|
||||
@ -1545,7 +1545,7 @@ Ext.define('PVE.Utils', { utilities: {
|
||||
if (!container.down('pveCephInstallWindow')){
|
||||
var isInstalled = msg.match(/not initialized/i) ? true : false;
|
||||
var win = Ext.create('PVE.ceph.Install', {
|
||||
nodename: nodename
|
||||
nodename: nodename,
|
||||
});
|
||||
win.getViewModel().set('isInstalled', isInstalled);
|
||||
container.add(win);
|
||||
@ -1617,7 +1617,7 @@ Ext.define('PVE.Utils', { utilities: {
|
||||
cpu_vendor_map: {
|
||||
'default': 'QEMU',
|
||||
'AuthenticAMD': 'AMD',
|
||||
'GenuineIntel': 'Intel'
|
||||
'GenuineIntel': 'Intel',
|
||||
},
|
||||
|
||||
cpu_vendor_order: {
|
||||
@ -1745,6 +1745,6 @@ Ext.define('PVE.Utils', { utilities: {
|
||||
vzumount: ['CT', gettext('Unmount')],
|
||||
zfscreate: [gettext('ZFS Storage'), gettext('Create')],
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
});
|
||||
|
@ -52,8 +52,8 @@ Ext.define('PVE.noVncConsole', {
|
||||
PVE.Utils.cleanEmptyObjectKeys(queryDict);
|
||||
var url = '/?' + Ext.Object.toQueryString(queryDict);
|
||||
box.load(url);
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
me.callParent();
|
||||
@ -67,6 +67,6 @@ Ext.define('PVE.noVncConsole', {
|
||||
// reload IFrame content to forcibly reconnect VNC/xterm.js to VM
|
||||
var box = this.down('[itemid=vncconsole]');
|
||||
box.getWin().location.reload();
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
|
@ -48,7 +48,7 @@ Ext.define('PVE.Workspace', {
|
||||
me.login = null;
|
||||
me.updateLoginData(data);
|
||||
Proxmox.Utils.checked_command(function() {}); // display subscription status
|
||||
}
|
||||
},
|
||||
});
|
||||
}
|
||||
me.onLogin(null);
|
||||
@ -92,20 +92,20 @@ Ext.define('PVE.Workspace', {
|
||||
Ext.Ajax.request({
|
||||
params: {
|
||||
username: Proxmox.UserName,
|
||||
password: ticket
|
||||
password: ticket,
|
||||
},
|
||||
url: '/api2/json/access/ticket',
|
||||
method: 'POST',
|
||||
success: function(response, opts) {
|
||||
var obj = Ext.decode(response.responseText);
|
||||
me.updateLoginData(obj.data);
|
||||
}
|
||||
},
|
||||
});
|
||||
},
|
||||
interval: 15*60*1000
|
||||
interval: 15*60*1000,
|
||||
});
|
||||
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
Ext.define('PVE.StdWorkspace', {
|
||||
@ -161,7 +161,7 @@ Ext.define('PVE.StdWorkspace', {
|
||||
success: function(response) {
|
||||
PVE.VersionInfo = response.result.data;
|
||||
me.updateVersionInfo();
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
Proxmox.Utils.API2Request({
|
||||
@ -228,7 +228,7 @@ Ext.define('PVE.StdWorkspace', {
|
||||
lxc: 'PVE.lxc.Config',
|
||||
storage: 'PVE.storage.Browser',
|
||||
sdn: 'PVE.sdn.Browser',
|
||||
pool: 'pvePoolConfig'
|
||||
pool: 'pvePoolConfig',
|
||||
};
|
||||
var comp = {
|
||||
xtype: tlckup[n.data.type || 'root'] ||
|
||||
@ -237,14 +237,14 @@ Ext.define('PVE.StdWorkspace', {
|
||||
Ext.isDefined(n.data.groupbyid),
|
||||
pveSelNode: n,
|
||||
workspace: me,
|
||||
viewFilter: selview.getViewFilter()
|
||||
viewFilter: selview.getViewFilter(),
|
||||
};
|
||||
PVE.curSelectedNode = n;
|
||||
me.setContent(comp);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
selview.on('select', function(combo, records) {
|
||||
@ -266,7 +266,7 @@ Ext.define('PVE.StdWorkspace', {
|
||||
handler: function() {
|
||||
var wiz = Ext.create('PVE.qemu.CreateWizard', {});
|
||||
wiz.show();
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
var createCT = Ext.createWidget('button', {
|
||||
@ -279,7 +279,7 @@ Ext.define('PVE.StdWorkspace', {
|
||||
handler: function() {
|
||||
var wiz = Ext.create('PVE.lxc.CreateWizard', {});
|
||||
wiz.show();
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
sprovider.on('statechange', function(sp, key, value) {
|
||||
@ -298,11 +298,11 @@ Ext.define('PVE.StdWorkspace', {
|
||||
region: 'north',
|
||||
layout: {
|
||||
type: 'hbox',
|
||||
align: 'middle'
|
||||
align: 'middle',
|
||||
},
|
||||
baseCls: 'x-plain',
|
||||
defaults: {
|
||||
baseCls: 'x-plain'
|
||||
baseCls: 'x-plain',
|
||||
},
|
||||
border: false,
|
||||
margin: '2 0 2 5',
|
||||
@ -313,14 +313,14 @@ Ext.define('PVE.StdWorkspace', {
|
||||
{
|
||||
minWidth: 150,
|
||||
id: 'versioninfo',
|
||||
html: 'Virtual Environment'
|
||||
html: 'Virtual Environment',
|
||||
},
|
||||
{
|
||||
xtype: 'pveGlobalSearchField',
|
||||
tree: rtree
|
||||
tree: rtree,
|
||||
},
|
||||
{
|
||||
flex: 1
|
||||
flex: 1,
|
||||
},
|
||||
{
|
||||
xtype: 'proxmoxHelpButton',
|
||||
@ -330,7 +330,7 @@ Ext.define('PVE.StdWorkspace', {
|
||||
listenToGlobalEvent: false,
|
||||
onlineHelp: 'pve_documentation_index',
|
||||
text: gettext('Documentation'),
|
||||
margin: '0 5 0 0'
|
||||
margin: '0 5 0 0',
|
||||
},
|
||||
createVM,
|
||||
createCT,
|
||||
@ -343,7 +343,7 @@ Ext.define('PVE.StdWorkspace', {
|
||||
style: {
|
||||
// proxmox dark grey p light grey as border
|
||||
backgroundColor: '#464d4d',
|
||||
borderColor: '#ABBABA'
|
||||
borderColor: '#ABBABA',
|
||||
},
|
||||
iconCls: 'fa fa-user',
|
||||
menu: [
|
||||
@ -353,27 +353,27 @@ Ext.define('PVE.StdWorkspace', {
|
||||
handler: function() {
|
||||
var win = Ext.create('PVE.window.Settings');
|
||||
win.show();
|
||||
}
|
||||
},
|
||||
},
|
||||
{
|
||||
text: gettext('Password'),
|
||||
iconCls: 'fa fa-fw fa-key',
|
||||
handler: function() {
|
||||
var win = Ext.create('Proxmox.window.PasswordEdit', {
|
||||
userid: Proxmox.UserName
|
||||
userid: Proxmox.UserName,
|
||||
});
|
||||
win.show();
|
||||
}
|
||||
},
|
||||
},
|
||||
{
|
||||
text: 'TFA',
|
||||
iconCls: 'fa fa-fw fa-lock',
|
||||
handler: function(btn, event, rec) {
|
||||
var win = Ext.create('PVE.window.TFAEdit',{
|
||||
userid: Proxmox.UserName
|
||||
var win = Ext.create('PVE.window.TFAEdit', {
|
||||
userid: Proxmox.UserName,
|
||||
});
|
||||
win.show();
|
||||
}
|
||||
},
|
||||
},
|
||||
{
|
||||
iconCls: 'fa fa-language',
|
||||
@ -402,11 +402,11 @@ Ext.define('PVE.StdWorkspace', {
|
||||
comp.getStore().loadData([], false);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
region: 'center',
|
||||
@ -419,7 +419,7 @@ Ext.define('PVE.StdWorkspace', {
|
||||
layout: { type: 'card' },
|
||||
border: false,
|
||||
margin: '0 5 0 0',
|
||||
items: []
|
||||
items: [],
|
||||
},
|
||||
{
|
||||
region: 'west',
|
||||
@ -439,8 +439,8 @@ Ext.define('PVE.StdWorkspace', {
|
||||
if (width > viewWidth - 100) {
|
||||
panel.setWidth(viewWidth - 100);
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
xtype: 'pveStatusPanel',
|
||||
@ -460,10 +460,10 @@ Ext.define('PVE.StdWorkspace', {
|
||||
if (height > (viewHeight - 150)) {
|
||||
panel.setHeight(viewHeight - 150);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
},
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
me.callParent();
|
||||
@ -479,6 +479,6 @@ Ext.define('PVE.StdWorkspace', {
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
|
@ -37,7 +37,7 @@ Ext.define('PVE.button.ConsoleButton', {
|
||||
var me = this;
|
||||
var consoles = {
|
||||
spice: me.enableSpice,
|
||||
xtermjs: me.enableXtermjs
|
||||
xtermjs: me.enableXtermjs,
|
||||
};
|
||||
PVE.Utils.openDefaultConsoleWindow(consoles, me.consoleType, me.vmid,
|
||||
me.nodename, me.consoleName, me.cmd);
|
||||
@ -52,7 +52,7 @@ Ext.define('PVE.button.ConsoleButton', {
|
||||
handler: function(button) {
|
||||
var me = this.up('button');
|
||||
PVE.Utils.openConsoleWindow(button.type, me.consoleType, me.vmid, me.nodename, me.consoleName, me.cmd);
|
||||
}
|
||||
},
|
||||
},
|
||||
{
|
||||
xterm: 'menuitem',
|
||||
@ -63,7 +63,7 @@ Ext.define('PVE.button.ConsoleButton', {
|
||||
handler: function(button) {
|
||||
var me = this.up('button');
|
||||
PVE.Utils.openConsoleWindow(button.type, me.consoleType, me.vmid, me.nodename, me.consoleName, me.cmd);
|
||||
}
|
||||
},
|
||||
},
|
||||
{
|
||||
text: 'xterm.js',
|
||||
@ -73,8 +73,8 @@ Ext.define('PVE.button.ConsoleButton', {
|
||||
handler: function(button) {
|
||||
var me = this.up('button');
|
||||
PVE.Utils.openConsoleWindow(button.type, me.consoleType, me.vmid, me.nodename, me.consoleName, me.cmd);
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
],
|
||||
|
||||
initComponent: function() {
|
||||
@ -85,5 +85,5 @@ Ext.define('PVE.button.ConsoleButton', {
|
||||
}
|
||||
|
||||
me.callParent();
|
||||
}
|
||||
},
|
||||
});
|
||||
|
@ -28,7 +28,7 @@ Ext.define('PVE.button.PendingRevert', {
|
||||
selModel: view.getSelectionModel(),
|
||||
method: 'PUT',
|
||||
params: {
|
||||
'revert': keys.join(',')
|
||||
'revert': keys.join(','),
|
||||
},
|
||||
callback: () => view.reload(),
|
||||
failure: (response) => Ext.Msg.alert('Error', response.htmlStatus),
|
||||
|
@ -47,7 +47,7 @@ Ext.define('PVE.button.Split', {
|
||||
return;
|
||||
}
|
||||
me.realHandler(button, event, rec);
|
||||
}
|
||||
},
|
||||
});
|
||||
} else {
|
||||
me.realHandler(button, event, rec);
|
||||
@ -96,5 +96,5 @@ Ext.define('PVE.button.Split', {
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
},
|
||||
});
|
||||
|
@ -126,7 +126,7 @@ Ext.define('PVE.ceph.CephHighestVersionDisplay', {
|
||||
},
|
||||
failure: function(response, opts) {
|
||||
Ext.Msg.alert(gettext('Error'), response.htmlStatus);
|
||||
}
|
||||
},
|
||||
});
|
||||
},
|
||||
});
|
||||
@ -145,10 +145,10 @@ Ext.define('PVE.ceph.CephInstallWizard', {
|
||||
cephRelease: 'octopus',
|
||||
configuration: true,
|
||||
isInstalled: false,
|
||||
}
|
||||
},
|
||||
},
|
||||
cbindData: {
|
||||
nodename: undefined
|
||||
nodename: undefined,
|
||||
},
|
||||
|
||||
title: gettext('Setup'),
|
||||
@ -204,7 +204,7 @@ Ext.define('PVE.ceph.CephInstallWizard', {
|
||||
xtype: 'pveCephHighestVersionDisplay',
|
||||
labelWidth: 180,
|
||||
cbind:{
|
||||
nodename: '{nodename}'
|
||||
nodename: '{nodename}',
|
||||
},
|
||||
gotNewestVersion: function(release, maxversiontext, maxversion) {
|
||||
if (release === 'unknown') {
|
||||
@ -249,22 +249,22 @@ Ext.define('PVE.ceph.CephInstallWizard', {
|
||||
Ext.GlobalEvents.fireEvent('proxmoxHideHelp', this.onlineHelp);
|
||||
}
|
||||
this.up('pveCephInstallWizard').down('#next').setText(gettext('Next'));
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
title: gettext('Installation'),
|
||||
xtype: 'panel',
|
||||
layout: 'fit',
|
||||
cbind:{
|
||||
nodename: '{nodename}'
|
||||
nodename: '{nodename}',
|
||||
},
|
||||
viewModel: {}, // needed to inherit parent viewModel data
|
||||
listeners: {
|
||||
afterrender: function() {
|
||||
var me = this;
|
||||
if (this.getViewModel().get('isInstalled')) {
|
||||
this.mask("Ceph is already installed, click next to create your configuration.",['pve-static-mask']);
|
||||
this.mask("Ceph is already installed, click next to create your configuration.", ['pve-static-mask']);
|
||||
} else {
|
||||
me.down('pveNoVncConsole').fireEvent('activate');
|
||||
}
|
||||
@ -277,7 +277,7 @@ Ext.define('PVE.ceph.CephInstallWizard', {
|
||||
interval: 1000,
|
||||
proxy: {
|
||||
type: 'proxmox',
|
||||
url: '/api2/json/nodes/' + nodename + '/ceph/status'
|
||||
url: '/api2/json/nodes/' + nodename + '/ceph/status',
|
||||
},
|
||||
listeners: {
|
||||
load: function(rec, response, success, operation) {
|
||||
@ -287,17 +287,17 @@ Ext.define('PVE.ceph.CephInstallWizard', {
|
||||
me.down('textfield').setValue('success');
|
||||
} else if (operation.error.statusText.match("not initialized", "i")) {
|
||||
me.updateStore.stopUpdate();
|
||||
me.up('pveCephInstallWizard').getViewModel().set('configuration',false);
|
||||
me.up('pveCephInstallWizard').getViewModel().set('configuration', false);
|
||||
me.down('textfield').setValue('success');
|
||||
} else if (operation.error.statusText.match("rados_connect failed", "i")) {
|
||||
me.updateStore.stopUpdate();
|
||||
me.up('pveCephInstallWizard').getViewModel().set('configuration',true);
|
||||
me.up('pveCephInstallWizard').getViewModel().set('configuration', true);
|
||||
me.down('textfield').setValue('success');
|
||||
} else if (!operation.error.statusText.match("not installed", "i")) {
|
||||
Proxmox.Utils.setErrorMask(me, operation.error.statusText);
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
});
|
||||
me.updateStore.startUpdate();
|
||||
},
|
||||
@ -306,7 +306,7 @@ Ext.define('PVE.ceph.CephInstallWizard', {
|
||||
if (me.updateStore) {
|
||||
me.updateStore.stopUpdate();
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
items: [
|
||||
{
|
||||
@ -331,22 +331,22 @@ Ext.define('PVE.ceph.CephInstallWizard', {
|
||||
value: '',
|
||||
allowBlank: false,
|
||||
submitValue: false,
|
||||
hidden: true
|
||||
}
|
||||
]
|
||||
hidden: true,
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
xtype: 'inputpanel',
|
||||
title: gettext('Configuration'),
|
||||
onlineHelp: 'chapter_pveceph',
|
||||
cbind: {
|
||||
nodename: '{nodename}'
|
||||
nodename: '{nodename}',
|
||||
},
|
||||
viewModel: {
|
||||
data: {
|
||||
replicas: undefined,
|
||||
minreplicas: undefined
|
||||
}
|
||||
minreplicas: undefined,
|
||||
},
|
||||
},
|
||||
listeners: {
|
||||
activate: function() {
|
||||
@ -354,19 +354,19 @@ Ext.define('PVE.ceph.CephInstallWizard', {
|
||||
},
|
||||
beforeshow: function() {
|
||||
if (this.up('pveCephInstallWizard').getViewModel().get('configuration')) {
|
||||
this.mask("Configuration already initialized",['pve-static-mask']);
|
||||
this.mask("Configuration already initialized", ['pve-static-mask']);
|
||||
} else {
|
||||
this.unmask();
|
||||
}
|
||||
},
|
||||
deactivate: function() {
|
||||
this.up('pveCephInstallWizard').down('#submit').setText(gettext('Finish'));
|
||||
}
|
||||
},
|
||||
},
|
||||
column1: [
|
||||
{
|
||||
xtype: 'displayfield',
|
||||
value: gettext('Ceph cluster configuration') + ':'
|
||||
value: gettext('Ceph cluster configuration') + ':',
|
||||
},
|
||||
{
|
||||
xtype: 'proxmoxNetworkSelector',
|
||||
@ -374,11 +374,11 @@ Ext.define('PVE.ceph.CephInstallWizard', {
|
||||
value: '',
|
||||
fieldLabel: 'Public Network IP/CIDR',
|
||||
bind: {
|
||||
allowBlank: '{configuration}'
|
||||
allowBlank: '{configuration}',
|
||||
},
|
||||
cbind: {
|
||||
nodename: '{nodename}'
|
||||
}
|
||||
nodename: '{nodename}',
|
||||
},
|
||||
},
|
||||
{
|
||||
xtype: 'proxmoxNetworkSelector',
|
||||
@ -388,28 +388,28 @@ Ext.define('PVE.ceph.CephInstallWizard', {
|
||||
autoSelect: false,
|
||||
emptyText: gettext('Same as Public Network'),
|
||||
cbind: {
|
||||
nodename: '{nodename}'
|
||||
}
|
||||
}
|
||||
nodename: '{nodename}',
|
||||
},
|
||||
},
|
||||
// FIXME: add hint about cluster network and/or reference user to docs??
|
||||
],
|
||||
column2: [
|
||||
{
|
||||
xtype: 'displayfield',
|
||||
value: gettext('First Ceph monitor') + ':'
|
||||
value: gettext('First Ceph monitor') + ':',
|
||||
},
|
||||
{
|
||||
xtype: 'pveNodeSelector',
|
||||
fieldLabel: gettext('Monitor node'),
|
||||
name: 'mon-node',
|
||||
selectCurNode: true,
|
||||
allowBlank: false
|
||||
allowBlank: false,
|
||||
},
|
||||
{
|
||||
xtype: 'displayfield',
|
||||
value: gettext('Additional monitors are recommended. They can be created at any time in the Monitor tab.'),
|
||||
userCls: 'pmx-hint'
|
||||
}
|
||||
userCls: 'pmx-hint',
|
||||
},
|
||||
],
|
||||
advancedColumn1: [
|
||||
{
|
||||
@ -417,11 +417,11 @@ Ext.define('PVE.ceph.CephInstallWizard', {
|
||||
name: 'size',
|
||||
fieldLabel: 'Number of replicas',
|
||||
bind: {
|
||||
value: '{replicas}'
|
||||
value: '{replicas}',
|
||||
},
|
||||
maxValue: 7,
|
||||
minValue: 2,
|
||||
emptyText: '3'
|
||||
emptyText: '3',
|
||||
},
|
||||
{
|
||||
xtype: 'numberfield',
|
||||
@ -429,7 +429,7 @@ Ext.define('PVE.ceph.CephInstallWizard', {
|
||||
fieldLabel: 'Minimum replicas',
|
||||
bind: {
|
||||
maxValue: '{replicas}',
|
||||
value: '{minreplicas}'
|
||||
value: '{minreplicas}',
|
||||
},
|
||||
minValue: 2,
|
||||
maxValue: 3,
|
||||
@ -442,8 +442,8 @@ Ext.define('PVE.ceph.CephInstallWizard', {
|
||||
this.toggleSpinners();
|
||||
this.validate();
|
||||
},
|
||||
emptyText: '2'
|
||||
}
|
||||
emptyText: '2',
|
||||
},
|
||||
],
|
||||
onGetValues: function(values) {
|
||||
['cluster-network', 'size', 'min_size'].forEach(function(field) {
|
||||
@ -478,18 +478,18 @@ Ext.define('PVE.ceph.CephInstallWizard', {
|
||||
},
|
||||
failure: function(response, opts) {
|
||||
Ext.Msg.alert(gettext('Error'), response.htmlStatus);
|
||||
}
|
||||
},
|
||||
});
|
||||
},
|
||||
failure: function(response, opts) {
|
||||
Ext.Msg.alert(gettext('Error'), response.htmlStatus);
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
} else {
|
||||
me.up('pveCephInstallWizard').navigateNext();
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
{
|
||||
title: gettext('Success'),
|
||||
@ -524,12 +524,12 @@ Ext.define('PVE.ceph.CephInstallWizard', {
|
||||
if (this.onlineHelp) {
|
||||
Ext.GlobalEvents.fireEvent('proxmoxHideHelp', this.onlineHelp);
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
onSubmit: function() {
|
||||
var wizard = this.up('pveCephInstallWizard');
|
||||
wizard.close();
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
},
|
||||
],
|
||||
});
|
||||
|
@ -5,8 +5,8 @@ Ext.define('PVE.node.CephConfigDb', {
|
||||
border: false,
|
||||
store: {
|
||||
proxy: {
|
||||
type: 'proxmox'
|
||||
}
|
||||
type: 'proxmox',
|
||||
},
|
||||
},
|
||||
|
||||
columns: [
|
||||
@ -41,7 +41,7 @@ Ext.define('PVE.node.CephConfigDb', {
|
||||
text: 'Runtime Updatable',
|
||||
hidden: true,
|
||||
width: 80,
|
||||
renderer: Proxmox.Utils.format_boolean
|
||||
renderer: Proxmox.Utils.format_boolean,
|
||||
},
|
||||
],
|
||||
|
||||
@ -59,7 +59,7 @@ Ext.define('PVE.node.CephConfigDb', {
|
||||
|
||||
Proxmox.Utils.monStoreErrors(me, me.getStore());
|
||||
me.getStore().load();
|
||||
}
|
||||
},
|
||||
});
|
||||
Ext.define('PVE.node.CephConfig', {
|
||||
extend: 'Ext.panel.Panel',
|
||||
@ -83,14 +83,14 @@ Ext.define('PVE.node.CephConfig', {
|
||||
me.mon(win, 'cephInstallWindowClosed', function(){
|
||||
me.load();
|
||||
});
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
},
|
||||
success: function(response, opts) {
|
||||
var data = response.result.data;
|
||||
me.update(Ext.htmlEncode(data));
|
||||
}
|
||||
},
|
||||
});
|
||||
},
|
||||
|
||||
@ -107,14 +107,14 @@ Ext.define('PVE.node.CephConfig', {
|
||||
listeners: {
|
||||
activate: function() {
|
||||
me.load();
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
me.callParent();
|
||||
|
||||
me.load();
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
Ext.define('PVE.node.CephConfigCrush', {
|
||||
@ -127,14 +127,14 @@ Ext.define('PVE.node.CephConfigCrush', {
|
||||
items: [{
|
||||
title: gettext('Configuration'),
|
||||
xtype: 'pveNodeCephConfig',
|
||||
region: 'center'
|
||||
region: 'center',
|
||||
},
|
||||
{
|
||||
title: 'Crush Map', // do not localize
|
||||
xtype: 'pveNodeCephCrushMap',
|
||||
region: 'east',
|
||||
split: true,
|
||||
width: '50%'
|
||||
width: '50%',
|
||||
},
|
||||
{
|
||||
title: gettext('Configuration Database'),
|
||||
@ -142,14 +142,14 @@ Ext.define('PVE.node.CephConfigCrush', {
|
||||
region: 'south',
|
||||
split: true,
|
||||
weight: -30,
|
||||
height: '50%'
|
||||
height: '50%',
|
||||
}],
|
||||
|
||||
initComponent: function() {
|
||||
var me = this;
|
||||
me.defaults = {
|
||||
pveSelNode: me.pveSelNode
|
||||
pveSelNode: me.pveSelNode,
|
||||
};
|
||||
me.callParent();
|
||||
}
|
||||
},
|
||||
});
|
||||
|
@ -21,13 +21,13 @@ Ext.define('PVE.node.CephCrushMap', {
|
||||
me.mon(win, 'cephInstallWindowClosed', function(){
|
||||
me.load();
|
||||
});
|
||||
}
|
||||
},
|
||||
);
|
||||
},
|
||||
success: function(response, opts) {
|
||||
var data = response.result.data;
|
||||
me.update(Ext.htmlEncode(data));
|
||||
}
|
||||
},
|
||||
});
|
||||
},
|
||||
|
||||
@ -45,12 +45,12 @@ Ext.define('PVE.node.CephCrushMap', {
|
||||
listeners: {
|
||||
activate: function() {
|
||||
me.load();
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
me.callParent();
|
||||
|
||||
me.load();
|
||||
}
|
||||
},
|
||||
});
|
||||
|
@ -28,10 +28,10 @@ Ext.define('PVE.CephCreateFS', {
|
||||
listeners: {
|
||||
change: function(f, value) {
|
||||
this.up('pveCephCreateFS').setFSName(value);
|
||||
}
|
||||
},
|
||||
},
|
||||
submitValue: false, // already encoded in apicall URL
|
||||
emptyText: 'cephfs'
|
||||
emptyText: 'cephfs',
|
||||
},
|
||||
{
|
||||
xtype: 'proxmoxintegerfield',
|
||||
@ -41,7 +41,7 @@ Ext.define('PVE.CephCreateFS', {
|
||||
emptyText: 128,
|
||||
minValue: 8,
|
||||
maxValue: 32768,
|
||||
allowBlank: false
|
||||
allowBlank: false,
|
||||
},
|
||||
{
|
||||
xtype: 'proxmoxcheckbox',
|
||||
@ -52,7 +52,7 @@ Ext.define('PVE.CephCreateFS', {
|
||||
tag: 'div',
|
||||
'data-qtip': gettext('Add the new CephFS to the cluster storage configuration.'),
|
||||
},
|
||||
}
|
||||
},
|
||||
],
|
||||
|
||||
initComponent : function() {
|
||||
@ -64,7 +64,7 @@ Ext.define('PVE.CephCreateFS', {
|
||||
me.setFSName();
|
||||
|
||||
me.callParent();
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
Ext.define('PVE.NodeCephFSPanel', {
|
||||
@ -79,21 +79,21 @@ Ext.define('PVE.NodeCephFSPanel', {
|
||||
defaults: {
|
||||
border: false,
|
||||
cbind: {
|
||||
nodename: '{nodename}'
|
||||
}
|
||||
nodename: '{nodename}',
|
||||
},
|
||||
},
|
||||
|
||||
viewModel: {
|
||||
parent: null,
|
||||
data: {
|
||||
cephfsConfigured: false,
|
||||
mdsCount: 0
|
||||
mdsCount: 0,
|
||||
},
|
||||
formulas: {
|
||||
canCreateFS: function(get) {
|
||||
return (!get('cephfsConfigured') && get('mdsCount') > 0);
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
items: [
|
||||
@ -112,16 +112,16 @@ Ext.define('PVE.NodeCephFSPanel', {
|
||||
storeid: 'pve-ceph-fs',
|
||||
proxy: {
|
||||
type: 'proxmox',
|
||||
url: '/api2/json/nodes/' + view.nodename + '/ceph/fs'
|
||||
url: '/api2/json/nodes/' + view.nodename + '/ceph/fs',
|
||||
},
|
||||
model: 'pve-ceph-fs'
|
||||
model: 'pve-ceph-fs',
|
||||
});
|
||||
view.setStore(Ext.create('Proxmox.data.DiffStore', {
|
||||
rstore: view.rstore,
|
||||
sorters: {
|
||||
property: 'name',
|
||||
order: 'DESC'
|
||||
}
|
||||
order: 'DESC',
|
||||
},
|
||||
}));
|
||||
var regex = new RegExp("not (installed|initialized)", "i");
|
||||
PVE.Utils.handleStoreErrorOrMask(view, view.rstore, regex, function(me, error){
|
||||
@ -131,7 +131,7 @@ Ext.define('PVE.NodeCephFSPanel', {
|
||||
me.mon(win, 'cephInstallWindowClosed', function(){
|
||||
me.rstore.startUpdate();
|
||||
});
|
||||
}
|
||||
},
|
||||
);
|
||||
});
|
||||
view.rstore.on('load', this.onLoad, this);
|
||||
@ -147,8 +147,8 @@ Ext.define('PVE.NodeCephFSPanel', {
|
||||
listeners: {
|
||||
destroy: function() {
|
||||
view.rstore.startUpdate();
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
});
|
||||
},
|
||||
|
||||
@ -159,7 +159,7 @@ Ext.define('PVE.NodeCephFSPanel', {
|
||||
return;
|
||||
}
|
||||
vm.set('cephfsConfigured', true);
|
||||
}
|
||||
},
|
||||
},
|
||||
tbar: [
|
||||
{
|
||||
@ -168,30 +168,30 @@ Ext.define('PVE.NodeCephFSPanel', {
|
||||
handler: 'onCreate',
|
||||
bind: {
|
||||
// only one CephFS per Ceph cluster makes sense for now
|
||||
disabled: '{!canCreateFS}'
|
||||
}
|
||||
}
|
||||
disabled: '{!canCreateFS}',
|
||||
},
|
||||
},
|
||||
],
|
||||
columns: [
|
||||
{
|
||||
header: gettext('Name'),
|
||||
flex: 1,
|
||||
dataIndex: 'name'
|
||||
dataIndex: 'name',
|
||||
},
|
||||
{
|
||||
header: 'Data Pool',
|
||||
flex: 1,
|
||||
dataIndex: 'data_pool'
|
||||
dataIndex: 'data_pool',
|
||||
},
|
||||
{
|
||||
header: 'Metadata Pool',
|
||||
flex: 1,
|
||||
dataIndex: 'metadata_pool'
|
||||
}
|
||||
dataIndex: 'metadata_pool',
|
||||
},
|
||||
],
|
||||
cbind: {
|
||||
nodename: '{nodename}'
|
||||
}
|
||||
nodename: '{nodename}',
|
||||
},
|
||||
},
|
||||
{
|
||||
xtype: 'pveNodeCephServiceList',
|
||||
@ -207,18 +207,18 @@ Ext.define('PVE.NodeCephFSPanel', {
|
||||
vm.set('mdsCount', records.length);
|
||||
},
|
||||
cbind: {
|
||||
nodename: '{nodename}'
|
||||
}
|
||||
}
|
||||
]
|
||||
nodename: '{nodename}',
|
||||
},
|
||||
},
|
||||
],
|
||||
}, function() {
|
||||
Ext.define('pve-ceph-fs', {
|
||||
extend: 'Ext.data.Model',
|
||||
fields: [ 'name', 'data_pool', 'metadata_pool' ],
|
||||
proxy: {
|
||||
type: 'proxmox',
|
||||
url: "/api2/json/nodes/localhost/ceph/fs"
|
||||
url: "/api2/json/nodes/localhost/ceph/fs",
|
||||
},
|
||||
idProperty: 'name'
|
||||
idProperty: 'name',
|
||||
});
|
||||
});
|
||||
|
@ -12,10 +12,10 @@ Ext.define('PVE.ceph.Log', {
|
||||
me.mon(win, 'cephInstallWindowClosed', function(){
|
||||
me.loadTask.delay(200);
|
||||
});
|
||||
}
|
||||
},
|
||||
);
|
||||
if (!windowShow) {
|
||||
Proxmox.Utils.setErrorMask(me, msg);
|
||||
}
|
||||
}
|
||||
},
|
||||
});
|
||||
|
@ -9,12 +9,12 @@ Ext.define('PVE.node.CephMonMgrList', {
|
||||
defaults: {
|
||||
border: false,
|
||||
onlineHelp: 'chapter_pveceph',
|
||||
flex: 1
|
||||
flex: 1,
|
||||
},
|
||||
|
||||
layout: {
|
||||
type: 'vbox',
|
||||
align: 'stretch'
|
||||
align: 'stretch',
|
||||
},
|
||||
|
||||
items: [
|
||||
@ -28,19 +28,19 @@ Ext.define('PVE.node.CephMonMgrList', {
|
||||
width: 70,
|
||||
sortable: true,
|
||||
renderer: Proxmox.Utils.format_boolean,
|
||||
dataIndex: 'quorum'
|
||||
}
|
||||
dataIndex: 'quorum',
|
||||
},
|
||||
],
|
||||
stateId: 'grid-ceph-monitor',
|
||||
showCephInstallMask: true,
|
||||
title: gettext('Monitor')
|
||||
title: gettext('Monitor'),
|
||||
},
|
||||
{
|
||||
xtype: 'pveNodeCephServiceList',
|
||||
type: 'mgr',
|
||||
stateId: 'grid-ceph-manager',
|
||||
cbind: { pveSelNode: '{pveSelNode}' },
|
||||
title: gettext('Manager')
|
||||
}
|
||||
]
|
||||
title: gettext('Manager'),
|
||||
},
|
||||
],
|
||||
});
|
||||
|
@ -13,7 +13,7 @@ Ext.define('PVE.CephCreatePool', {
|
||||
xtype: 'textfield',
|
||||
fieldLabel: gettext('Name'),
|
||||
name: 'name',
|
||||
allowBlank: false
|
||||
allowBlank: false,
|
||||
},
|
||||
{
|
||||
xtype: 'proxmoxintegerfield',
|
||||
@ -22,7 +22,7 @@ Ext.define('PVE.CephCreatePool', {
|
||||
value: 3,
|
||||
minValue: 1,
|
||||
maxValue: 7,
|
||||
allowBlank: false
|
||||
allowBlank: false,
|
||||
},
|
||||
{
|
||||
xtype: 'proxmoxintegerfield',
|
||||
@ -31,13 +31,13 @@ Ext.define('PVE.CephCreatePool', {
|
||||
value: 2,
|
||||
minValue: 1,
|
||||
maxValue: 7,
|
||||
allowBlank: false
|
||||
allowBlank: false,
|
||||
},
|
||||
{
|
||||
xtype: 'pveCephRuleSelector',
|
||||
fieldLabel: 'Crush Rule', // do not localize
|
||||
name: 'crush_rule',
|
||||
allowBlank: false
|
||||
allowBlank: false,
|
||||
},
|
||||
{
|
||||
xtype: 'proxmoxKVComboBox',
|
||||
@ -71,7 +71,7 @@ Ext.define('PVE.CephCreatePool', {
|
||||
tag: 'div',
|
||||
'data-qtip': gettext('Add the new pool to the cluster storage configuration.'),
|
||||
},
|
||||
}
|
||||
},
|
||||
],
|
||||
initComponent : function() {
|
||||
var me = this;
|
||||
@ -83,12 +83,12 @@ Ext.define('PVE.CephCreatePool', {
|
||||
Ext.apply(me, {
|
||||
url: "/nodes/" + me.nodename + "/ceph/pools",
|
||||
defaults: {
|
||||
nodename: me.nodename
|
||||
}
|
||||
nodename: me.nodename,
|
||||
},
|
||||
});
|
||||
|
||||
me.callParent();
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
Ext.define('PVE.node.CephPoolList', {
|
||||
@ -108,7 +108,7 @@ Ext.define('PVE.node.CephPoolList', {
|
||||
header: gettext('Name'),
|
||||
width: 120,
|
||||
sortable: true,
|
||||
dataIndex: 'pool_name'
|
||||
dataIndex: 'pool_name',
|
||||
},
|
||||
{
|
||||
header: gettext('Size') + '/min',
|
||||
@ -117,7 +117,7 @@ Ext.define('PVE.node.CephPoolList', {
|
||||
renderer: function(v, meta, rec) {
|
||||
return v + '/' + rec.data.min_size;
|
||||
},
|
||||
dataIndex: 'size'
|
||||
dataIndex: 'size',
|
||||
},
|
||||
{
|
||||
text: 'Placement Groups',
|
||||
@ -126,15 +126,15 @@ Ext.define('PVE.node.CephPoolList', {
|
||||
text: '# of PGs', // pg_num',
|
||||
width: 150,
|
||||
align: 'right',
|
||||
dataIndex: 'pg_num'
|
||||
dataIndex: 'pg_num',
|
||||
},
|
||||
{
|
||||
text: gettext('Autoscale'),
|
||||
width: 140,
|
||||
align: 'right',
|
||||
dataIndex: 'pg_autoscale_mode'
|
||||
dataIndex: 'pg_autoscale_mode',
|
||||
},
|
||||
]
|
||||
],
|
||||
},
|
||||
{
|
||||
text: 'CRUSH Rule',
|
||||
@ -143,14 +143,14 @@ Ext.define('PVE.node.CephPoolList', {
|
||||
text: 'ID',
|
||||
align: 'right',
|
||||
width: 50,
|
||||
dataIndex: 'crush_rule'
|
||||
dataIndex: 'crush_rule',
|
||||
},
|
||||
{
|
||||
text: gettext('Name'),
|
||||
width: 150,
|
||||
dataIndex: 'crush_rule_name',
|
||||
},
|
||||
]
|
||||
],
|
||||
},
|
||||
{
|
||||
text: gettext('Used'),
|
||||
@ -173,10 +173,10 @@ Ext.define('PVE.node.CephPoolList', {
|
||||
align: 'right',
|
||||
dataIndex: 'bytes_used',
|
||||
summaryType: 'sum',
|
||||
summaryRenderer: PVE.Utils.render_size
|
||||
}
|
||||
]
|
||||
}
|
||||
summaryRenderer: PVE.Utils.render_size,
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
initComponent: function() {
|
||||
var me = this;
|
||||
@ -194,8 +194,8 @@ Ext.define('PVE.node.CephPoolList', {
|
||||
model: 'ceph-pool-list',
|
||||
proxy: {
|
||||
type: 'proxmox',
|
||||
url: "/api2/json/nodes/" + nodename + "/ceph/pools"
|
||||
}
|
||||
url: "/api2/json/nodes/" + nodename + "/ceph/pools",
|
||||
},
|
||||
});
|
||||
|
||||
var store = Ext.create('Proxmox.data.DiffStore', { rstore: rstore });
|
||||
@ -208,7 +208,7 @@ Ext.define('PVE.node.CephPoolList', {
|
||||
me.mon(win, 'cephInstallWindowClosed', function(){
|
||||
me.store.rstore.startUpdate();
|
||||
});
|
||||
}
|
||||
},
|
||||
);
|
||||
});
|
||||
|
||||
@ -216,13 +216,13 @@ Ext.define('PVE.node.CephPoolList', {
|
||||
text: gettext('Create'),
|
||||
handler: function() {
|
||||
var win = Ext.create('PVE.CephCreatePool', {
|
||||
nodename: nodename
|
||||
nodename: nodename,
|
||||
});
|
||||
win.show();
|
||||
win.on('destroy', function() {
|
||||
rstore.load();
|
||||
});
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
var destroy_btn = Ext.create('Proxmox.button.Button', {
|
||||
@ -242,14 +242,14 @@ Ext.define('PVE.node.CephPoolList', {
|
||||
showProgress: true,
|
||||
url: base_url,
|
||||
params: {
|
||||
remove_storages: 1
|
||||
remove_storages: 1,
|
||||
},
|
||||
item: { type: 'CephPool', id: rec.data.pool_name }
|
||||
item: { type: 'CephPool', id: rec.data.pool_name },
|
||||
}).show();
|
||||
win.on('destroy', function() {
|
||||
rstore.load();
|
||||
});
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
Ext.apply(me, {
|
||||
@ -259,11 +259,11 @@ Ext.define('PVE.node.CephPoolList', {
|
||||
listeners: {
|
||||
activate: () => rstore.startUpdate(),
|
||||
destroy: () => rstore.stopUpdate(),
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
me.callParent();
|
||||
}
|
||||
},
|
||||
}, function() {
|
||||
|
||||
Ext.define('ceph-pool-list', {
|
||||
@ -276,9 +276,9 @@ Ext.define('PVE.node.CephPoolList', {
|
||||
{ name: 'bytes_used', type: 'integer'},
|
||||
{ name: 'percent_used', type: 'number'},
|
||||
{ name: 'crush_rule', type: 'integer'},
|
||||
{ name: 'crush_rule_name', type: 'string'}
|
||||
{ name: 'crush_rule_name', type: 'string'},
|
||||
],
|
||||
idProperty: 'pool_name'
|
||||
idProperty: 'pool_name',
|
||||
});
|
||||
});
|
||||
|
||||
@ -304,12 +304,12 @@ Ext.define('PVE.form.CephRuleSelector', {
|
||||
sorters: 'name',
|
||||
proxy: {
|
||||
type: 'proxmox',
|
||||
url: '/api2/json/nodes/' + me.nodename + '/ceph/rules'
|
||||
}
|
||||
url: '/api2/json/nodes/' + me.nodename + '/ceph/rules',
|
||||
},
|
||||
});
|
||||
|
||||
Ext.apply(me, {
|
||||
store: store
|
||||
store: store,
|
||||
});
|
||||
|
||||
me.callParent();
|
||||
@ -319,8 +319,8 @@ Ext.define('PVE.form.CephRuleSelector', {
|
||||
if (success && rec.length > 0) {
|
||||
me.select(rec[0]);
|
||||
}
|
||||
}
|
||||
},
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
});
|
||||
|
@ -25,9 +25,9 @@ Ext.define('PVE.CephCreateService', {
|
||||
change: function(f, value) {
|
||||
var me = this.up('pveCephCreateService');
|
||||
me.setNode(value);
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
},
|
||||
],
|
||||
|
||||
initComponent : function() {
|
||||
@ -44,7 +44,7 @@ Ext.define('PVE.CephCreateService', {
|
||||
me.setNode(me.nodename);
|
||||
|
||||
me.callParent();
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
Ext.define('PVE.node.CephServiceList', {
|
||||
@ -126,8 +126,8 @@ Ext.define('PVE.node.CephServiceList', {
|
||||
storeid: 'ceph-versions-' + view.type + '-list' + view.nodename,
|
||||
proxy: {
|
||||
type: 'proxmox',
|
||||
url: "/api2/json/cluster/ceph/metadata?scope=versions"
|
||||
}
|
||||
url: "/api2/json/cluster/ceph/metadata?scope=versions",
|
||||
},
|
||||
});
|
||||
|
||||
view.versionsstore.on('load', this.getMaxVersions, this);
|
||||
@ -140,13 +140,13 @@ Ext.define('PVE.node.CephServiceList', {
|
||||
model: 'ceph-service-list',
|
||||
proxy: {
|
||||
type: 'proxmox',
|
||||
url: "/api2/json/nodes/" + view.nodename + "/ceph/" + view.type
|
||||
}
|
||||
url: "/api2/json/nodes/" + view.nodename + "/ceph/" + view.type,
|
||||
},
|
||||
});
|
||||
|
||||
view.setStore(Ext.create('Proxmox.data.DiffStore', {
|
||||
rstore: view.rstore,
|
||||
sorters: [{ property: 'name' }]
|
||||
sorters: [{ property: 'name' }],
|
||||
}));
|
||||
|
||||
if (view.storeLoadCallback) {
|
||||
@ -163,7 +163,7 @@ Ext.define('PVE.node.CephServiceList', {
|
||||
me.mon(win, 'cephInstallWindowClosed', function(){
|
||||
view.rstore.startUpdate();
|
||||
});
|
||||
}
|
||||
},
|
||||
);
|
||||
});
|
||||
}
|
||||
@ -185,13 +185,13 @@ Ext.define('PVE.node.CephServiceList', {
|
||||
upid: upid,
|
||||
taskDone: function() {
|
||||
view.rstore.load();
|
||||
}
|
||||
},
|
||||
});
|
||||
win.show();
|
||||
},
|
||||
failure: function(response, opts) {
|
||||
Ext.Msg.alert(gettext('Error'), response.htmlStatus);
|
||||
}
|
||||
},
|
||||
});
|
||||
},
|
||||
onChangeService: function(btn) {
|
||||
@ -216,8 +216,8 @@ Ext.define('PVE.node.CephServiceList', {
|
||||
items: [{
|
||||
xtype: 'proxmoxLogView',
|
||||
url: url,
|
||||
log_select_timespan: 1
|
||||
}]
|
||||
log_select_timespan: 1,
|
||||
}],
|
||||
});
|
||||
win.show();
|
||||
},
|
||||
@ -231,9 +231,9 @@ Ext.define('PVE.node.CephServiceList', {
|
||||
type: view.type,
|
||||
taskDone: function() {
|
||||
view.rstore.load();
|
||||
}
|
||||
},
|
||||
});
|
||||
}
|
||||
},
|
||||
},
|
||||
|
||||
tbar: [
|
||||
@ -247,7 +247,7 @@ Ext.define('PVE.node.CephServiceList', {
|
||||
return rec.data.state === 'stopped' ||
|
||||
rec.data.state === 'unknown';
|
||||
},
|
||||
handler: 'onChangeService'
|
||||
handler: 'onChangeService',
|
||||
},
|
||||
{
|
||||
xtype: 'proxmoxButton',
|
||||
@ -258,7 +258,7 @@ Ext.define('PVE.node.CephServiceList', {
|
||||
return rec.data.state !== 'stopped';
|
||||
},
|
||||
disabled: true,
|
||||
handler: 'onChangeService'
|
||||
handler: 'onChangeService',
|
||||
},
|
||||
{
|
||||
xtype: 'proxmoxButton',
|
||||
@ -269,13 +269,13 @@ Ext.define('PVE.node.CephServiceList', {
|
||||
enableFn: function(rec) {
|
||||
return rec.data.state !== 'stopped';
|
||||
},
|
||||
handler: 'onChangeService'
|
||||
handler: 'onChangeService',
|
||||
},
|
||||
'-',
|
||||
{
|
||||
text: gettext('Create'),
|
||||
reference: 'createButton',
|
||||
handler: 'onCreate'
|
||||
handler: 'onCreate',
|
||||
},
|
||||
{
|
||||
text: gettext('Destroy'),
|
||||
@ -299,18 +299,18 @@ Ext.define('PVE.node.CephServiceList', {
|
||||
upid: upid,
|
||||
taskDone: function() {
|
||||
view.rstore.load();
|
||||
}
|
||||
},
|
||||
});
|
||||
win.show();
|
||||
}
|
||||
},
|
||||
},
|
||||
'-',
|
||||
{
|
||||
xtype: 'proxmoxButton',
|
||||
text: gettext('Syslog'),
|
||||
disabled: true,
|
||||
handler: 'showSyslog'
|
||||
}
|
||||
handler: 'showSyslog',
|
||||
},
|
||||
],
|
||||
|
||||
columns: [
|
||||
@ -321,7 +321,7 @@ Ext.define('PVE.node.CephServiceList', {
|
||||
renderer: function(v) {
|
||||
return this.type + '.' + v;
|
||||
},
|
||||
dataIndex: 'name'
|
||||
dataIndex: 'name',
|
||||
},
|
||||
{
|
||||
header: gettext('Host'),
|
||||
@ -330,13 +330,13 @@ Ext.define('PVE.node.CephServiceList', {
|
||||
renderer: function(v) {
|
||||
return v || Proxmox.Utils.unknownText;
|
||||
},
|
||||
dataIndex: 'host'
|
||||
dataIndex: 'host',
|
||||
},
|
||||
{
|
||||
header: gettext('Status'),
|
||||
flex: 1,
|
||||
sortable: false,
|
||||
dataIndex: 'state'
|
||||
dataIndex: 'state',
|
||||
},
|
||||
{
|
||||
header: gettext('Address'),
|
||||
@ -345,7 +345,7 @@ Ext.define('PVE.node.CephServiceList', {
|
||||
renderer: function(v) {
|
||||
return v || Proxmox.Utils.unknownText;
|
||||
},
|
||||
dataIndex: 'addr'
|
||||
dataIndex: 'addr',
|
||||
},
|
||||
{
|
||||
header: gettext('Version'),
|
||||
@ -353,7 +353,7 @@ Ext.define('PVE.node.CephServiceList', {
|
||||
sortable: true,
|
||||
dataIndex: 'version',
|
||||
renderer: 'render_version',
|
||||
}
|
||||
},
|
||||
],
|
||||
|
||||
initComponent: function() {
|
||||
@ -364,7 +364,7 @@ Ext.define('PVE.node.CephServiceList', {
|
||||
}
|
||||
|
||||
me.callParent();
|
||||
}
|
||||
},
|
||||
|
||||
}, function() {
|
||||
|
||||
@ -374,8 +374,8 @@ Ext.define('PVE.node.CephServiceList', {
|
||||
'ceph_version', 'ceph_version_short',
|
||||
{ type: 'string', name: 'version', calculate: function(data) {
|
||||
return PVE.Utils.parse_ceph_version(data);
|
||||
} }
|
||||
} },
|
||||
],
|
||||
idProperty: 'name'
|
||||
idProperty: 'name',
|
||||
});
|
||||
});
|
||||
|
@ -4,15 +4,15 @@ Ext.define('PVE.ceph.Services', {
|
||||
|
||||
layout: {
|
||||
type: 'hbox',
|
||||
align: 'stretch'
|
||||
align: 'stretch',
|
||||
},
|
||||
|
||||
bodyPadding: '0 5 20',
|
||||
defaults: {
|
||||
xtype: 'box',
|
||||
style: {
|
||||
'text-align':'center'
|
||||
}
|
||||
'text-align':'center',
|
||||
},
|
||||
},
|
||||
|
||||
items: [
|
||||
@ -20,20 +20,20 @@ Ext.define('PVE.ceph.Services', {
|
||||
flex: 1,
|
||||
xtype: 'pveCephServiceList',
|
||||
itemId: 'mons',
|
||||
title: gettext('Monitors')
|
||||
title: gettext('Monitors'),
|
||||
},
|
||||
{
|
||||
flex: 1,
|
||||
xtype: 'pveCephServiceList',
|
||||
itemId: 'mgrs',
|
||||
title: gettext('Managers')
|
||||
title: gettext('Managers'),
|
||||
},
|
||||
{
|
||||
flex: 1,
|
||||
xtype: 'pveCephServiceList',
|
||||
itemId: 'mdss',
|
||||
title: gettext('Meta Data Servers')
|
||||
}
|
||||
title: gettext('Meta Data Servers'),
|
||||
},
|
||||
],
|
||||
|
||||
updateAll: function(metadata, status) {
|
||||
@ -45,7 +45,7 @@ Ext.define('PVE.ceph.Services', {
|
||||
'HEALTH_WARN': 2,
|
||||
'HEALTH_UPGRADE': 3,
|
||||
'HEALTH_OLD': 4,
|
||||
'HEALTH_OK': 5
|
||||
'HEALTH_OK': 5,
|
||||
};
|
||||
var healthmap = [
|
||||
'HEALTH_UNKNOWN',
|
||||
@ -53,7 +53,7 @@ Ext.define('PVE.ceph.Services', {
|
||||
'HEALTH_WARN',
|
||||
'HEALTH_UPGRADE',
|
||||
'HEALTH_OLD',
|
||||
'HEALTH_OK'
|
||||
'HEALTH_OK',
|
||||
];
|
||||
var reduceFn = function(first, second) {
|
||||
return first + '\n' + second.message;
|
||||
@ -87,14 +87,14 @@ Ext.define('PVE.ceph.Services', {
|
||||
if (!monmessages[monid]) {
|
||||
monmessages[monid] = {
|
||||
worstSeverity: healthstates.HEALTH_OK,
|
||||
messages: []
|
||||
messages: [],
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
monmessages[monid].messages.push(
|
||||
PVE.Utils.get_ceph_icon_html(value.severity, true) +
|
||||
Ext.Array.reduce(value.detail, reduceFn, '')
|
||||
Ext.Array.reduce(value.detail, reduceFn, ''),
|
||||
);
|
||||
if (healthstates[value.severity] < monmessages[monid].worstSeverity) {
|
||||
monmessages[monid].worstSeverity = healthstates[value.severity];
|
||||
@ -153,7 +153,7 @@ Ext.define('PVE.ceph.Services', {
|
||||
}
|
||||
|
||||
return mds;
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
for (let type of ['mon', 'mgr', 'mds']) {
|
||||
@ -174,12 +174,12 @@ Ext.define('PVE.ceph.Services', {
|
||||
host: host,
|
||||
version: PVE.Utils.parse_ceph_version(metadata[type][id]),
|
||||
service: metadata[type][id].service,
|
||||
addr: metadata[type][id].addr || metadata[type][id].addrs || Proxmox.Utils.unknownText
|
||||
addr: metadata[type][id].addr || metadata[type][id].addrs || Proxmox.Utils.unknownText,
|
||||
};
|
||||
|
||||
result.statuses = [
|
||||
gettext('Host') + ": " + result.host,
|
||||
gettext('Address') + ": " + result.addr
|
||||
gettext('Address') + ": " + result.addr,
|
||||
];
|
||||
|
||||
if (checks[type]) {
|
||||
@ -189,7 +189,7 @@ Ext.define('PVE.ceph.Services', {
|
||||
if (result.service && !result.version) {
|
||||
result.messages.push(
|
||||
PVE.Utils.get_ceph_icon_html('HEALTH_UNKNOWN', true) +
|
||||
gettext('Stopped')
|
||||
gettext('Stopped'),
|
||||
);
|
||||
result.health = healthstates.HEALTH_UNKNOWN;
|
||||
}
|
||||
@ -208,7 +208,7 @@ Ext.define('PVE.ceph.Services', {
|
||||
}
|
||||
result.messages.push(
|
||||
PVE.Utils.get_ceph_icon_html('HEALTH_OLD', true) +
|
||||
gettext('A newer version was installed but old version still running, please restart')
|
||||
gettext('A newer version was installed but old version still running, please restart'),
|
||||
);
|
||||
} else {
|
||||
if (result.health > healthstates.HEALTH_UPGRADE) {
|
||||
@ -216,7 +216,7 @@ Ext.define('PVE.ceph.Services', {
|
||||
}
|
||||
result.messages.push(
|
||||
PVE.Utils.get_ceph_icon_html('HEALTH_UPGRADE', true) +
|
||||
gettext('Other cluster members use a newer version of this service, please upgrade and restart')
|
||||
gettext('Other cluster members use a newer version of this service, please upgrade and restart'),
|
||||
);
|
||||
}
|
||||
}
|
||||
@ -234,7 +234,7 @@ Ext.define('PVE.ceph.Services', {
|
||||
me.getComponent('mons').updateAll(Object.values(me.mon));
|
||||
me.getComponent('mgrs').updateAll(Object.values(me.mgr));
|
||||
me.getComponent('mdss').updateAll(Object.values(me.mds));
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
Ext.define('PVE.ceph.ServiceList', {
|
||||
@ -242,23 +242,23 @@ Ext.define('PVE.ceph.ServiceList', {
|
||||
xtype: 'pveCephServiceList',
|
||||
|
||||
style: {
|
||||
'text-align':'center'
|
||||
'text-align':'center',
|
||||
},
|
||||
defaults: {
|
||||
xtype: 'box',
|
||||
style: {
|
||||
'text-align':'center'
|
||||
}
|
||||
'text-align':'center',
|
||||
},
|
||||
},
|
||||
|
||||
items: [
|
||||
{
|
||||
itemId: 'title',
|
||||
data: {
|
||||
title: ''
|
||||
title: '',
|
||||
},
|
||||
tpl: '<h3>{title}</h3>'
|
||||
}
|
||||
tpl: '<h3>{title}</h3>',
|
||||
},
|
||||
],
|
||||
|
||||
updateAll: function(list) {
|
||||
@ -279,7 +279,7 @@ Ext.define('PVE.ceph.ServiceList', {
|
||||
// we can add it at the service+1 position (because of the title)
|
||||
service = me.insert(i+1, {
|
||||
xtype: 'pveCephServiceWidget',
|
||||
itemId: list[i].id
|
||||
itemId: list[i].id,
|
||||
});
|
||||
if (!me.ids) {
|
||||
me.ids = [];
|
||||
@ -302,9 +302,9 @@ Ext.define('PVE.ceph.ServiceList', {
|
||||
var me = this;
|
||||
me.callParent();
|
||||
me.getComponent('title').update({
|
||||
title: me.title
|
||||
title: me.title,
|
||||
});
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
Ext.define('PVE.ceph.ServiceWidget', {
|
||||
@ -316,12 +316,12 @@ Ext.define('PVE.ceph.ServiceWidget', {
|
||||
title: '0',
|
||||
health: 'HEALTH_ERR',
|
||||
text: '',
|
||||
iconCls: PVE.Utils.get_health_icon()
|
||||
iconCls: PVE.Utils.get_health_icon(),
|
||||
},
|
||||
|
||||
tpl: [
|
||||
'{title}: ',
|
||||
'<i class="fa fa-fw {iconCls}"></i>'
|
||||
'<i class="fa fa-fw {iconCls}"></i>',
|
||||
],
|
||||
|
||||
updateService: function(title, text, health) {
|
||||
@ -331,7 +331,7 @@ Ext.define('PVE.ceph.ServiceWidget', {
|
||||
health: health,
|
||||
text: text,
|
||||
title: title,
|
||||
iconCls: PVE.Utils.get_health_icon(PVE.Utils.map_ceph_health[health])
|
||||
iconCls: PVE.Utils.get_health_icon(PVE.Utils.map_ceph_health[health]),
|
||||
}));
|
||||
|
||||
if (me.tooltip) {
|
||||
@ -360,11 +360,11 @@ Ext.define('PVE.ceph.ServiceWidget', {
|
||||
trackMouse: true,
|
||||
dismissDelay: 0,
|
||||
renderTo: Ext.getBody(),
|
||||
html: me.data.text
|
||||
html: me.data.text,
|
||||
});
|
||||
}
|
||||
me.tooltip.show();
|
||||
}
|
||||
},
|
||||
},
|
||||
mouseleave: {
|
||||
element: 'el',
|
||||
@ -374,7 +374,7 @@ Ext.define('PVE.ceph.ServiceWidget', {
|
||||
me.tooltip.destroy();
|
||||
delete me.tooltip;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
|
@ -9,11 +9,11 @@ Ext.define('PVE.node.CephStatus', {
|
||||
bodyPadding: 5,
|
||||
|
||||
layout: {
|
||||
type: 'column'
|
||||
type: 'column',
|
||||
},
|
||||
|
||||
defaults: {
|
||||
padding: 5
|
||||
padding: 5,
|
||||
},
|
||||
|
||||
items: [
|
||||
@ -25,16 +25,16 @@ Ext.define('PVE.node.CephStatus', {
|
||||
responsiveConfig: {
|
||||
'width < 1900': {
|
||||
minHeight: 230,
|
||||
columnWidth: 1
|
||||
columnWidth: 1,
|
||||
},
|
||||
'width >= 1900': {
|
||||
minHeight: 500,
|
||||
columnWidth: 0.5
|
||||
}
|
||||
columnWidth: 0.5,
|
||||
},
|
||||
},
|
||||
layout: {
|
||||
type: 'hbox',
|
||||
align: 'stretch'
|
||||
align: 'stretch',
|
||||
},
|
||||
items: [
|
||||
{
|
||||
@ -49,7 +49,7 @@ Ext.define('PVE.node.CephStatus', {
|
||||
flex: 1,
|
||||
itemId: 'overallhealth',
|
||||
xtype: 'pveHealthWidget',
|
||||
title: gettext('Status')
|
||||
title: gettext('Status'),
|
||||
},
|
||||
{
|
||||
itemId: 'versioninfo',
|
||||
@ -64,7 +64,7 @@ Ext.define('PVE.node.CephStatus', {
|
||||
style: {
|
||||
'text-align': 'center',
|
||||
},
|
||||
}
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
@ -93,16 +93,16 @@ Ext.define('PVE.node.CephStatus', {
|
||||
return '<i class="fa fa-fw ' + classes + '"></i>';
|
||||
},
|
||||
sorter: {
|
||||
sorterFn: function(a,b) {
|
||||
sorterFn: function(a, b) {
|
||||
var healthArr = ['HEALTH_ERR', 'HEALTH_WARN', 'HEALTH_OK'];
|
||||
return healthArr.indexOf(b.data.severity) - healthArr.indexOf(a.data.severity);
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
dataIndex: 'summary',
|
||||
header: gettext('Summary'),
|
||||
flex: 1
|
||||
flex: 1,
|
||||
},
|
||||
{
|
||||
xtype: 'actioncolumn',
|
||||
@ -120,7 +120,7 @@ Ext.define('PVE.node.CephStatus', {
|
||||
width: 650,
|
||||
height: 400,
|
||||
layout: {
|
||||
type: 'fit'
|
||||
type: 'fit',
|
||||
},
|
||||
items: [{
|
||||
scrollable: true,
|
||||
@ -128,18 +128,18 @@ Ext.define('PVE.node.CephStatus', {
|
||||
xtype: 'box',
|
||||
html: [
|
||||
'<span>' + Ext.htmlEncode(record.data.summary) + '</span>',
|
||||
'<pre>' + Ext.htmlEncode(record.data.detail) + '</pre>'
|
||||
]
|
||||
}]
|
||||
'<pre>' + Ext.htmlEncode(record.data.detail) + '</pre>',
|
||||
],
|
||||
}],
|
||||
});
|
||||
win.show();
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
xtype: 'pveCephStatusDetail',
|
||||
@ -148,14 +148,14 @@ Ext.define('PVE.node.CephStatus', {
|
||||
responsiveConfig: {
|
||||
'width < 1900': {
|
||||
columnWidth: 1,
|
||||
minHeight: 250
|
||||
minHeight: 250,
|
||||
},
|
||||
'width >= 1900': {
|
||||
columnWidth: 0.5,
|
||||
minHeight: 300
|
||||
}
|
||||
minHeight: 300,
|
||||
},
|
||||
},
|
||||
title: gettext('Status')
|
||||
title: gettext('Status'),
|
||||
},
|
||||
{
|
||||
title: gettext('Services'),
|
||||
@ -164,18 +164,18 @@ Ext.define('PVE.node.CephStatus', {
|
||||
plugins: 'responsive',
|
||||
layout: {
|
||||
type: 'hbox',
|
||||
align: 'stretch'
|
||||
align: 'stretch',
|
||||
},
|
||||
responsiveConfig: {
|
||||
'width < 1900': {
|
||||
columnWidth: 1,
|
||||
minHeight: 200
|
||||
minHeight: 200,
|
||||
},
|
||||
'width >= 1900': {
|
||||
columnWidth: 0.5,
|
||||
minHeight: 200
|
||||
}
|
||||
}
|
||||
minHeight: 200,
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
xtype: 'panel',
|
||||
@ -184,7 +184,7 @@ Ext.define('PVE.node.CephStatus', {
|
||||
bodyPadding: 5,
|
||||
layout: {
|
||||
type: 'hbox',
|
||||
align: 'center'
|
||||
align: 'center',
|
||||
},
|
||||
items: [
|
||||
{
|
||||
@ -194,7 +194,7 @@ Ext.define('PVE.node.CephStatus', {
|
||||
{
|
||||
xtype: 'proxmoxGauge',
|
||||
itemId: 'space',
|
||||
title: gettext('Usage')
|
||||
title: gettext('Usage'),
|
||||
},
|
||||
{
|
||||
flex: 1,
|
||||
@ -217,46 +217,46 @@ Ext.define('PVE.node.CephStatus', {
|
||||
xtype: 'progressbar',
|
||||
itemId: 'recoveryprogress',
|
||||
},
|
||||
]
|
||||
],
|
||||
},
|
||||
]
|
||||
],
|
||||
},
|
||||
{
|
||||
flex: 2,
|
||||
xtype: 'container',
|
||||
defaults: {
|
||||
padding: 0,
|
||||
height: 100
|
||||
height: 100,
|
||||
},
|
||||
items: [
|
||||
{
|
||||
itemId: 'reads',
|
||||
xtype: 'pveRunningChart',
|
||||
title: gettext('Reads'),
|
||||
renderer: PVE.Utils.render_bandwidth
|
||||
renderer: PVE.Utils.render_bandwidth,
|
||||
},
|
||||
{
|
||||
itemId: 'writes',
|
||||
xtype: 'pveRunningChart',
|
||||
title: gettext('Writes'),
|
||||
renderer: PVE.Utils.render_bandwidth
|
||||
renderer: PVE.Utils.render_bandwidth,
|
||||
},
|
||||
{
|
||||
itemId: 'readiops',
|
||||
xtype: 'pveRunningChart',
|
||||
title: 'IOPS: ' + gettext('Reads'),
|
||||
renderer: Ext.util.Format.numberRenderer('0,000')
|
||||
renderer: Ext.util.Format.numberRenderer('0,000'),
|
||||
},
|
||||
{
|
||||
itemId: 'writeiops',
|
||||
xtype: 'pveRunningChart',
|
||||
title: 'IOPS: ' + gettext('Writes'),
|
||||
renderer: Ext.util.Format.numberRenderer('0,000')
|
||||
renderer: Ext.util.Format.numberRenderer('0,000'),
|
||||
},
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
|
||||
generateCheckData: function(health) {
|
||||
@ -274,9 +274,9 @@ Ext.define('PVE.node.CephStatus', {
|
||||
function(first, second) {
|
||||
return first + '\n' + second.message;
|
||||
},
|
||||
''
|
||||
'',
|
||||
),
|
||||
severity: checks[key].severity
|
||||
severity: checks[key].severity,
|
||||
});
|
||||
});
|
||||
|
||||
@ -310,7 +310,7 @@ Ext.define('PVE.node.CephStatus', {
|
||||
|
||||
var text = Ext.String.format(gettext('{0} of {1}'),
|
||||
PVE.Utils.render_size(used),
|
||||
PVE.Utils.render_size(total)
|
||||
PVE.Utils.render_size(total),
|
||||
);
|
||||
|
||||
// update the usage widget
|
||||
@ -369,8 +369,8 @@ Ext.define('PVE.node.CephStatus', {
|
||||
interval: 5000,
|
||||
proxy: {
|
||||
type: 'proxmox',
|
||||
url: baseurl + '/status'
|
||||
}
|
||||
url: baseurl + '/status',
|
||||
},
|
||||
});
|
||||
|
||||
me.metadatastore = Ext.create('Proxmox.data.UpdateStore', {
|
||||
@ -378,8 +378,8 @@ Ext.define('PVE.node.CephStatus', {
|
||||
interval: 15*1000,
|
||||
proxy: {
|
||||
type: 'proxmox',
|
||||
url: '/api2/json/cluster/ceph/metadata'
|
||||
}
|
||||
url: '/api2/json/cluster/ceph/metadata',
|
||||
},
|
||||
});
|
||||
|
||||
// save references for the updatefunction
|
||||
@ -397,7 +397,7 @@ Ext.define('PVE.node.CephStatus', {
|
||||
me.mon(win, 'cephInstallWindowClosed', function(){
|
||||
me.store.startUpdate();
|
||||
});
|
||||
}
|
||||
},
|
||||
);
|
||||
});
|
||||
|
||||
@ -431,6 +431,6 @@ Ext.define('PVE.node.CephStatus', {
|
||||
me.on('destroy', me.metadatastore.stopUpdate);
|
||||
me.store.startUpdate();
|
||||
me.metadatastore.startUpdate();
|
||||
}
|
||||
},
|
||||
|
||||
});
|
||||
|
@ -4,15 +4,15 @@ Ext.define('PVE.ceph.StatusDetail', {
|
||||
|
||||
layout: {
|
||||
type: 'hbox',
|
||||
align: 'stretch'
|
||||
align: 'stretch',
|
||||
},
|
||||
|
||||
bodyPadding: '0 5',
|
||||
defaults: {
|
||||
xtype: 'box',
|
||||
style: {
|
||||
'text-align':'center'
|
||||
}
|
||||
'text-align':'center',
|
||||
},
|
||||
},
|
||||
|
||||
items: [{
|
||||
@ -27,7 +27,7 @@ Ext.define('PVE.ceph.StatusDetail', {
|
||||
upout: 0,
|
||||
downin: 0,
|
||||
downout: 0,
|
||||
oldosds: []
|
||||
oldosds: [],
|
||||
},
|
||||
tpl: [
|
||||
'<h3>' + 'OSDs' + '</h3>',
|
||||
@ -68,8 +68,8 @@ Ext.define('PVE.ceph.StatusDetail', {
|
||||
'<div style="clear:both"></div>',
|
||||
'</tpl>',
|
||||
'</div>',
|
||||
'</tpl>'
|
||||
]
|
||||
'</tpl>',
|
||||
],
|
||||
},
|
||||
{
|
||||
flex: 1,
|
||||
@ -83,7 +83,7 @@ Ext.define('PVE.ceph.StatusDetail', {
|
||||
'#CFCFCF',
|
||||
'#21BF4B',
|
||||
'#FFCC00',
|
||||
'#FF6C59'
|
||||
'#FF6C59',
|
||||
],
|
||||
store: { },
|
||||
series: [
|
||||
@ -101,13 +101,13 @@ Ext.define('PVE.ceph.StatusDetail', {
|
||||
state.state_name + ': ' + state.count.toString();
|
||||
});
|
||||
tooltip.setHtml(html);
|
||||
}
|
||||
},
|
||||
},
|
||||
subStyle: {
|
||||
strokeStyle: false
|
||||
}
|
||||
}
|
||||
]
|
||||
strokeStyle: false,
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
flex: 1.6,
|
||||
@ -116,7 +116,7 @@ Ext.define('PVE.ceph.StatusDetail', {
|
||||
maxHeight: 250,
|
||||
scrollable: true,
|
||||
data: {
|
||||
states: []
|
||||
states: [],
|
||||
},
|
||||
tpl: [
|
||||
'<h3>' + 'PGs' + '</h3>',
|
||||
@ -124,8 +124,8 @@ Ext.define('PVE.ceph.StatusDetail', {
|
||||
'<div class="left-aligned"><i class ="fa fa-circle {cls}"></i> {state_name}:</div>',
|
||||
'<div class="right-aligned">{count}</div><br />',
|
||||
'<div style="clear:both"></div>',
|
||||
'</tpl>'
|
||||
]
|
||||
'</tpl>',
|
||||
],
|
||||
}],
|
||||
|
||||
// similar to mgr dashboard
|
||||
@ -163,7 +163,7 @@ Ext.define('PVE.ceph.StatusDetail', {
|
||||
recovery_unfound: 3,
|
||||
snaptrim_error: 3,
|
||||
stale: 3,
|
||||
undersized: 3
|
||||
undersized: 3,
|
||||
},
|
||||
|
||||
statecategories: [
|
||||
@ -171,20 +171,20 @@ Ext.define('PVE.ceph.StatusDetail', {
|
||||
text: gettext('Unknown'),
|
||||
count: 0,
|
||||
states: [],
|
||||
cls: 'faded'
|
||||
cls: 'faded',
|
||||
},
|
||||
{
|
||||
text: gettext('Clean'),
|
||||
cls: 'good'
|
||||
cls: 'good',
|
||||
},
|
||||
{
|
||||
text: gettext('Working'),
|
||||
cls: 'warning'
|
||||
cls: 'warning',
|
||||
},
|
||||
{
|
||||
text: gettext('Error'),
|
||||
cls: 'critical'
|
||||
}
|
||||
cls: 'critical',
|
||||
},
|
||||
],
|
||||
|
||||
updateAll: function(metadata, status) {
|
||||
@ -206,7 +206,7 @@ Ext.define('PVE.ceph.StatusDetail', {
|
||||
if (version != maxversion) {
|
||||
oldosds.push({
|
||||
id: osd.id,
|
||||
version: version
|
||||
version: version,
|
||||
});
|
||||
}
|
||||
});
|
||||
@ -215,7 +215,7 @@ Ext.define('PVE.ceph.StatusDetail', {
|
||||
// update PGs sorted
|
||||
var pgmap = status.pgmap || {};
|
||||
var pgs_by_state = pgmap.pgs_by_state || [];
|
||||
pgs_by_state.sort(function(a,b){
|
||||
pgs_by_state.sort(function(a, b){
|
||||
return (a.state_name < b.state_name)?-1:(a.state_name === b.state_name)?0:1;
|
||||
});
|
||||
|
||||
@ -253,7 +253,7 @@ Ext.define('PVE.ceph.StatusDetail', {
|
||||
if (key === 'OSD_DOWN') {
|
||||
found = value.summary.message.match(downinregex);
|
||||
if (found !== null) {
|
||||
downin_osds = parseInt(found[1],10);
|
||||
downin_osds = parseInt(found[1], 10);
|
||||
}
|
||||
}
|
||||
});
|
||||
@ -278,13 +278,13 @@ Ext.define('PVE.ceph.StatusDetail', {
|
||||
upout: upout_osds,
|
||||
downin: downin_osds,
|
||||
downout: downout_osds,
|
||||
oldosds: oldosds
|
||||
oldosds: oldosds,
|
||||
};
|
||||
var osdcomponent = me.getComponent('osds');
|
||||
osdcomponent.update(Ext.apply(osdcomponent.data, osds));
|
||||
|
||||
me.suspendLayout = false;
|
||||
me.updateLayout();
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
|
@ -15,7 +15,7 @@ Ext.define('PVE.controller.StorageEdit', {
|
||||
maxfiles.reset();
|
||||
}
|
||||
maxfiles.setDisabled(!hasBackups);
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
|
@ -65,14 +65,14 @@ Ext.define('PVE.data.ResourceStore', {
|
||||
renderer: PVE.Utils.render_resource_type,
|
||||
sortable: true,
|
||||
hideable: false,
|
||||
width: 100
|
||||
width: 100,
|
||||
},
|
||||
id: {
|
||||
header: 'ID',
|
||||
type: 'string',
|
||||
hidden: true,
|
||||
sortable: true,
|
||||
width: 80
|
||||
width: 80,
|
||||
},
|
||||
running: {
|
||||
header: gettext('Online'),
|
||||
@ -82,7 +82,7 @@ Ext.define('PVE.data.ResourceStore', {
|
||||
convert: function(value, record) {
|
||||
var info = record.data;
|
||||
return (Ext.isNumeric(info.uptime) && (info.uptime > 0));
|
||||
}
|
||||
},
|
||||
},
|
||||
text: {
|
||||
header: gettext('Description'),
|
||||
@ -110,20 +110,20 @@ Ext.define('PVE.data.ResourceStore', {
|
||||
}
|
||||
|
||||
return text;
|
||||
}
|
||||
},
|
||||
},
|
||||
vmid: {
|
||||
header: 'VMID',
|
||||
type: 'integer',
|
||||
hidden: true,
|
||||
sortable: true,
|
||||
width: 80
|
||||
width: 80,
|
||||
},
|
||||
name: {
|
||||
header: gettext('Name'),
|
||||
hidden: true,
|
||||
sortable: true,
|
||||
type: 'string'
|
||||
type: 'string',
|
||||
},
|
||||
disk: {
|
||||
header: gettext('Disk usage'),
|
||||
@ -131,7 +131,7 @@ Ext.define('PVE.data.ResourceStore', {
|
||||
renderer: PVE.Utils.render_disk_usage,
|
||||
sortable: true,
|
||||
width: 100,
|
||||
hidden: true
|
||||
hidden: true,
|
||||
},
|
||||
diskuse: {
|
||||
header: gettext('Disk usage') + " %",
|
||||
@ -140,7 +140,7 @@ Ext.define('PVE.data.ResourceStore', {
|
||||
renderer: PVE.Utils.render_disk_usage_percent,
|
||||
width: 100,
|
||||
calculate: PVE.Utils.calculate_disk_usage,
|
||||
sortType: 'asFloat'
|
||||
sortType: 'asFloat',
|
||||
},
|
||||
maxdisk: {
|
||||
header: gettext('Disk size'),
|
||||
@ -148,7 +148,7 @@ Ext.define('PVE.data.ResourceStore', {
|
||||
renderer: PVE.Utils.render_size,
|
||||
sortable: true,
|
||||
hidden: true,
|
||||
width: 100
|
||||
width: 100,
|
||||
},
|
||||
mem: {
|
||||
header: gettext('Memory usage'),
|
||||
@ -156,7 +156,7 @@ Ext.define('PVE.data.ResourceStore', {
|
||||
renderer: PVE.Utils.render_mem_usage,
|
||||
sortable: true,
|
||||
hidden: true,
|
||||
width: 100
|
||||
width: 100,
|
||||
},
|
||||
memuse: {
|
||||
header: gettext('Memory usage') + " %",
|
||||
@ -165,7 +165,7 @@ Ext.define('PVE.data.ResourceStore', {
|
||||
calculate: PVE.Utils.calculate_mem_usage,
|
||||
sortType: 'asFloat',
|
||||
sortable: true,
|
||||
width: 100
|
||||
width: 100,
|
||||
},
|
||||
maxmem: {
|
||||
header: gettext('Memory size'),
|
||||
@ -173,21 +173,21 @@ Ext.define('PVE.data.ResourceStore', {
|
||||
renderer: PVE.Utils.render_size,
|
||||
hidden: true,
|
||||
sortable: true,
|
||||
width: 100
|
||||
width: 100,
|
||||
},
|
||||
cpu: {
|
||||
header: gettext('CPU usage'),
|
||||
type: 'float',
|
||||
renderer: PVE.Utils.render_cpu,
|
||||
sortable: true,
|
||||
width: 100
|
||||
width: 100,
|
||||
},
|
||||
maxcpu: {
|
||||
header: gettext('maxcpu'),
|
||||
type: 'integer',
|
||||
hidden: true,
|
||||
sortable: true,
|
||||
width: 60
|
||||
width: 60,
|
||||
},
|
||||
diskread: {
|
||||
header: gettext('Total Disk Read'),
|
||||
@ -195,7 +195,7 @@ Ext.define('PVE.data.ResourceStore', {
|
||||
hidden: true,
|
||||
sortable: true,
|
||||
renderer: Proxmox.Utils.format_size,
|
||||
width: 100
|
||||
width: 100,
|
||||
},
|
||||
diskwrite: {
|
||||
header: gettext('Total Disk Write'),
|
||||
@ -203,7 +203,7 @@ Ext.define('PVE.data.ResourceStore', {
|
||||
hidden: true,
|
||||
sortable: true,
|
||||
renderer: Proxmox.Utils.format_size,
|
||||
width: 100
|
||||
width: 100,
|
||||
},
|
||||
netin: {
|
||||
header: gettext('Total NetIn'),
|
||||
@ -211,7 +211,7 @@ Ext.define('PVE.data.ResourceStore', {
|
||||
hidden: true,
|
||||
sortable: true,
|
||||
renderer: Proxmox.Utils.format_size,
|
||||
width: 100
|
||||
width: 100,
|
||||
},
|
||||
netout: {
|
||||
header: gettext('Total NetOut'),
|
||||
@ -219,64 +219,64 @@ Ext.define('PVE.data.ResourceStore', {
|
||||
hidden: true,
|
||||
sortable: true,
|
||||
renderer: Proxmox.Utils.format_size,
|
||||
width: 100
|
||||
width: 100,
|
||||
},
|
||||
template: {
|
||||
header: gettext('Template'),
|
||||
type: 'integer',
|
||||
hidden: true,
|
||||
sortable: true,
|
||||
width: 60
|
||||
width: 60,
|
||||
},
|
||||
uptime: {
|
||||
header: gettext('Uptime'),
|
||||
type: 'integer',
|
||||
renderer: Proxmox.Utils.render_uptime,
|
||||
sortable: true,
|
||||
width: 110
|
||||
width: 110,
|
||||
},
|
||||
node: {
|
||||
header: gettext('Node'),
|
||||
type: 'string',
|
||||
hidden: true,
|
||||
sortable: true,
|
||||
width: 110
|
||||
width: 110,
|
||||
},
|
||||
storage: {
|
||||
header: gettext('Storage'),
|
||||
type: 'string',
|
||||
hidden: true,
|
||||
sortable: true,
|
||||
width: 110
|
||||
width: 110,
|
||||
},
|
||||
pool: {
|
||||
header: gettext('Pool'),
|
||||
type: 'string',
|
||||
hidden: true,
|
||||
sortable: true,
|
||||
width: 110
|
||||
width: 110,
|
||||
},
|
||||
hastate: {
|
||||
header: gettext('HA State'),
|
||||
type: 'string',
|
||||
defaultValue: 'unmanaged',
|
||||
hidden: true,
|
||||
sortable: true
|
||||
sortable: true,
|
||||
},
|
||||
status: {
|
||||
header: gettext('Status'),
|
||||
type: 'string',
|
||||
hidden: true,
|
||||
sortable: true,
|
||||
width: 110
|
||||
width: 110,
|
||||
},
|
||||
lock: {
|
||||
header: gettext('Lock'),
|
||||
type: 'string',
|
||||
hidden: true,
|
||||
sortable: true,
|
||||
width: 110
|
||||
}
|
||||
width: 110,
|
||||
},
|
||||
};
|
||||
|
||||
var fields = [];
|
||||
@ -304,14 +304,14 @@ Ext.define('PVE.data.ResourceStore', {
|
||||
fields: fields,
|
||||
proxy: {
|
||||
type: 'proxmox',
|
||||
url: '/api2/json/cluster/resources'
|
||||
}
|
||||
url: '/api2/json/cluster/resources',
|
||||
},
|
||||
});
|
||||
|
||||
Ext.define('PVETree', {
|
||||
extend: "Ext.data.Model",
|
||||
fields: fields,
|
||||
proxy: { type: 'memory' }
|
||||
proxy: { type: 'memory' },
|
||||
});
|
||||
|
||||
Ext.apply(config, {
|
||||
@ -325,9 +325,9 @@ Ext.define('PVE.data.ResourceStore', {
|
||||
});
|
||||
return res;
|
||||
},
|
||||
fieldNames: fieldNames
|
||||
fieldNames: fieldNames,
|
||||
});
|
||||
|
||||
me.callParent([config]);
|
||||
}
|
||||
},
|
||||
});
|
||||
|
@ -6,14 +6,14 @@ Ext.define('pve-rrd-node', {
|
||||
// percentage
|
||||
convert: function(value) {
|
||||
return value*100;
|
||||
}
|
||||
},
|
||||
},
|
||||
{
|
||||
name:'iowait',
|
||||
// percentage
|
||||
convert: function(value) {
|
||||
return value*100;
|
||||
}
|
||||
},
|
||||
},
|
||||
'loadavg',
|
||||
'maxcpu',
|
||||
@ -25,8 +25,8 @@ Ext.define('pve-rrd-node', {
|
||||
'rootused',
|
||||
'swaptotal',
|
||||
'swapused',
|
||||
{ type: 'date', dateFormat: 'timestamp', name: 'time' }
|
||||
]
|
||||
{ type: 'date', dateFormat: 'timestamp', name: 'time' },
|
||||
],
|
||||
});
|
||||
|
||||
Ext.define('pve-rrd-guest', {
|
||||
@ -37,7 +37,7 @@ Ext.define('pve-rrd-guest', {
|
||||
// percentage
|
||||
convert: function(value) {
|
||||
return value*100;
|
||||
}
|
||||
},
|
||||
},
|
||||
'maxcpu',
|
||||
'netin',
|
||||
@ -48,8 +48,8 @@ Ext.define('pve-rrd-guest', {
|
||||
'maxdisk',
|
||||
'diskread',
|
||||
'diskwrite',
|
||||
{ type: 'date', dateFormat: 'timestamp', name: 'time' }
|
||||
]
|
||||
{ type: 'date', dateFormat: 'timestamp', name: 'time' },
|
||||
],
|
||||
});
|
||||
|
||||
Ext.define('pve-rrd-storage', {
|
||||
@ -57,6 +57,6 @@ Ext.define('pve-rrd-storage', {
|
||||
fields: [
|
||||
'used',
|
||||
'total',
|
||||
{ type: 'date', dateFormat: 'timestamp', name: 'time' }
|
||||
]
|
||||
{ type: 'date', dateFormat: 'timestamp', name: 'time' },
|
||||
],
|
||||
});
|
||||
|
@ -16,8 +16,8 @@ Ext.define('PVE.dc.ACLAdd', {
|
||||
name: 'path',
|
||||
value: me.path,
|
||||
allowBlank: false,
|
||||
fieldLabel: gettext('Path')
|
||||
}
|
||||
fieldLabel: gettext('Path'),
|
||||
},
|
||||
];
|
||||
|
||||
if (me.aclType === 'group') {
|
||||
@ -25,21 +25,21 @@ Ext.define('PVE.dc.ACLAdd', {
|
||||
items.push({
|
||||
xtype: 'pveGroupSelector',
|
||||
name: 'groups',
|
||||
fieldLabel: gettext('Group')
|
||||
fieldLabel: gettext('Group'),
|
||||
});
|
||||
} else if (me.aclType === 'user') {
|
||||
me.subject = gettext("User Permission");
|
||||
items.push({
|
||||
xtype: 'pveUserSelector',
|
||||
name: 'users',
|
||||
fieldLabel: gettext('User')
|
||||
fieldLabel: gettext('User'),
|
||||
});
|
||||
} else if (me.aclType === 'token') {
|
||||
me.subject = gettext("API Token Permission");
|
||||
items.push({
|
||||
xtype: 'pveTokenSelector',
|
||||
name: 'tokens',
|
||||
fieldLabel: gettext('API Token')
|
||||
fieldLabel: gettext('API Token'),
|
||||
});
|
||||
} else {
|
||||
throw "unknown ACL type";
|
||||
@ -49,7 +49,7 @@ Ext.define('PVE.dc.ACLAdd', {
|
||||
xtype: 'pmxRoleSelector',
|
||||
name: 'roles',
|
||||
value: 'NoAccess',
|
||||
fieldLabel: gettext('Role')
|
||||
fieldLabel: gettext('Role'),
|
||||
});
|
||||
|
||||
if (!me.path) {
|
||||
@ -58,21 +58,21 @@ Ext.define('PVE.dc.ACLAdd', {
|
||||
name: 'propagate',
|
||||
checked: true,
|
||||
uncheckedValue: 0,
|
||||
fieldLabel: gettext('Propagate')
|
||||
fieldLabel: gettext('Propagate'),
|
||||
});
|
||||
}
|
||||
|
||||
var ipanel = Ext.create('Proxmox.panel.InputPanel', {
|
||||
items: items,
|
||||
onlineHelp: 'pveum_permission_management'
|
||||
onlineHelp: 'pveum_permission_management',
|
||||
});
|
||||
|
||||
Ext.apply(me, {
|
||||
items: [ ipanel ]
|
||||
items: [ ipanel ],
|
||||
});
|
||||
|
||||
me.callParent();
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
Ext.define('PVE.dc.ACLView', {
|
||||
@ -91,25 +91,25 @@ Ext.define('PVE.dc.ACLView', {
|
||||
initComponent : function() {
|
||||
var me = this;
|
||||
|
||||
var store = Ext.create('Ext.data.Store',{
|
||||
var store = Ext.create('Ext.data.Store', {
|
||||
model: 'pve-acl',
|
||||
proxy: {
|
||||
type: 'proxmox',
|
||||
url: "/api2/json/access/acl"
|
||||
url: "/api2/json/access/acl",
|
||||
},
|
||||
sorters: {
|
||||
property: 'path',
|
||||
order: 'DESC'
|
||||
}
|
||||
order: 'DESC',
|
||||
},
|
||||
});
|
||||
|
||||
if (me.path) {
|
||||
store.addFilter(Ext.create('Ext.util.Filter',{
|
||||
store.addFilter(Ext.create('Ext.util.Filter', {
|
||||
filterFn: function(item) {
|
||||
if (item.data.path === me.path) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
},
|
||||
}));
|
||||
}
|
||||
|
||||
@ -127,14 +127,14 @@ Ext.define('PVE.dc.ACLView', {
|
||||
flex: 1,
|
||||
sortable: true,
|
||||
renderer: render_ugid,
|
||||
dataIndex: 'ugid'
|
||||
dataIndex: 'ugid',
|
||||
},
|
||||
{
|
||||
header: gettext('Role'),
|
||||
flex: 1,
|
||||
sortable: true,
|
||||
dataIndex: 'roleid'
|
||||
}
|
||||
dataIndex: 'roleid',
|
||||
},
|
||||
];
|
||||
|
||||
if (!me.path) {
|
||||
@ -142,13 +142,13 @@ Ext.define('PVE.dc.ACLView', {
|
||||
header: gettext('Path'),
|
||||
flex: 1,
|
||||
sortable: true,
|
||||
dataIndex: 'path'
|
||||
dataIndex: 'path',
|
||||
});
|
||||
columns.push({
|
||||
header: gettext('Propagate'),
|
||||
width: 80,
|
||||
sortable: true,
|
||||
dataIndex: 'propagate'
|
||||
dataIndex: 'propagate',
|
||||
});
|
||||
}
|
||||
|
||||
@ -167,7 +167,7 @@ Ext.define('PVE.dc.ACLView', {
|
||||
var params = {
|
||||
'delete': 1,
|
||||
path: rec.data.path,
|
||||
roles: rec.data.roleid
|
||||
roles: rec.data.roleid,
|
||||
};
|
||||
if (rec.data.type === 'group') {
|
||||
params.groups = rec.data.ugid;
|
||||
@ -189,9 +189,9 @@ Ext.define('PVE.dc.ACLView', {
|
||||
},
|
||||
failure: function (response, opts) {
|
||||
Ext.Msg.alert(gettext('Error'), response.htmlStatus);
|
||||
}
|
||||
},
|
||||
});
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
Proxmox.Utils.monStoreErrors(me, store);
|
||||
@ -209,54 +209,54 @@ Ext.define('PVE.dc.ACLView', {
|
||||
text: gettext('Group Permission'),
|
||||
iconCls: 'fa fa-fw fa-group',
|
||||
handler: function() {
|
||||
var win = Ext.create('PVE.dc.ACLAdd',{
|
||||
var win = Ext.create('PVE.dc.ACLAdd', {
|
||||
aclType: 'group',
|
||||
path: me.path
|
||||
path: me.path,
|
||||
});
|
||||
win.on('destroy', reload);
|
||||
win.show();
|
||||
}
|
||||
},
|
||||
},
|
||||
{
|
||||
text: gettext('User Permission'),
|
||||
iconCls: 'fa fa-fw fa-user',
|
||||
handler: function() {
|
||||
var win = Ext.create('PVE.dc.ACLAdd',{
|
||||
var win = Ext.create('PVE.dc.ACLAdd', {
|
||||
aclType: 'user',
|
||||
path: me.path
|
||||
path: me.path,
|
||||
});
|
||||
win.on('destroy', reload);
|
||||
win.show();
|
||||
}
|
||||
},
|
||||
},
|
||||
{
|
||||
text: gettext('API Token Permission'),
|
||||
iconCls: 'fa fa-fw fa-user-o',
|
||||
handler: function() {
|
||||
var win = Ext.create('PVE.dc.ACLAdd',{
|
||||
var win = Ext.create('PVE.dc.ACLAdd', {
|
||||
aclType: 'token',
|
||||
path: me.path
|
||||
path: me.path,
|
||||
});
|
||||
win.on('destroy', reload);
|
||||
win.show();
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
remove_btn
|
||||
remove_btn,
|
||||
],
|
||||
viewConfig: {
|
||||
trackOver: false
|
||||
trackOver: false,
|
||||
},
|
||||
columns: columns,
|
||||
listeners: {
|
||||
activate: reload
|
||||
}
|
||||
activate: reload,
|
||||
},
|
||||
});
|
||||
|
||||
me.callParent();
|
||||
}
|
||||
},
|
||||
}, function() {
|
||||
|
||||
Ext.define('pve-acl', {
|
||||
@ -265,9 +265,9 @@ Ext.define('PVE.dc.ACLView', {
|
||||
'path', 'type', 'ugid', 'roleid',
|
||||
{
|
||||
name: 'propagate',
|
||||
type: 'boolean'
|
||||
}
|
||||
]
|
||||
type: 'boolean',
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
});
|
||||
|
@ -21,7 +21,7 @@ Ext.define('PVE.dc.BackupEdit', {
|
||||
}
|
||||
|
||||
var vmidField = Ext.create('Ext.form.field.Hidden', {
|
||||
name: 'vmid'
|
||||
name: 'vmid',
|
||||
});
|
||||
|
||||
// 'value' can be assigned a string or an array
|
||||
@ -31,11 +31,11 @@ Ext.define('PVE.dc.BackupEdit', {
|
||||
['include', gettext('Include selected VMs')],
|
||||
['all', gettext('All')],
|
||||
['exclude', gettext('Exclude selected VMs')],
|
||||
['pool', gettext('Pool based')]
|
||||
['pool', gettext('Pool based')],
|
||||
],
|
||||
fieldLabel: gettext('Selection mode'),
|
||||
name: 'selMode',
|
||||
value: ''
|
||||
value: '',
|
||||
});
|
||||
|
||||
var sm = Ext.create('Ext.selection.CheckboxModel', {
|
||||
@ -52,8 +52,8 @@ Ext.define('PVE.dc.BackupEdit', {
|
||||
vmidField.suspendEvent('change');
|
||||
vmidField.setValue(sel);
|
||||
vmidField.resumeEvent('change');
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
var storagesel = Ext.create('PVE.form.StorageSelector', {
|
||||
@ -74,16 +74,16 @@ Ext.define('PVE.dc.BackupEdit', {
|
||||
} else if (!compressionSelector.getEditable()) {
|
||||
compressionSelector.setDisabled(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
var store = new Ext.data.Store({
|
||||
model: 'PVEResources',
|
||||
sorters: {
|
||||
property: 'vmid',
|
||||
order: 'ASC'
|
||||
}
|
||||
order: 'ASC',
|
||||
},
|
||||
});
|
||||
|
||||
var vmgrid = Ext.createWidget('grid', {
|
||||
@ -96,11 +96,11 @@ Ext.define('PVE.dc.BackupEdit', {
|
||||
{
|
||||
header: 'ID',
|
||||
dataIndex: 'vmid',
|
||||
width: 60
|
||||
width: 60,
|
||||
},
|
||||
{
|
||||
header: gettext('Node'),
|
||||
dataIndex: 'node'
|
||||
dataIndex: 'node',
|
||||
},
|
||||
{
|
||||
header: gettext('Status'),
|
||||
@ -111,18 +111,18 @@ Ext.define('PVE.dc.BackupEdit', {
|
||||
} else {
|
||||
return Proxmox.Utils.stoppedText;
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
{
|
||||
header: gettext('Name'),
|
||||
dataIndex: 'name',
|
||||
flex: 1
|
||||
flex: 1,
|
||||
},
|
||||
{
|
||||
header: gettext('Type'),
|
||||
dataIndex: 'type'
|
||||
}
|
||||
]
|
||||
dataIndex: 'type',
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
var selectPoolMembers = function(poolid) {
|
||||
@ -134,8 +134,8 @@ Ext.define('PVE.dc.BackupEdit', {
|
||||
{
|
||||
id: 'poolFilter',
|
||||
property: 'pool',
|
||||
value: poolid
|
||||
}
|
||||
value: poolid,
|
||||
},
|
||||
]);
|
||||
sm.selectAll(true);
|
||||
};
|
||||
@ -148,8 +148,8 @@ Ext.define('PVE.dc.BackupEdit', {
|
||||
listeners: {
|
||||
change: function( selpool, newValue, oldValue) {
|
||||
selectPoolMembers(newValue);
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
var nodesel = Ext.create('PVE.form.NodeSelector', {
|
||||
@ -174,8 +174,8 @@ Ext.define('PVE.dc.BackupEdit', {
|
||||
if (mode === 'pool') {
|
||||
selectPoolMembers(selPool.value);
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
var column1 = [
|
||||
@ -187,7 +187,7 @@ Ext.define('PVE.dc.BackupEdit', {
|
||||
fieldLabel: gettext('Day of week'),
|
||||
multiSelect: true,
|
||||
value: ['sat'],
|
||||
allowBlank: false
|
||||
allowBlank: false,
|
||||
},
|
||||
{
|
||||
xtype: 'timefield',
|
||||
@ -196,37 +196,37 @@ Ext.define('PVE.dc.BackupEdit', {
|
||||
format: 'H:i',
|
||||
formatText: 'HH:MM',
|
||||
value: '00:00',
|
||||
allowBlank: false
|
||||
allowBlank: false,
|
||||
},
|
||||
selModeField,
|
||||
selPool
|
||||
selPool,
|
||||
];
|
||||
|
||||
var column2 = [
|
||||
{
|
||||
xtype: 'textfield',
|
||||
fieldLabel: gettext('Send email to'),
|
||||
name: 'mailto'
|
||||
name: 'mailto',
|
||||
},
|
||||
{
|
||||
xtype: 'pveEmailNotificationSelector',
|
||||
fieldLabel: gettext('Email notification'),
|
||||
name: 'mailnotification',
|
||||
deleteEmpty: me.isCreate ? false : true,
|
||||
value: me.isCreate ? 'always' : ''
|
||||
value: me.isCreate ? 'always' : '',
|
||||
},
|
||||
{
|
||||
xtype: 'pveCompressionSelector',
|
||||
fieldLabel: gettext('Compression'),
|
||||
name: 'compress',
|
||||
deleteEmpty: me.isCreate ? false : true,
|
||||
value: 'zstd'
|
||||
value: 'zstd',
|
||||
},
|
||||
{
|
||||
xtype: 'pveBackupModeSelector',
|
||||
fieldLabel: gettext('Mode'),
|
||||
value: 'snapshot',
|
||||
name: 'mode'
|
||||
name: 'mode',
|
||||
},
|
||||
{
|
||||
xtype: 'proxmoxcheckbox',
|
||||
@ -234,9 +234,9 @@ Ext.define('PVE.dc.BackupEdit', {
|
||||
name: 'enabled',
|
||||
uncheckedValue: 0,
|
||||
defaultValue: 1,
|
||||
checked: true
|
||||
checked: true,
|
||||
},
|
||||
vmidField
|
||||
vmidField,
|
||||
];
|
||||
|
||||
var ipanel = Ext.create('Proxmox.panel.InputPanel', {
|
||||
@ -270,7 +270,7 @@ Ext.define('PVE.dc.BackupEdit', {
|
||||
delete values.pool;
|
||||
}
|
||||
return values;
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
var update_vmid_selection = function(list, mode) {
|
||||
@ -342,7 +342,7 @@ Ext.define('PVE.dc.BackupEdit', {
|
||||
} else {
|
||||
update_vmid_selection(list, mode);
|
||||
}
|
||||
}
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
@ -350,7 +350,7 @@ Ext.define('PVE.dc.BackupEdit', {
|
||||
subject: gettext("Backup Job"),
|
||||
url: url,
|
||||
method: method,
|
||||
items: [ ipanel, vmgrid ]
|
||||
items: [ ipanel, vmgrid ],
|
||||
});
|
||||
|
||||
me.callParent();
|
||||
@ -380,12 +380,12 @@ Ext.define('PVE.dc.BackupEdit', {
|
||||
}
|
||||
|
||||
me.setValues(data);
|
||||
}
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
reload();
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
@ -416,7 +416,7 @@ Ext.define('PVE.dc.BackupDiskTree', {
|
||||
scope: this,
|
||||
callback: function(panel) {
|
||||
panel.collapseAll();
|
||||
}
|
||||
},
|
||||
},
|
||||
],
|
||||
|
||||
@ -500,8 +500,8 @@ Ext.define('PVE.dc.BackupDiskTree', {
|
||||
} else {
|
||||
return txt + 'question-circle';
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
],
|
||||
header: {
|
||||
items: [{
|
||||
@ -547,16 +547,16 @@ Ext.define('PVE.dc.BackupDiskTree', {
|
||||
});
|
||||
return match;
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
},
|
||||
]},
|
||||
});
|
||||
|
||||
me.callParent();
|
||||
|
||||
me.reload();
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
Ext.define('PVE.dc.BackupInfo', {
|
||||
@ -603,7 +603,7 @@ Ext.define('PVE.dc.BackupInfo', {
|
||||
name: 'pool',
|
||||
fieldLabel: gettext('Pool to backup'),
|
||||
xtype: 'displayfield',
|
||||
}
|
||||
},
|
||||
],
|
||||
column2: [
|
||||
{
|
||||
@ -709,7 +709,7 @@ Ext.define('PVE.dc.BackupInfo', {
|
||||
me.callParent();
|
||||
|
||||
me.setValues(me.record);
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
@ -783,9 +783,9 @@ Ext.define('PVE.dc.BackedGuests', {
|
||||
});
|
||||
return match;
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
},
|
||||
],
|
||||
viewConfig: {
|
||||
stripeRows: true,
|
||||
@ -812,8 +812,8 @@ Ext.define('PVE.dc.BackupView', {
|
||||
model: 'pve-cluster-backup',
|
||||
proxy: {
|
||||
type: 'proxmox',
|
||||
url: "/api2/json/cluster/backup"
|
||||
}
|
||||
url: "/api2/json/cluster/backup",
|
||||
},
|
||||
});
|
||||
|
||||
var not_backed_store = new Ext.data.Store({
|
||||
@ -848,7 +848,7 @@ Ext.define('PVE.dc.BackupView', {
|
||||
}
|
||||
|
||||
var win = Ext.create('PVE.dc.BackupEdit', {
|
||||
jobid: rec.data.id
|
||||
jobid: rec.data.id,
|
||||
});
|
||||
win.on('destroy', reload);
|
||||
win.show();
|
||||
@ -886,10 +886,10 @@ Ext.define('PVE.dc.BackupView', {
|
||||
region: 'center',
|
||||
layout: {
|
||||
type: 'vbox',
|
||||
align: 'stretch'
|
||||
align: 'stretch',
|
||||
},
|
||||
items: [infoview, disktree],
|
||||
}]
|
||||
}],
|
||||
}).show();
|
||||
};
|
||||
|
||||
@ -949,7 +949,7 @@ Ext.define('PVE.dc.BackupView', {
|
||||
errors.push(node + ': ' + response.htmlStatus);
|
||||
postRequest();
|
||||
},
|
||||
success: postRequest
|
||||
success: postRequest,
|
||||
}));
|
||||
};
|
||||
|
||||
@ -974,10 +974,10 @@ Ext.define('PVE.dc.BackupView', {
|
||||
region: 'center',
|
||||
layout: {
|
||||
type: 'vbox',
|
||||
align: 'stretch'
|
||||
align: 'stretch',
|
||||
},
|
||||
items: [backedinfo],
|
||||
}]
|
||||
}],
|
||||
}).show();
|
||||
};
|
||||
|
||||
@ -985,7 +985,7 @@ Ext.define('PVE.dc.BackupView', {
|
||||
text: gettext('Edit'),
|
||||
disabled: true,
|
||||
selModel: sm,
|
||||
handler: run_editor
|
||||
handler: run_editor,
|
||||
});
|
||||
|
||||
var run_btn = new Proxmox.button.Button({
|
||||
@ -1008,9 +1008,9 @@ Ext.define('PVE.dc.BackupView', {
|
||||
return;
|
||||
}
|
||||
run_backup_now(rec.data);
|
||||
}
|
||||
},
|
||||
});
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
var remove_btn = Ext.create('Proxmox.button.StdRemoveButton', {
|
||||
@ -1018,7 +1018,7 @@ Ext.define('PVE.dc.BackupView', {
|
||||
baseurl: '/cluster/backup',
|
||||
callback: function() {
|
||||
reload();
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
var detail_btn = new Proxmox.button.Button({
|
||||
@ -1048,16 +1048,16 @@ Ext.define('PVE.dc.BackupView', {
|
||||
stateful: true,
|
||||
stateId: 'grid-dc-backup',
|
||||
viewConfig: {
|
||||
trackOver: false
|
||||
trackOver: false,
|
||||
},
|
||||
tbar: [
|
||||
{
|
||||
text: gettext('Add'),
|
||||
handler: function() {
|
||||
var win = Ext.create('PVE.dc.BackupEdit',{});
|
||||
var win = Ext.create('PVE.dc.BackupEdit', {});
|
||||
win.on('destroy', reload);
|
||||
win.show();
|
||||
}
|
||||
},
|
||||
},
|
||||
'-',
|
||||
remove_btn,
|
||||
@ -1078,7 +1078,7 @@ Ext.define('PVE.dc.BackupView', {
|
||||
sortable: true,
|
||||
disabled: true,
|
||||
disabledCls: 'x-item-enabled',
|
||||
stopSelection: false
|
||||
stopSelection: false,
|
||||
},
|
||||
{
|
||||
header: gettext('Node'),
|
||||
@ -1090,43 +1090,43 @@ Ext.define('PVE.dc.BackupView', {
|
||||
return value;
|
||||
}
|
||||
return me.allText;
|
||||
}
|
||||
},
|
||||
},
|
||||
{
|
||||
header: gettext('Day of week'),
|
||||
width: 200,
|
||||
sortable: false,
|
||||
dataIndex: 'dow',
|
||||
renderer: PVE.Utils.render_backup_days_of_week
|
||||
renderer: PVE.Utils.render_backup_days_of_week,
|
||||
},
|
||||
{
|
||||
header: gettext('Start Time'),
|
||||
width: 60,
|
||||
sortable: true,
|
||||
dataIndex: 'starttime'
|
||||
dataIndex: 'starttime',
|
||||
},
|
||||
{
|
||||
header: gettext('Storage'),
|
||||
width: 100,
|
||||
sortable: true,
|
||||
dataIndex: 'storage'
|
||||
dataIndex: 'storage',
|
||||
},
|
||||
{
|
||||
header: gettext('Selection'),
|
||||
flex: 1,
|
||||
sortable: false,
|
||||
dataIndex: 'vmid',
|
||||
renderer: PVE.Utils.render_backup_selection
|
||||
}
|
||||
renderer: PVE.Utils.render_backup_selection,
|
||||
},
|
||||
],
|
||||
listeners: {
|
||||
activate: reload,
|
||||
itemdblclick: run_editor
|
||||
}
|
||||
itemdblclick: run_editor,
|
||||
},
|
||||
});
|
||||
|
||||
me.callParent();
|
||||
}
|
||||
},
|
||||
}, function() {
|
||||
|
||||
Ext.define('pve-cluster-backup', {
|
||||
@ -1136,7 +1136,7 @@ Ext.define('PVE.dc.BackupView', {
|
||||
'storage', 'node', 'vmid', 'exclude',
|
||||
'mailto', 'pool', 'compress', 'mode',
|
||||
{ name: 'enabled', type: 'boolean' },
|
||||
{ name: 'all', type: 'boolean' }
|
||||
]
|
||||
{ name: 'all', type: 'boolean' },
|
||||
],
|
||||
});
|
||||
});
|
||||
|
@ -2,21 +2,21 @@ Ext.define('pve-cluster-nodes', {
|
||||
extend: 'Ext.data.Model',
|
||||
fields: [
|
||||
'node', { type: 'integer', name: 'nodeid' }, 'ring0_addr', 'ring1_addr',
|
||||
{ type: 'integer', name: 'quorum_votes' }
|
||||
{ type: 'integer', name: 'quorum_votes' },
|
||||
],
|
||||
proxy: {
|
||||
type: 'proxmox',
|
||||
url: "/api2/json/cluster/config/nodes"
|
||||
url: "/api2/json/cluster/config/nodes",
|
||||
},
|
||||
idProperty: 'nodeid'
|
||||
idProperty: 'nodeid',
|
||||
});
|
||||
|
||||
Ext.define('pve-cluster-info', {
|
||||
extend: 'Ext.data.Model',
|
||||
proxy: {
|
||||
type: 'proxmox',
|
||||
url: "/api2/json/cluster/config/join"
|
||||
}
|
||||
url: "/api2/json/cluster/config/join",
|
||||
},
|
||||
});
|
||||
|
||||
Ext.define('PVE.ClusterAdministration', {
|
||||
@ -37,11 +37,11 @@ Ext.define('PVE.ClusterAdministration', {
|
||||
preferred_node: {
|
||||
name: '',
|
||||
fp: '',
|
||||
addr: ''
|
||||
addr: '',
|
||||
},
|
||||
isInCluster: false,
|
||||
nodecount: 0
|
||||
}
|
||||
nodecount: 0,
|
||||
},
|
||||
},
|
||||
|
||||
items: [
|
||||
@ -56,7 +56,7 @@ Ext.define('PVE.ClusterAdministration', {
|
||||
autoStart: true,
|
||||
interval: 15 * 1000,
|
||||
storeid: 'pve-cluster-info',
|
||||
model: 'pve-cluster-info'
|
||||
model: 'pve-cluster-info',
|
||||
});
|
||||
view.store.on('load', this.onLoad, this);
|
||||
view.on('destroy', view.store.stopUpdate);
|
||||
@ -71,7 +71,7 @@ Ext.define('PVE.ClusterAdministration', {
|
||||
vm.set('preferred_node', {
|
||||
name: '',
|
||||
addr: '',
|
||||
fp: ''
|
||||
fp: '',
|
||||
});
|
||||
return;
|
||||
}
|
||||
@ -96,7 +96,7 @@ Ext.define('PVE.ClusterAdministration', {
|
||||
addr: nodeinfo.pve_addr,
|
||||
peerLinks: links,
|
||||
ring_addr: ring_addr,
|
||||
fp: nodeinfo.pve_fp
|
||||
fp: nodeinfo.pve_fp,
|
||||
});
|
||||
},
|
||||
|
||||
@ -108,8 +108,8 @@ Ext.define('PVE.ClusterAdministration', {
|
||||
listeners: {
|
||||
destroy: function() {
|
||||
view.store.startUpdate();
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
});
|
||||
},
|
||||
|
||||
@ -121,8 +121,8 @@ Ext.define('PVE.ClusterAdministration', {
|
||||
fingerprint: vm.get('preferred_node.fp'),
|
||||
peerLinks: vm.get('preferred_node.peerLinks'),
|
||||
ring_addr: vm.get('preferred_node.ring_addr'),
|
||||
totem: vm.get('totem')
|
||||
}
|
||||
totem: vm.get('totem'),
|
||||
},
|
||||
});
|
||||
win.show();
|
||||
},
|
||||
@ -135,10 +135,10 @@ Ext.define('PVE.ClusterAdministration', {
|
||||
listeners: {
|
||||
destroy: function() {
|
||||
view.store.startUpdate();
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
});
|
||||
}
|
||||
},
|
||||
},
|
||||
tbar: [
|
||||
{
|
||||
@ -146,25 +146,25 @@ Ext.define('PVE.ClusterAdministration', {
|
||||
reference: 'createButton',
|
||||
handler: 'onCreate',
|
||||
bind: {
|
||||
disabled: '{isInCluster}'
|
||||
}
|
||||
disabled: '{isInCluster}',
|
||||
},
|
||||
},
|
||||
{
|
||||
text: gettext('Join Information'),
|
||||
reference: 'addButton',
|
||||
handler: 'onClusterInfo',
|
||||
bind: {
|
||||
disabled: '{!isInCluster}'
|
||||
}
|
||||
disabled: '{!isInCluster}',
|
||||
},
|
||||
},
|
||||
{
|
||||
text: gettext('Join Cluster'),
|
||||
reference: 'joinButton',
|
||||
handler: 'onJoin',
|
||||
bind: {
|
||||
disabled: '{isInCluster}'
|
||||
}
|
||||
}
|
||||
disabled: '{isInCluster}',
|
||||
},
|
||||
},
|
||||
],
|
||||
layout: 'hbox',
|
||||
bodyPadding: 5,
|
||||
@ -174,18 +174,18 @@ Ext.define('PVE.ClusterAdministration', {
|
||||
fieldLabel: gettext('Cluster Name'),
|
||||
bind: {
|
||||
value: '{totem.cluster_name}',
|
||||
hidden: '{!isInCluster}'
|
||||
hidden: '{!isInCluster}',
|
||||
},
|
||||
flex: 1
|
||||
flex: 1,
|
||||
},
|
||||
{
|
||||
xtype: 'displayfield',
|
||||
fieldLabel: gettext('Config Version'),
|
||||
bind: {
|
||||
value: '{totem.config_version}',
|
||||
hidden: '{!isInCluster}'
|
||||
hidden: '{!isInCluster}',
|
||||
},
|
||||
flex: 1
|
||||
flex: 1,
|
||||
},
|
||||
{
|
||||
xtype: 'displayfield',
|
||||
@ -193,19 +193,19 @@ Ext.define('PVE.ClusterAdministration', {
|
||||
labelWidth: 120,
|
||||
bind: {
|
||||
value: '{nodecount}',
|
||||
hidden: '{!isInCluster}'
|
||||
hidden: '{!isInCluster}',
|
||||
},
|
||||
flex: 1
|
||||
flex: 1,
|
||||
},
|
||||
{
|
||||
xtype: 'displayfield',
|
||||
value: gettext('Standalone node - no cluster defined'),
|
||||
bind: {
|
||||
hidden: '{isInCluster}'
|
||||
hidden: '{isInCluster}',
|
||||
},
|
||||
flex: 1
|
||||
}
|
||||
]
|
||||
flex: 1,
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
xtype: 'grid',
|
||||
@ -222,14 +222,14 @@ Ext.define('PVE.ClusterAdministration', {
|
||||
interval: 5 * 1000,
|
||||
autoStart: true,
|
||||
storeid: 'pve-cluster-nodes',
|
||||
model: 'pve-cluster-nodes'
|
||||
model: 'pve-cluster-nodes',
|
||||
});
|
||||
view.setStore(Ext.create('Proxmox.data.DiffStore', {
|
||||
rstore: view.rstore,
|
||||
sorters: {
|
||||
property: 'nodeid',
|
||||
order: 'DESC'
|
||||
}
|
||||
order: 'DESC',
|
||||
},
|
||||
}));
|
||||
Proxmox.Utils.monStoreErrors(view, view.rstore);
|
||||
view.rstore.on('load', this.onLoad, this);
|
||||
@ -266,16 +266,16 @@ Ext.define('PVE.ClusterAdministration', {
|
||||
return;
|
||||
}
|
||||
view.columns[linkIndex+linknum].setHidden(false);
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
},
|
||||
},
|
||||
columns: {
|
||||
items: [
|
||||
{
|
||||
header: gettext('Nodename'),
|
||||
hidden: false,
|
||||
dataIndex: 'name'
|
||||
dataIndex: 'name',
|
||||
},
|
||||
{
|
||||
header: gettext('ID'),
|
||||
@ -283,7 +283,7 @@ Ext.define('PVE.ClusterAdministration', {
|
||||
width: 100,
|
||||
flex: 0,
|
||||
hidden: false,
|
||||
dataIndex: 'nodeid'
|
||||
dataIndex: 'nodeid',
|
||||
},
|
||||
{
|
||||
header: gettext('Votes'),
|
||||
@ -291,55 +291,55 @@ Ext.define('PVE.ClusterAdministration', {
|
||||
width: 100,
|
||||
flex: 0,
|
||||
hidden: false,
|
||||
dataIndex: 'quorum_votes'
|
||||
dataIndex: 'quorum_votes',
|
||||
},
|
||||
{
|
||||
header: Ext.String.format(gettext('Link {0}'), 0),
|
||||
dataIndex: 'ring0_addr',
|
||||
linkNumber: 0
|
||||
linkNumber: 0,
|
||||
},
|
||||
{
|
||||
header: Ext.String.format(gettext('Link {0}'), 1),
|
||||
dataIndex: 'ring1_addr',
|
||||
linkNumber: 1
|
||||
linkNumber: 1,
|
||||
},
|
||||
{
|
||||
header: Ext.String.format(gettext('Link {0}'), 2),
|
||||
dataIndex: 'ring2_addr',
|
||||
linkNumber: 2
|
||||
linkNumber: 2,
|
||||
},
|
||||
{
|
||||
header: Ext.String.format(gettext('Link {0}'), 3),
|
||||
dataIndex: 'ring3_addr',
|
||||
linkNumber: 3
|
||||
linkNumber: 3,
|
||||
},
|
||||
{
|
||||
header: Ext.String.format(gettext('Link {0}'), 4),
|
||||
dataIndex: 'ring4_addr',
|
||||
linkNumber: 4
|
||||
linkNumber: 4,
|
||||
},
|
||||
{
|
||||
header: Ext.String.format(gettext('Link {0}'), 5),
|
||||
dataIndex: 'ring5_addr',
|
||||
linkNumber: 5
|
||||
linkNumber: 5,
|
||||
},
|
||||
{
|
||||
header: Ext.String.format(gettext('Link {0}'), 6),
|
||||
dataIndex: 'ring6_addr',
|
||||
linkNumber: 6
|
||||
linkNumber: 6,
|
||||
},
|
||||
{
|
||||
header: Ext.String.format(gettext('Link {0}'), 7),
|
||||
dataIndex: 'ring7_addr',
|
||||
linkNumber: 7
|
||||
}
|
||||
linkNumber: 7,
|
||||
},
|
||||
],
|
||||
defaults: {
|
||||
flex: 1,
|
||||
hidden: true,
|
||||
minWidth: 150
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
minWidth: 150,
|
||||
},
|
||||
},
|
||||
},
|
||||
],
|
||||
});
|
||||
|
@ -21,7 +21,7 @@ Ext.define('PVE.ClusterCreateWindow', {
|
||||
fieldLabel: gettext('Cluster Name'),
|
||||
allowBlank: false,
|
||||
maxLength: 15,
|
||||
name: 'clustername'
|
||||
name: 'clustername',
|
||||
},
|
||||
{
|
||||
xtype: 'fieldcontainer',
|
||||
@ -30,11 +30,11 @@ Ext.define('PVE.ClusterCreateWindow', {
|
||||
{
|
||||
xtype: 'pveCorosyncLinkEditor',
|
||||
infoText: gettext("Multiple links are used as failover, lower numbers have higher priority."),
|
||||
name: 'links'
|
||||
name: 'links',
|
||||
},
|
||||
]
|
||||
}]
|
||||
}
|
||||
],
|
||||
}],
|
||||
},
|
||||
});
|
||||
|
||||
Ext.define('PVE.ClusterInfoWindow', {
|
||||
@ -50,7 +50,7 @@ Ext.define('PVE.ClusterInfoWindow', {
|
||||
joinInfo: {
|
||||
ipAddress: undefined,
|
||||
fingerprint: undefined,
|
||||
totem: {}
|
||||
totem: {},
|
||||
},
|
||||
|
||||
items: [
|
||||
@ -58,7 +58,7 @@ Ext.define('PVE.ClusterInfoWindow', {
|
||||
xtype: 'component',
|
||||
border: false,
|
||||
padding: '10 10 10 10',
|
||||
html: gettext("Copy the Join Information here and use it on the node you want to add.")
|
||||
html: gettext("Copy the Join Information here and use it on the node you want to add."),
|
||||
},
|
||||
{
|
||||
xtype: 'container',
|
||||
@ -99,11 +99,11 @@ Ext.define('PVE.ClusterInfoWindow', {
|
||||
var jsons = Ext.JSON.encode(field.joinInfo);
|
||||
var base64s = Ext.util.Base64.encode(jsons);
|
||||
field.setValue(base64s);
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
dockedItems: [{
|
||||
dock: 'bottom',
|
||||
@ -115,9 +115,9 @@ Ext.define('PVE.ClusterInfoWindow', {
|
||||
el.select();
|
||||
document.execCommand("copy");
|
||||
},
|
||||
text: gettext('Copy Information')
|
||||
}]
|
||||
}]
|
||||
text: gettext('Copy Information'),
|
||||
}],
|
||||
}],
|
||||
});
|
||||
|
||||
Ext.define('PVE.ClusterJoinNodeWindow', {
|
||||
@ -145,7 +145,7 @@ Ext.define('PVE.ClusterJoinNodeWindow', {
|
||||
info: {
|
||||
fp: '',
|
||||
ip: '',
|
||||
clusterName: ''
|
||||
clusterName: '',
|
||||
},
|
||||
hasAssistedInfo: false,
|
||||
},
|
||||
@ -170,18 +170,18 @@ Ext.define('PVE.ClusterJoinNodeWindow', {
|
||||
'#': {
|
||||
close: function() {
|
||||
delete PVE.Utils.silenceAuthFailures;
|
||||
}
|
||||
},
|
||||
},
|
||||
'proxmoxcheckbox[name=assistedEntry]': {
|
||||
change: 'onInputTypeChange'
|
||||
change: 'onInputTypeChange',
|
||||
},
|
||||
'textarea[name=serializedinfo]': {
|
||||
change: 'recomputeSerializedInfo',
|
||||
enable: 'resetField'
|
||||
enable: 'resetField',
|
||||
},
|
||||
'textfield': {
|
||||
disable: 'resetField'
|
||||
}
|
||||
disable: 'resetField',
|
||||
},
|
||||
},
|
||||
resetField: function(field) {
|
||||
field.reset();
|
||||
@ -216,7 +216,7 @@ Ext.define('PVE.ClusterJoinNodeWindow', {
|
||||
let info = {
|
||||
fp: '',
|
||||
ip: '',
|
||||
clusterName: ''
|
||||
clusterName: '',
|
||||
};
|
||||
|
||||
if (!(joinInfo && joinInfo.totem)) {
|
||||
@ -236,7 +236,7 @@ Ext.define('PVE.ClusterJoinNodeWindow', {
|
||||
number: linkNumber,
|
||||
value: '',
|
||||
text: peerLink ? Ext.String.format(gettext("peer's link address: {0}"), peerLink) : '',
|
||||
allowBlank: false
|
||||
allowBlank: false,
|
||||
};
|
||||
});
|
||||
|
||||
@ -253,13 +253,13 @@ Ext.define('PVE.ClusterJoinNodeWindow', {
|
||||
info = {
|
||||
ip: joinInfo.ipAddress,
|
||||
fp: joinInfo.fingerprint,
|
||||
clusterName: joinInfo.totem.cluster_name
|
||||
clusterName: joinInfo.totem.cluster_name,
|
||||
};
|
||||
field.valid = true;
|
||||
vm.set('hasAssistedInfo', true);
|
||||
}
|
||||
vm.set('info', info);
|
||||
}
|
||||
},
|
||||
},
|
||||
|
||||
submit: function() {
|
||||
@ -282,7 +282,7 @@ Ext.define('PVE.ClusterJoinNodeWindow', {
|
||||
Ext.Msg.show({
|
||||
title: gettext('Join Task Finished'),
|
||||
icon: Ext.Msg.INFO,
|
||||
msg: txt
|
||||
msg: txt,
|
||||
});
|
||||
}
|
||||
},
|
||||
@ -296,9 +296,9 @@ Ext.define('PVE.ClusterJoinNodeWindow', {
|
||||
value: true,
|
||||
autoEl: {
|
||||
tag: 'div',
|
||||
'data-qtip': gettext('Select if join information should be extracted from pasted cluster information, deselect for manual entering')
|
||||
'data-qtip': gettext('Select if join information should be extracted from pasted cluster information, deselect for manual entering'),
|
||||
},
|
||||
boxLabel: gettext('Assisted join: Paste encoded cluster join information and enter password.')
|
||||
boxLabel: gettext('Assisted join: Paste encoded cluster join information and enter password.'),
|
||||
},
|
||||
{
|
||||
xtype: 'textarea',
|
||||
@ -313,16 +313,16 @@ Ext.define('PVE.ClusterJoinNodeWindow', {
|
||||
},
|
||||
bind: {
|
||||
disabled: '{!assistedEntry.checked}',
|
||||
hidden: '{!assistedEntry.checked}'
|
||||
hidden: '{!assistedEntry.checked}',
|
||||
},
|
||||
value: ''
|
||||
value: '',
|
||||
},
|
||||
{
|
||||
xtype: 'panel',
|
||||
width: 776,
|
||||
layout: {
|
||||
type: 'hbox',
|
||||
align: 'center'
|
||||
align: 'center',
|
||||
},
|
||||
bind: {
|
||||
hidden: '{!showClusterFields}',
|
||||
@ -338,7 +338,7 @@ Ext.define('PVE.ClusterJoinNodeWindow', {
|
||||
value: '{info.ip}',
|
||||
readOnly: '{assistedEntry.checked}',
|
||||
},
|
||||
name: 'hostname'
|
||||
name: 'hostname',
|
||||
},
|
||||
{
|
||||
xtype: 'textfield',
|
||||
@ -348,9 +348,9 @@ Ext.define('PVE.ClusterJoinNodeWindow', {
|
||||
emptyText: gettext("Peer's root password"),
|
||||
fieldLabel: gettext('Password'),
|
||||
allowBlank: false,
|
||||
name: 'password'
|
||||
name: 'password',
|
||||
},
|
||||
]
|
||||
],
|
||||
},
|
||||
{
|
||||
xtype: 'textfield',
|
||||
@ -361,7 +361,7 @@ Ext.define('PVE.ClusterJoinNodeWindow', {
|
||||
readOnly: '{assistedEntry.checked}',
|
||||
hidden: '{!showClusterFields}',
|
||||
},
|
||||
name: 'fingerprint'
|
||||
name: 'fingerprint',
|
||||
},
|
||||
{
|
||||
xtype: 'fieldcontainer',
|
||||
@ -374,8 +374,8 @@ Ext.define('PVE.ClusterJoinNodeWindow', {
|
||||
xtype: 'pveCorosyncLinkEditor',
|
||||
itemId: 'linkEditor',
|
||||
reference: 'linkEditor',
|
||||
allowNumberEdit: false
|
||||
allowNumberEdit: false,
|
||||
},
|
||||
]
|
||||
}]
|
||||
],
|
||||
}],
|
||||
});
|
||||
|
@ -17,7 +17,7 @@ Ext.define('PVE.dc.Config', {
|
||||
|
||||
Ext.apply(me, {
|
||||
title: gettext("Datacenter"),
|
||||
hstateid: 'dctab'
|
||||
hstateid: 'dctab',
|
||||
});
|
||||
|
||||
if (caps.dc['Sys.Audit']) {
|
||||
@ -25,25 +25,25 @@ Ext.define('PVE.dc.Config', {
|
||||
title: gettext('Summary'),
|
||||
xtype: 'pveDcSummary',
|
||||
iconCls: 'fa fa-book',
|
||||
itemId: 'summary'
|
||||
itemId: 'summary',
|
||||
},
|
||||
{
|
||||
title: gettext('Cluster'),
|
||||
xtype: 'pveClusterAdministration',
|
||||
iconCls: 'fa fa-server',
|
||||
itemId: 'cluster'
|
||||
itemId: 'cluster',
|
||||
},
|
||||
{
|
||||
title: 'Ceph',
|
||||
itemId: 'ceph',
|
||||
iconCls: 'fa fa-ceph',
|
||||
xtype: 'pveNodeCephStatus'
|
||||
xtype: 'pveNodeCephStatus',
|
||||
},
|
||||
{
|
||||
xtype: 'pveDcOptionView',
|
||||
title: gettext('Options'),
|
||||
iconCls: 'fa fa-gear',
|
||||
itemId: 'options'
|
||||
itemId: 'options',
|
||||
});
|
||||
}
|
||||
|
||||
@ -52,7 +52,7 @@ Ext.define('PVE.dc.Config', {
|
||||
xtype: 'pveStorageView',
|
||||
title: gettext('Storage'),
|
||||
iconCls: 'fa fa-database',
|
||||
itemId: 'storage'
|
||||
itemId: 'storage',
|
||||
});
|
||||
}
|
||||
|
||||
@ -62,20 +62,20 @@ Ext.define('PVE.dc.Config', {
|
||||
xtype: 'pveDcBackupView',
|
||||
iconCls: 'fa fa-floppy-o',
|
||||
title: gettext('Backup'),
|
||||
itemId: 'backup'
|
||||
itemId: 'backup',
|
||||
},
|
||||
{
|
||||
xtype: 'pveReplicaView',
|
||||
iconCls: 'fa fa-retweet',
|
||||
title: gettext('Replication'),
|
||||
itemId: 'replication'
|
||||
itemId: 'replication',
|
||||
},
|
||||
{
|
||||
xtype: 'pveACLView',
|
||||
title: gettext('Permissions'),
|
||||
iconCls: 'fa fa-unlock',
|
||||
itemId: 'permissions',
|
||||
expandedOnInit: true
|
||||
expandedOnInit: true,
|
||||
});
|
||||
}
|
||||
|
||||
@ -84,7 +84,7 @@ Ext.define('PVE.dc.Config', {
|
||||
groups: ['permissions'],
|
||||
iconCls: 'fa fa-user',
|
||||
title: gettext('Users'),
|
||||
itemId: 'users'
|
||||
itemId: 'users',
|
||||
});
|
||||
|
||||
me.items.push({
|
||||
@ -92,7 +92,7 @@ Ext.define('PVE.dc.Config', {
|
||||
groups: ['permissions'],
|
||||
iconCls: 'fa fa-user-o',
|
||||
title: gettext('API Tokens'),
|
||||
itemId: 'apitokens'
|
||||
itemId: 'apitokens',
|
||||
});
|
||||
|
||||
if (caps.dc['Sys.Audit']) {
|
||||
@ -101,48 +101,48 @@ Ext.define('PVE.dc.Config', {
|
||||
title: gettext('Groups'),
|
||||
iconCls: 'fa fa-users',
|
||||
groups: ['permissions'],
|
||||
itemId: 'groups'
|
||||
itemId: 'groups',
|
||||
},
|
||||
{
|
||||
xtype: 'pvePoolView',
|
||||
title: gettext('Pools'),
|
||||
iconCls: 'fa fa-tags',
|
||||
groups: ['permissions'],
|
||||
itemId: 'pools'
|
||||
itemId: 'pools',
|
||||
},
|
||||
{
|
||||
xtype: 'pveRoleView',
|
||||
title: gettext('Roles'),
|
||||
iconCls: 'fa fa-male',
|
||||
groups: ['permissions'],
|
||||
itemId: 'roles'
|
||||
itemId: 'roles',
|
||||
},
|
||||
{
|
||||
xtype: 'pveAuthView',
|
||||
title: gettext('Authentication'),
|
||||
groups: ['permissions'],
|
||||
iconCls: 'fa fa-key',
|
||||
itemId: 'domains'
|
||||
itemId: 'domains',
|
||||
},
|
||||
{
|
||||
xtype: 'pveHAStatus',
|
||||
title: 'HA',
|
||||
iconCls: 'fa fa-heartbeat',
|
||||
itemId: 'ha'
|
||||
itemId: 'ha',
|
||||
},
|
||||
{
|
||||
title: gettext('Groups'),
|
||||
groups: ['ha'],
|
||||
xtype: 'pveHAGroupsView',
|
||||
iconCls: 'fa fa-object-group',
|
||||
itemId: 'ha-groups'
|
||||
itemId: 'ha-groups',
|
||||
},
|
||||
{
|
||||
title: gettext('Fencing'),
|
||||
groups: ['ha'],
|
||||
iconCls: 'fa fa-bolt',
|
||||
xtype: 'pveFencingView',
|
||||
itemId: 'ha-fencing'
|
||||
itemId: 'ha-fencing',
|
||||
});
|
||||
if (PVE.SDNInfo || PVE.SDNInfo === undefined) {
|
||||
me.items.push({
|
||||
@ -151,7 +151,7 @@ Ext.define('PVE.dc.Config', {
|
||||
iconCls: 'fa fa-sdn',
|
||||
hidden: true,
|
||||
itemId: 'sdn',
|
||||
expandedOnInit: true
|
||||
expandedOnInit: true,
|
||||
},
|
||||
{
|
||||
xtype: 'pveSDNControllerView',
|
||||
@ -159,7 +159,7 @@ Ext.define('PVE.dc.Config', {
|
||||
title: gettext('Controllers'),
|
||||
hidden: true,
|
||||
iconCls: 'fa fa-crosshairs',
|
||||
itemId: 'sdncontroller'
|
||||
itemId: 'sdncontroller',
|
||||
},
|
||||
{
|
||||
xtype: 'pveSDNZoneView',
|
||||
@ -167,7 +167,7 @@ Ext.define('PVE.dc.Config', {
|
||||
title: gettext('Zones'),
|
||||
hidden: true,
|
||||
iconCls: 'fa fa-th',
|
||||
itemId: 'sdnzone'
|
||||
itemId: 'sdnzone',
|
||||
},
|
||||
{
|
||||
xtype: 'pveSDNVnetView',
|
||||
@ -175,7 +175,7 @@ Ext.define('PVE.dc.Config', {
|
||||
title: gettext('Vnets'),
|
||||
hidden: true,
|
||||
iconCls: 'fa fa-network-wired',
|
||||
itemId: 'sdnvnet'
|
||||
itemId: 'sdnvnet',
|
||||
});
|
||||
}
|
||||
|
||||
@ -184,7 +184,7 @@ Ext.define('PVE.dc.Config', {
|
||||
xtype: 'pveACMEClusterView',
|
||||
title: 'ACME',
|
||||
iconCls: 'fa fa-certificate',
|
||||
itemId: 'acme'
|
||||
itemId: 'acme',
|
||||
});
|
||||
}
|
||||
|
||||
@ -195,7 +195,7 @@ Ext.define('PVE.dc.Config', {
|
||||
base_url: '/cluster/firewall/rules',
|
||||
list_refs_url: '/cluster/firewall/refs',
|
||||
iconCls: 'fa fa-shield',
|
||||
itemId: 'firewall'
|
||||
itemId: 'firewall',
|
||||
},
|
||||
{
|
||||
xtype: 'pveFirewallOptions',
|
||||
@ -205,14 +205,14 @@ Ext.define('PVE.dc.Config', {
|
||||
base_url: '/cluster/firewall/options',
|
||||
onlineHelp: 'pve_firewall_cluster_wide_setup',
|
||||
fwtype: 'dc',
|
||||
itemId: 'firewall-options'
|
||||
itemId: 'firewall-options',
|
||||
},
|
||||
{
|
||||
xtype: 'pveSecurityGroups',
|
||||
title: gettext('Security Group'),
|
||||
groups: ['firewall'],
|
||||
iconCls: 'fa fa-group',
|
||||
itemId: 'firewall-sg'
|
||||
itemId: 'firewall-sg',
|
||||
},
|
||||
{
|
||||
xtype: 'pveFirewallAliases',
|
||||
@ -220,7 +220,7 @@ Ext.define('PVE.dc.Config', {
|
||||
groups: ['firewall'],
|
||||
iconCls: 'fa fa-external-link',
|
||||
base_url: '/cluster/firewall/aliases',
|
||||
itemId: 'firewall-aliases'
|
||||
itemId: 'firewall-aliases',
|
||||
},
|
||||
{
|
||||
xtype: 'pveIPSet',
|
||||
@ -229,7 +229,7 @@ Ext.define('PVE.dc.Config', {
|
||||
iconCls: 'fa fa-list-ol',
|
||||
base_url: '/cluster/firewall/ipset',
|
||||
list_refs_url: '/cluster/firewall/refs',
|
||||
itemId: 'firewall-ipset'
|
||||
itemId: 'firewall-ipset',
|
||||
},
|
||||
{
|
||||
xtype: 'pveMetricServerView',
|
||||
@ -242,10 +242,10 @@ Ext.define('PVE.dc.Config', {
|
||||
xtype: 'pveDcSupport',
|
||||
title: gettext('Support'),
|
||||
itemId: 'support',
|
||||
iconCls: 'fa fa-comments-o'
|
||||
iconCls: 'fa fa-comments-o',
|
||||
});
|
||||
}
|
||||
|
||||
me.callParent();
|
||||
}
|
||||
},
|
||||
});
|
||||
|
@ -56,7 +56,7 @@ Ext.define('PVE.form.CorosyncLinkEditorController', {
|
||||
view.remove(this);
|
||||
|
||||
me.updateDeleteButtonState();
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
view.add(linkSelector);
|
||||
@ -115,7 +115,7 @@ Ext.define('PVE.form.CorosyncLinkEditorController', {
|
||||
// all numbers in use, this should never happen since add button is
|
||||
// disabled automatically
|
||||
return 0;
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
Ext.define('PVE.form.CorosyncLinkSelector', {
|
||||
@ -147,7 +147,7 @@ Ext.define('PVE.form.CorosyncLinkSelector', {
|
||||
fieldLabel: 'Link',
|
||||
cbind: {
|
||||
hidden: '{allowNumberEdit}',
|
||||
value: '{initNumber}'
|
||||
value: '{initNumber}',
|
||||
},
|
||||
width: 45,
|
||||
labelWidth: 30,
|
||||
@ -159,7 +159,7 @@ Ext.define('PVE.form.CorosyncLinkSelector', {
|
||||
cbind: {
|
||||
maxValue: '{maxLinkNumber}',
|
||||
hidden: '{!allowNumberEdit}',
|
||||
value: '{initNumber}'
|
||||
value: '{initNumber}',
|
||||
},
|
||||
width: 80,
|
||||
labelWidth: 30,
|
||||
@ -187,14 +187,14 @@ Ext.define('PVE.form.CorosyncLinkSelector', {
|
||||
let linkNumber = numSelect.getValue();
|
||||
me.name = 'link' + linkNumber;
|
||||
return me.getValue();
|
||||
}
|
||||
},
|
||||
},
|
||||
{
|
||||
xtype: 'button',
|
||||
iconCls: 'fa fa-trash-o',
|
||||
cls: 'removeLinkBtn',
|
||||
cbind: {
|
||||
hidden: '{!allowNumberEdit}'
|
||||
hidden: '{!allowNumberEdit}',
|
||||
},
|
||||
handler: function() {
|
||||
let me = this;
|
||||
@ -202,7 +202,7 @@ Ext.define('PVE.form.CorosyncLinkSelector', {
|
||||
if (parent.removeBtnHandler !== undefined) {
|
||||
parent.removeBtnHandler();
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
{
|
||||
xtype: 'label',
|
||||
@ -212,9 +212,9 @@ Ext.define('PVE.form.CorosyncLinkSelector', {
|
||||
cls: 'x-form-item-label-default',
|
||||
|
||||
cbind: {
|
||||
text: '{text}'
|
||||
}
|
||||
}
|
||||
text: '{text}',
|
||||
},
|
||||
},
|
||||
],
|
||||
|
||||
initComponent: function() {
|
||||
@ -227,12 +227,12 @@ Ext.define('PVE.form.CorosyncLinkSelector', {
|
||||
|
||||
numSelect.validator = this.createNoDuplicatesValidator(
|
||||
'numberfield',
|
||||
gettext("Duplicate link number not allowed.")
|
||||
gettext("Duplicate link number not allowed."),
|
||||
);
|
||||
|
||||
netSelect.validator = this.createNoDuplicatesValidator(
|
||||
'proxmoxNetworkSelector',
|
||||
gettext("Duplicate link address not allowed.")
|
||||
gettext("Duplicate link address not allowed."),
|
||||
);
|
||||
},
|
||||
|
||||
@ -278,7 +278,7 @@ Ext.define('PVE.form.CorosyncLinkSelector', {
|
||||
|
||||
return err || true;
|
||||
};
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
Ext.define('PVE.form.CorosyncLinkEditor', {
|
||||
@ -296,7 +296,7 @@ Ext.define('PVE.form.CorosyncLinkEditor', {
|
||||
maxLinkCount: 8,
|
||||
networks: null,
|
||||
allowNumberEdit: true,
|
||||
infoText: ''
|
||||
infoText: '',
|
||||
},
|
||||
formulas: {
|
||||
addDisabled: function(get) {
|
||||
@ -305,8 +305,8 @@ Ext.define('PVE.form.CorosyncLinkEditor', {
|
||||
},
|
||||
dockHidden: function(get) {
|
||||
return !(get('allowNumberEdit') || get('infoText'));
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
dockedItems: [{
|
||||
@ -316,7 +316,7 @@ Ext.define('PVE.form.CorosyncLinkEditor', {
|
||||
border: false,
|
||||
padding: '6 0 6 0',
|
||||
bind: {
|
||||
hidden: '{dockHidden}'
|
||||
hidden: '{dockHidden}',
|
||||
},
|
||||
items: [
|
||||
{
|
||||
@ -324,17 +324,17 @@ Ext.define('PVE.form.CorosyncLinkEditor', {
|
||||
text: gettext('Add'),
|
||||
bind: {
|
||||
disabled: '{addDisabled}',
|
||||
hidden: '{!allowNumberEdit}'
|
||||
hidden: '{!allowNumberEdit}',
|
||||
},
|
||||
handler: 'addEmptyLink'
|
||||
handler: 'addEmptyLink',
|
||||
},
|
||||
{
|
||||
xtype: 'label',
|
||||
bind: {
|
||||
text: '{infoText}'
|
||||
}
|
||||
}
|
||||
]
|
||||
text: '{infoText}',
|
||||
},
|
||||
},
|
||||
],
|
||||
}],
|
||||
|
||||
setInfoText: function(text) {
|
||||
@ -382,7 +382,7 @@ Ext.define('PVE.form.CorosyncLinkEditor', {
|
||||
let me = this;
|
||||
let vm = me.up('pveCorosyncLinkEditor').getViewModel();
|
||||
return vm.get('linkCount') > 0;
|
||||
}
|
||||
},
|
||||
}],
|
||||
|
||||
initComponent: function() {
|
||||
@ -429,8 +429,8 @@ Ext.define('PVE.form.CorosyncLinkEditor', {
|
||||
if (vm.get('allowNumberEdit')) {
|
||||
controller.addLinkIfEmpty();
|
||||
}
|
||||
}
|
||||
},
|
||||
});
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
|
@ -28,15 +28,15 @@ Ext.define('PVE.dc.GroupEdit', {
|
||||
fieldLabel: gettext('Name'),
|
||||
name: 'groupid',
|
||||
value: me.groupid,
|
||||
allowBlank: false
|
||||
allowBlank: false,
|
||||
},
|
||||
{
|
||||
xtype: 'textfield',
|
||||
fieldLabel: gettext('Comment'),
|
||||
name: 'comment',
|
||||
allowBlank: true
|
||||
}
|
||||
]
|
||||
allowBlank: true,
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
me.callParent();
|
||||
@ -44,5 +44,5 @@ Ext.define('PVE.dc.GroupEdit', {
|
||||
if (!me.isCreate) {
|
||||
me.load();
|
||||
}
|
||||
}
|
||||
},
|
||||
});
|
||||
|
@ -15,8 +15,8 @@ Ext.define('PVE.dc.GroupView', {
|
||||
model: 'pve-groups',
|
||||
sorters: {
|
||||
property: 'groupid',
|
||||
order: 'DESC'
|
||||
}
|
||||
order: 'DESC',
|
||||
},
|
||||
});
|
||||
|
||||
var reload = function() {
|
||||
@ -30,7 +30,7 @@ Ext.define('PVE.dc.GroupView', {
|
||||
callback: function() {
|
||||
reload();
|
||||
},
|
||||
baseurl: '/access/groups/'
|
||||
baseurl: '/access/groups/',
|
||||
});
|
||||
|
||||
var run_editor = function() {
|
||||
@ -39,8 +39,8 @@ Ext.define('PVE.dc.GroupView', {
|
||||
return;
|
||||
}
|
||||
|
||||
var win = Ext.create('PVE.dc.GroupEdit',{
|
||||
groupid: rec.data.groupid
|
||||
var win = Ext.create('PVE.dc.GroupEdit', {
|
||||
groupid: rec.data.groupid,
|
||||
});
|
||||
win.on('destroy', reload);
|
||||
win.show();
|
||||
@ -50,7 +50,7 @@ Ext.define('PVE.dc.GroupView', {
|
||||
text: gettext('Edit'),
|
||||
disabled: true,
|
||||
selModel: sm,
|
||||
handler: run_editor
|
||||
handler: run_editor,
|
||||
});
|
||||
|
||||
var tbar = [
|
||||
@ -60,9 +60,9 @@ Ext.define('PVE.dc.GroupView', {
|
||||
var win = Ext.create('PVE.dc.GroupEdit', {});
|
||||
win.on('destroy', reload);
|
||||
win.show();
|
||||
}
|
||||
},
|
||||
},
|
||||
edit_btn, remove_btn
|
||||
edit_btn, remove_btn,
|
||||
];
|
||||
|
||||
Proxmox.Utils.monStoreErrors(me, store);
|
||||
@ -72,36 +72,36 @@ Ext.define('PVE.dc.GroupView', {
|
||||
selModel: sm,
|
||||
tbar: tbar,
|
||||
viewConfig: {
|
||||
trackOver: false
|
||||
trackOver: false,
|
||||
},
|
||||
columns: [
|
||||
{
|
||||
header: gettext('Name'),
|
||||
width: 200,
|
||||
sortable: true,
|
||||
dataIndex: 'groupid'
|
||||
dataIndex: 'groupid',
|
||||
},
|
||||
{
|
||||
header: gettext('Comment'),
|
||||
sortable: false,
|
||||
renderer: Ext.String.htmlEncode,
|
||||
dataIndex: 'comment',
|
||||
flex: 1
|
||||
flex: 1,
|
||||
},
|
||||
{
|
||||
header: gettext('Users'),
|
||||
sortable: false,
|
||||
dataIndex: 'users',
|
||||
renderer: Ext.String.htmlEncode,
|
||||
flex: 1
|
||||
}
|
||||
flex: 1,
|
||||
},
|
||||
],
|
||||
listeners: {
|
||||
activate: reload,
|
||||
itemdblclick: run_editor
|
||||
}
|
||||
itemdblclick: run_editor,
|
||||
},
|
||||
});
|
||||
|
||||
me.callParent();
|
||||
}
|
||||
},
|
||||
});
|
||||
|
@ -10,9 +10,9 @@ Ext.define('PVE.dc.Guests', {
|
||||
columns: 2,
|
||||
tableAttrs: {
|
||||
style: {
|
||||
width: '100%'
|
||||
}
|
||||
}
|
||||
width: '100%',
|
||||
},
|
||||
},
|
||||
},
|
||||
bodyPadding: '0 20 20 20',
|
||||
|
||||
@ -21,8 +21,8 @@ Ext.define('PVE.dc.Guests', {
|
||||
padding: '0 50 0 50',
|
||||
style: {
|
||||
'text-align':'center',
|
||||
'line-height':'1.2'
|
||||
}
|
||||
'line-height':'1.2',
|
||||
},
|
||||
},
|
||||
items: [{
|
||||
itemId: 'qemu',
|
||||
@ -30,7 +30,7 @@ Ext.define('PVE.dc.Guests', {
|
||||
running: 0,
|
||||
paused: 0,
|
||||
stopped: 0,
|
||||
template: 0
|
||||
template: 0,
|
||||
},
|
||||
tpl: [
|
||||
'<h3>' + gettext("Virtual Machines") + '</h3>',
|
||||
@ -57,15 +57,15 @@ Ext.define('PVE.dc.Guests', {
|
||||
gettext('Templates'),
|
||||
'</div>',
|
||||
'<div class="right-aligned">{template}</div>',
|
||||
'</tpl>'
|
||||
]
|
||||
},{
|
||||
'</tpl>',
|
||||
],
|
||||
}, {
|
||||
itemId: 'lxc',
|
||||
data: {
|
||||
running: 0,
|
||||
paused: 0,
|
||||
stopped: 0,
|
||||
template: 0
|
||||
template: 0,
|
||||
},
|
||||
tpl: [
|
||||
'<h3>' + gettext("LXC Container") + '</h3>',
|
||||
@ -92,13 +92,13 @@ Ext.define('PVE.dc.Guests', {
|
||||
gettext('Templates'),
|
||||
'</div>',
|
||||
'<div class="right-aligned">{template}</div>',
|
||||
'</tpl>'
|
||||
]
|
||||
},{
|
||||
'</tpl>',
|
||||
],
|
||||
}, {
|
||||
itemId: 'error',
|
||||
colspan: 2,
|
||||
data: {
|
||||
num: 0
|
||||
num: 0,
|
||||
},
|
||||
columnWidth: 1,
|
||||
padding: '10 250 0 250',
|
||||
@ -109,8 +109,8 @@ Ext.define('PVE.dc.Guests', {
|
||||
gettext('Error'),
|
||||
'</div>',
|
||||
'<div class="right-aligned">{num}</div>',
|
||||
'</tpl>'
|
||||
]
|
||||
'</tpl>',
|
||||
],
|
||||
}],
|
||||
|
||||
updateValues: function(qemu, lxc, error) {
|
||||
@ -118,5 +118,5 @@ Ext.define('PVE.dc.Guests', {
|
||||
me.getComponent('qemu').update(qemu);
|
||||
me.getComponent('lxc').update(lxc);
|
||||
me.getComponent('error').update({num: error});
|
||||
}
|
||||
},
|
||||
});
|
||||
|
@ -8,15 +8,15 @@ Ext.define('PVE.dc.Health', {
|
||||
height: 250,
|
||||
layout: {
|
||||
type: 'hbox',
|
||||
align: 'stretch'
|
||||
align: 'stretch',
|
||||
},
|
||||
|
||||
defaults: {
|
||||
flex: 1,
|
||||
xtype: 'box',
|
||||
style: {
|
||||
'text-align':'center'
|
||||
}
|
||||
'text-align':'center',
|
||||
},
|
||||
},
|
||||
|
||||
nodeList: [],
|
||||
@ -30,12 +30,12 @@ Ext.define('PVE.dc.Health', {
|
||||
|
||||
var cluster = {
|
||||
iconCls: PVE.Utils.get_health_icon('good', true),
|
||||
text: gettext("Standalone node - no cluster defined")
|
||||
text: gettext("Standalone node - no cluster defined"),
|
||||
};
|
||||
|
||||
var nodes = {
|
||||
online: 0,
|
||||
offline: 0
|
||||
offline: 0,
|
||||
};
|
||||
|
||||
// by default we have one node
|
||||
@ -98,20 +98,20 @@ Ext.define('PVE.dc.Health', {
|
||||
destroy: function() {
|
||||
var me = this;
|
||||
me.cephstore.stopUpdate();
|
||||
}
|
||||
},
|
||||
},
|
||||
|
||||
items: [
|
||||
{
|
||||
itemId: 'clusterstatus',
|
||||
xtype: 'pveHealthWidget',
|
||||
title: gettext('Status')
|
||||
title: gettext('Status'),
|
||||
},
|
||||
{
|
||||
itemId: 'nodestatus',
|
||||
data: {
|
||||
online: 0,
|
||||
offline: 0
|
||||
offline: 0,
|
||||
},
|
||||
tpl: [
|
||||
'<h3>' + gettext('Nodes') + '</h3><br />',
|
||||
@ -127,8 +127,8 @@ Ext.define('PVE.dc.Health', {
|
||||
gettext('Offline'),
|
||||
'</div>',
|
||||
'<div class="right-aligned">{offline}</div>',
|
||||
'</div>'
|
||||
]
|
||||
'</div>',
|
||||
],
|
||||
},
|
||||
{
|
||||
itemId: 'ceph',
|
||||
@ -143,9 +143,9 @@ Ext.define('PVE.dc.Health', {
|
||||
click: function() {
|
||||
var sp = Ext.state.Manager.getProvider();
|
||||
sp.set('dctab', {value:'ceph'}, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
},
|
||||
],
|
||||
|
||||
initComponent: function() {
|
||||
@ -158,11 +158,11 @@ Ext.define('PVE.dc.Health', {
|
||||
storeid: 'pve-cluster-ceph',
|
||||
proxy: {
|
||||
type: 'proxmox',
|
||||
url: '/api2/json/nodes/' + me.nodeList[me.nodeIndex].node + '/ceph/status'
|
||||
}
|
||||
url: '/api2/json/nodes/' + me.nodeList[me.nodeIndex].node + '/ceph/status',
|
||||
},
|
||||
});
|
||||
me.callParent();
|
||||
me.mon(me.cephstore, 'load', me.updateCeph, me);
|
||||
me.cephstore.startUpdate();
|
||||
}
|
||||
},
|
||||
});
|
||||
|
@ -15,13 +15,13 @@ Ext.define('PVE.dc.Log', {
|
||||
model: 'proxmox-cluster-log',
|
||||
proxy: {
|
||||
type: 'proxmox',
|
||||
url: '/api2/json/cluster/log'
|
||||
}
|
||||
url: '/api2/json/cluster/log',
|
||||
},
|
||||
});
|
||||
|
||||
var store = Ext.create('Proxmox.data.DiffStore', {
|
||||
rstore: logstore,
|
||||
appendAtStart: true
|
||||
appendAtStart: true,
|
||||
});
|
||||
|
||||
Ext.apply(me, {
|
||||
@ -38,7 +38,7 @@ Ext.define('PVE.dc.Log', {
|
||||
if (pri && pri <= 3) {
|
||||
return "proxmox-invalid-row";
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
sortableColumns: false,
|
||||
columns: [
|
||||
@ -48,49 +48,49 @@ Ext.define('PVE.dc.Log', {
|
||||
width: 150,
|
||||
renderer: function(value) {
|
||||
return Ext.Date.format(value, "M d H:i:s");
|
||||
}
|
||||
},
|
||||
},
|
||||
{
|
||||
header: gettext("Node"),
|
||||
dataIndex: 'node',
|
||||
width: 150
|
||||
width: 150,
|
||||
},
|
||||
{
|
||||
header: gettext("Service"),
|
||||
dataIndex: 'tag',
|
||||
width: 100
|
||||
width: 100,
|
||||
},
|
||||
{
|
||||
header: "PID",
|
||||
dataIndex: 'pid',
|
||||
width: 100
|
||||
width: 100,
|
||||
},
|
||||
{
|
||||
header: gettext("User name"),
|
||||
dataIndex: 'user',
|
||||
renderer: Ext.String.htmlEncode,
|
||||
width: 150
|
||||
width: 150,
|
||||
},
|
||||
{
|
||||
header: gettext("Severity"),
|
||||
dataIndex: 'pri',
|
||||
renderer: PVE.Utils.render_serverity,
|
||||
width: 100
|
||||
width: 100,
|
||||
},
|
||||
{
|
||||
header: gettext("Message"),
|
||||
dataIndex: 'msg',
|
||||
renderer: Ext.String.htmlEncode,
|
||||
flex: 1
|
||||
}
|
||||
flex: 1,
|
||||
},
|
||||
],
|
||||
listeners: {
|
||||
activate: () => logstore.startUpdate(),
|
||||
deactivate: () => logstore.stopUpdate(),
|
||||
destroy: () => logstore.stopUpdate(),
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
me.callParent();
|
||||
}
|
||||
},
|
||||
});
|
||||
|
@ -11,13 +11,13 @@ Ext.define('PVE.dc.NodeView', {
|
||||
header: gettext('Name'),
|
||||
flex: 1,
|
||||
sortable: true,
|
||||
dataIndex: 'name'
|
||||
dataIndex: 'name',
|
||||
},
|
||||
{
|
||||
header: 'ID',
|
||||
width: 40,
|
||||
sortable: true,
|
||||
dataIndex: 'nodeid'
|
||||
dataIndex: 'nodeid',
|
||||
},
|
||||
{
|
||||
header: gettext('Online'),
|
||||
@ -27,20 +27,20 @@ Ext.define('PVE.dc.NodeView', {
|
||||
renderer: function(value) {
|
||||
var cls = (value)?'good':'critical';
|
||||
return '<i class="fa ' + PVE.Utils.get_health_icon(cls) + '"><i/>';
|
||||
}
|
||||
},
|
||||
},
|
||||
{
|
||||
header: gettext('Support'),
|
||||
width: 100,
|
||||
sortable: true,
|
||||
dataIndex: 'level',
|
||||
renderer: PVE.Utils.render_support_level
|
||||
renderer: PVE.Utils.render_support_level,
|
||||
},
|
||||
{
|
||||
header: gettext('Server Address'),
|
||||
width: 115,
|
||||
sortable: true,
|
||||
dataIndex: 'ip'
|
||||
dataIndex: 'ip',
|
||||
},
|
||||
{
|
||||
header: gettext('CPU usage'),
|
||||
@ -50,8 +50,8 @@ Ext.define('PVE.dc.NodeView', {
|
||||
tdCls: 'x-progressbar-default-cell',
|
||||
xtype: 'widgetcolumn',
|
||||
widget: {
|
||||
xtype: 'pveProgressBar'
|
||||
}
|
||||
xtype: 'pveProgressBar',
|
||||
},
|
||||
},
|
||||
{
|
||||
header: gettext('Memory usage'),
|
||||
@ -61,16 +61,16 @@ Ext.define('PVE.dc.NodeView', {
|
||||
dataIndex: 'memoryusage',
|
||||
xtype: 'widgetcolumn',
|
||||
widget: {
|
||||
xtype: 'pveProgressBar'
|
||||
}
|
||||
xtype: 'pveProgressBar',
|
||||
},
|
||||
},
|
||||
{
|
||||
header: gettext('Uptime'),
|
||||
sortable: true,
|
||||
dataIndex: 'uptime',
|
||||
align: 'right',
|
||||
renderer: Proxmox.Utils.render_uptime
|
||||
}
|
||||
renderer: Proxmox.Utils.render_uptime,
|
||||
},
|
||||
],
|
||||
|
||||
stateful: true,
|
||||
@ -82,7 +82,7 @@ Ext.define('PVE.dc.NodeView', {
|
||||
var me = this.up('grid');
|
||||
var height = Math.max(me.getHeight()-50, 250);
|
||||
me.setHeight(height);
|
||||
}
|
||||
},
|
||||
},
|
||||
{
|
||||
type: 'down',
|
||||
@ -90,26 +90,26 @@ Ext.define('PVE.dc.NodeView', {
|
||||
var me = this.up('grid');
|
||||
var height = me.getHeight()+50;
|
||||
me.setHeight(height);
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
},
|
||||
],
|
||||
}, function() {
|
||||
|
||||
Ext.define('pve-dc-nodes', {
|
||||
extend: 'Ext.data.Model',
|
||||
fields: [ 'id', 'type', 'name', 'nodeid', 'ip', 'level', 'local', 'online'],
|
||||
idProperty: 'id'
|
||||
idProperty: 'id',
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
Ext.define('PVE.widget.ProgressBar',{
|
||||
Ext.define('PVE.widget.ProgressBar', {
|
||||
extend: 'Ext.Progress',
|
||||
alias: 'widget.pveProgressBar',
|
||||
|
||||
animate: true,
|
||||
textTpl: [
|
||||
'{percent}%'
|
||||
'{percent}%',
|
||||
],
|
||||
|
||||
setValue: function(value){
|
||||
@ -123,5 +123,5 @@ Ext.define('PVE.widget.ProgressBar',{
|
||||
} else if (value > 0.59) {
|
||||
me.addCls('warning');
|
||||
}
|
||||
}
|
||||
},
|
||||
});
|
||||
|
@ -24,7 +24,7 @@ Ext.define('PVE.dc.OptionView', {
|
||||
subject: text,
|
||||
onlineHelp: opts.onlineHelp,
|
||||
fieldDefaults: {
|
||||
labelWidth: opts.labelWidth || 100
|
||||
labelWidth: opts.labelWidth || 100,
|
||||
},
|
||||
setValues: function(values) {
|
||||
var edit_value = values[name];
|
||||
@ -48,9 +48,9 @@ Ext.define('PVE.dc.OptionView', {
|
||||
ret_val[name] = PVE.Parser.printPropertyString(values);
|
||||
return ret_val;
|
||||
},
|
||||
items: opts.items
|
||||
}]
|
||||
} : undefined
|
||||
items: opts.items,
|
||||
}],
|
||||
} : undefined,
|
||||
};
|
||||
},
|
||||
|
||||
@ -74,28 +74,28 @@ Ext.define('PVE.dc.OptionView', {
|
||||
renderer: PVE.Utils.render_kvm_language,
|
||||
comboItems: PVE.Utils.kvm_keymap_array(),
|
||||
defaultValue: '__default__',
|
||||
deleteEmpty: true
|
||||
deleteEmpty: true,
|
||||
});
|
||||
me.add_text_row('http_proxy', gettext('HTTP proxy'), {
|
||||
defaultValue: Proxmox.Utils.noneText,
|
||||
vtype: 'HttpProxy',
|
||||
deleteEmpty: true
|
||||
deleteEmpty: true,
|
||||
});
|
||||
me.add_combobox_row('console', gettext('Console Viewer'), {
|
||||
renderer: PVE.Utils.render_console_viewer,
|
||||
comboItems: PVE.Utils.console_viewer_array(),
|
||||
defaultValue: '__default__',
|
||||
deleteEmpty: true
|
||||
deleteEmpty: true,
|
||||
});
|
||||
me.add_text_row('email_from', gettext('Email from address'), {
|
||||
deleteEmpty: true,
|
||||
vtype: 'proxmoxMail',
|
||||
defaultValue: 'root@$hostname'
|
||||
defaultValue: 'root@$hostname',
|
||||
});
|
||||
me.add_text_row('mac_prefix', gettext('MAC address prefix'), {
|
||||
deleteEmpty: true,
|
||||
vtype: 'MacPrefix',
|
||||
defaultValue: Proxmox.Utils.noneText
|
||||
defaultValue: Proxmox.Utils.noneText,
|
||||
});
|
||||
me.add_inputpanel_row('migration', gettext('Migration Settings'), {
|
||||
renderer: PVE.Utils.render_dc_ha_opts,
|
||||
@ -115,8 +115,8 @@ Ext.define('PVE.dc.OptionView', {
|
||||
value: null,
|
||||
emptyText: Proxmox.Utils.defaultText,
|
||||
autoSelect: false,
|
||||
skipEmptyText: true
|
||||
}]
|
||||
skipEmptyText: true,
|
||||
}],
|
||||
});
|
||||
me.add_inputpanel_row('ha', gettext('HA Settings'), {
|
||||
renderer: PVE.Utils.render_dc_ha_opts,
|
||||
@ -134,10 +134,10 @@ Ext.define('PVE.dc.OptionView', {
|
||||
['freeze', 'freeze'],
|
||||
['failover', 'failover'],
|
||||
['migrate', 'migrate'],
|
||||
['conditional', 'conditional']
|
||||
['conditional', 'conditional'],
|
||||
],
|
||||
defaultValue: '__default__'
|
||||
}]
|
||||
defaultValue: '__default__',
|
||||
}],
|
||||
});
|
||||
me.add_inputpanel_row('u2f', gettext('U2F Settings'), {
|
||||
renderer: PVE.Utils.render_dc_ha_opts,
|
||||
@ -168,7 +168,7 @@ Ext.define('PVE.dc.OptionView', {
|
||||
xtype: 'displayfield',
|
||||
userCls: 'pmx-hint',
|
||||
value: gettext('NOTE: Changing an AppID breaks existing U2F registrations!'),
|
||||
}]
|
||||
}],
|
||||
});
|
||||
me.add_inputpanel_row('bwlimit', gettext('Bandwidth Limits'), {
|
||||
renderer: me.render_bwlimits,
|
||||
@ -210,7 +210,7 @@ Ext.define('PVE.dc.OptionView', {
|
||||
fieldLabel: gettext('Disk Move'),
|
||||
emptyText: gettext('default'),
|
||||
backendUnit: "KiB",
|
||||
}]
|
||||
}],
|
||||
});
|
||||
me.add_integer_row('max_workers', gettext('Maximal Workers/bulk-action'), {
|
||||
deleteEmpty: true,
|
||||
@ -227,17 +227,17 @@ Ext.define('PVE.dc.OptionView', {
|
||||
xtype: 'proxmoxButton',
|
||||
disabled: true,
|
||||
handler: function() { me.run_editor(); },
|
||||
selModel: me.selModel
|
||||
selModel: me.selModel,
|
||||
}],
|
||||
url: "/api2/json/cluster/options",
|
||||
editorConfig: {
|
||||
url: "/api2/extjs/cluster/options"
|
||||
url: "/api2/extjs/cluster/options",
|
||||
},
|
||||
interval: 5000,
|
||||
cwidth1: 200,
|
||||
listeners: {
|
||||
itemdblclick: me.run_editor
|
||||
}
|
||||
itemdblclick: me.run_editor,
|
||||
},
|
||||
});
|
||||
|
||||
me.callParent();
|
||||
@ -258,5 +258,5 @@ Ext.define('PVE.dc.OptionView', {
|
||||
me.on('activate', me.rstore.startUpdate);
|
||||
me.on('destroy', me.rstore.stopUpdate);
|
||||
me.on('deactivate', me.rstore.stopUpdate);
|
||||
}
|
||||
},
|
||||
});
|
||||
|
@ -15,8 +15,8 @@ Ext.define('PVE.dc.PoolView', {
|
||||
model: 'pve-pools',
|
||||
sorters: {
|
||||
property: 'poolid',
|
||||
order: 'DESC'
|
||||
}
|
||||
order: 'DESC',
|
||||
},
|
||||
});
|
||||
|
||||
var reload = function() {
|
||||
@ -30,7 +30,7 @@ Ext.define('PVE.dc.PoolView', {
|
||||
baseurl: '/pools/',
|
||||
callback: function () {
|
||||
reload();
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
var run_editor = function() {
|
||||
@ -39,8 +39,8 @@ Ext.define('PVE.dc.PoolView', {
|
||||
return;
|
||||
}
|
||||
|
||||
var win = Ext.create('PVE.dc.PoolEdit',{
|
||||
poolid: rec.data.poolid
|
||||
var win = Ext.create('PVE.dc.PoolEdit', {
|
||||
poolid: rec.data.poolid,
|
||||
});
|
||||
win.on('destroy', reload);
|
||||
win.show();
|
||||
@ -50,7 +50,7 @@ Ext.define('PVE.dc.PoolView', {
|
||||
text: gettext('Edit'),
|
||||
disabled: true,
|
||||
selModel: sm,
|
||||
handler: run_editor
|
||||
handler: run_editor,
|
||||
});
|
||||
|
||||
var tbar = [
|
||||
@ -60,9 +60,9 @@ Ext.define('PVE.dc.PoolView', {
|
||||
var win = Ext.create('PVE.dc.PoolEdit', {});
|
||||
win.on('destroy', reload);
|
||||
win.show();
|
||||
}
|
||||
},
|
||||
},
|
||||
edit_btn, remove_btn
|
||||
edit_btn, remove_btn,
|
||||
];
|
||||
|
||||
Proxmox.Utils.monStoreErrors(me, store);
|
||||
@ -72,29 +72,29 @@ Ext.define('PVE.dc.PoolView', {
|
||||
selModel: sm,
|
||||
tbar: tbar,
|
||||
viewConfig: {
|
||||
trackOver: false
|
||||
trackOver: false,
|
||||
},
|
||||
columns: [
|
||||
{
|
||||
header: gettext('Name'),
|
||||
width: 200,
|
||||
sortable: true,
|
||||
dataIndex: 'poolid'
|
||||
dataIndex: 'poolid',
|
||||
},
|
||||
{
|
||||
header: gettext('Comment'),
|
||||
sortable: false,
|
||||
renderer: Ext.String.htmlEncode,
|
||||
dataIndex: 'comment',
|
||||
flex: 1
|
||||
}
|
||||
flex: 1,
|
||||
},
|
||||
],
|
||||
listeners: {
|
||||
activate: reload,
|
||||
itemdblclick: run_editor
|
||||
}
|
||||
itemdblclick: run_editor,
|
||||
},
|
||||
});
|
||||
|
||||
me.callParent();
|
||||
}
|
||||
},
|
||||
});
|
||||
|
@ -30,16 +30,16 @@ Ext.define('PVE.dc.RoleEdit', {
|
||||
name: 'roleid',
|
||||
value: me.roleid,
|
||||
allowBlank: false,
|
||||
fieldLabel: gettext('Name')
|
||||
fieldLabel: gettext('Name'),
|
||||
},
|
||||
{
|
||||
xtype: 'pvePrivilegesSelector',
|
||||
name: 'privs',
|
||||
value: me.privs,
|
||||
allowBlank: false,
|
||||
fieldLabel: gettext('Privileges')
|
||||
}
|
||||
]
|
||||
fieldLabel: gettext('Privileges'),
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
me.callParent();
|
||||
@ -52,10 +52,10 @@ Ext.define('PVE.dc.RoleEdit', {
|
||||
|
||||
me.setValues({
|
||||
privs: keys,
|
||||
roleid: me.roleid
|
||||
roleid: me.roleid,
|
||||
});
|
||||
}
|
||||
},
|
||||
});
|
||||
}
|
||||
}
|
||||
},
|
||||
});
|
||||
|
@ -15,8 +15,8 @@ Ext.define('PVE.dc.RoleView', {
|
||||
model: 'pmx-roles',
|
||||
sorters: {
|
||||
property: 'roleid',
|
||||
order: 'DESC'
|
||||
}
|
||||
order: 'DESC',
|
||||
},
|
||||
});
|
||||
|
||||
var render_privs = function(value, metaData) {
|
||||
@ -49,9 +49,9 @@ Ext.define('PVE.dc.RoleView', {
|
||||
return;
|
||||
}
|
||||
|
||||
var win = Ext.create('PVE.dc.RoleEdit',{
|
||||
var win = Ext.create('PVE.dc.RoleEdit', {
|
||||
roleid: rec.data.roleid,
|
||||
privs: rec.data.privs
|
||||
privs: rec.data.privs,
|
||||
});
|
||||
win.on('destroy', reload);
|
||||
win.show();
|
||||
@ -62,7 +62,7 @@ Ext.define('PVE.dc.RoleView', {
|
||||
selModel: sm,
|
||||
|
||||
viewConfig: {
|
||||
trackOver: false
|
||||
trackOver: false,
|
||||
},
|
||||
columns: [
|
||||
{
|
||||
@ -70,13 +70,13 @@ Ext.define('PVE.dc.RoleView', {
|
||||
width: 65,
|
||||
sortable: true,
|
||||
dataIndex: 'special',
|
||||
renderer: Proxmox.Utils.format_boolean
|
||||
renderer: Proxmox.Utils.format_boolean,
|
||||
},
|
||||
{
|
||||
header: gettext('Name'),
|
||||
width: 150,
|
||||
sortable: true,
|
||||
dataIndex: 'roleid'
|
||||
dataIndex: 'roleid',
|
||||
},
|
||||
{
|
||||
itemid: 'privs',
|
||||
@ -84,14 +84,14 @@ Ext.define('PVE.dc.RoleView', {
|
||||
sortable: false,
|
||||
renderer: render_privs,
|
||||
dataIndex: 'privs',
|
||||
flex: 1
|
||||
}
|
||||
flex: 1,
|
||||
},
|
||||
],
|
||||
listeners: {
|
||||
activate: function() {
|
||||
store.load();
|
||||
},
|
||||
itemdblclick: run_editor
|
||||
itemdblclick: run_editor,
|
||||
},
|
||||
tbar: [
|
||||
{
|
||||
@ -100,7 +100,7 @@ Ext.define('PVE.dc.RoleView', {
|
||||
var win = Ext.create('PVE.dc.RoleEdit', {});
|
||||
win.on('destroy', reload);
|
||||
win.show();
|
||||
}
|
||||
},
|
||||
},
|
||||
{
|
||||
xtype: 'proxmoxButton',
|
||||
@ -118,10 +118,10 @@ Ext.define('PVE.dc.RoleView', {
|
||||
},
|
||||
baseurl: '/access/roles/',
|
||||
enableFn: (rec) => !rec.data.special,
|
||||
}
|
||||
]
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
me.callParent();
|
||||
}
|
||||
},
|
||||
});
|
||||
|
@ -2,7 +2,7 @@ Ext.define('pve-security-groups', {
|
||||
extend: 'Ext.data.Model',
|
||||
|
||||
fields: [ 'group', 'comment', 'digest' ],
|
||||
idProperty: 'group'
|
||||
idProperty: 'group',
|
||||
});
|
||||
|
||||
Ext.define('PVE.SecurityGroupEdit', {
|
||||
@ -28,14 +28,14 @@ Ext.define('PVE.SecurityGroupEdit', {
|
||||
name: 'group',
|
||||
value: me.group_name || '',
|
||||
fieldLabel: gettext('Name'),
|
||||
allowBlank: false
|
||||
allowBlank: false,
|
||||
},
|
||||
{
|
||||
xtype: 'textfield',
|
||||
name: 'comment',
|
||||
value: me.group_comment || '',
|
||||
fieldLabel: gettext('Comment')
|
||||
}
|
||||
fieldLabel: gettext('Comment'),
|
||||
},
|
||||
];
|
||||
|
||||
if (me.isCreate) {
|
||||
@ -45,24 +45,24 @@ Ext.define('PVE.SecurityGroupEdit', {
|
||||
items.push({
|
||||
xtype: 'hiddenfield',
|
||||
name: 'rename',
|
||||
value: me.group_name
|
||||
value: me.group_name,
|
||||
});
|
||||
}
|
||||
|
||||
var ipanel = Ext.create('Proxmox.panel.InputPanel', {
|
||||
// InputPanel does not have a 'create' property, does it need a 'isCreate'
|
||||
isCreate: me.isCreate,
|
||||
items: items
|
||||
items: items,
|
||||
});
|
||||
|
||||
|
||||
Ext.apply(me, {
|
||||
subject: subject,
|
||||
items: [ ipanel ]
|
||||
items: [ ipanel ],
|
||||
});
|
||||
|
||||
me.callParent();
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
Ext.define('PVE.SecurityGroupList', {
|
||||
@ -95,12 +95,12 @@ Ext.define('PVE.SecurityGroupList', {
|
||||
model: 'pve-security-groups',
|
||||
proxy: {
|
||||
type: 'proxmox',
|
||||
url: '/api2/json' + me.base_url
|
||||
url: '/api2/json' + me.base_url,
|
||||
},
|
||||
sorters: {
|
||||
property: 'group',
|
||||
order: 'DESC'
|
||||
}
|
||||
order: 'DESC',
|
||||
},
|
||||
});
|
||||
|
||||
var sm = Ext.create('Ext.selection.RowModel', {});
|
||||
@ -125,7 +125,7 @@ Ext.define('PVE.SecurityGroupList', {
|
||||
var win = Ext.create('PVE.SecurityGroupEdit', {
|
||||
digest: rec.data.digest,
|
||||
group_name: rec.data.group,
|
||||
group_comment: rec.data.comment
|
||||
group_comment: rec.data.comment,
|
||||
});
|
||||
win.show();
|
||||
win.on('destroy', reload);
|
||||
@ -135,7 +135,7 @@ Ext.define('PVE.SecurityGroupList', {
|
||||
text: gettext('Edit'),
|
||||
disabled: true,
|
||||
selModel: sm,
|
||||
handler: run_editor
|
||||
handler: run_editor,
|
||||
});
|
||||
|
||||
me.addBtn = new Proxmox.button.Button({
|
||||
@ -145,7 +145,7 @@ Ext.define('PVE.SecurityGroupList', {
|
||||
var win = Ext.create('PVE.SecurityGroupEdit', {});
|
||||
win.show();
|
||||
win.on('destroy', reload);
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
me.removeBtn = Ext.create('Proxmox.button.StdRemoveButton', {
|
||||
@ -156,7 +156,7 @@ Ext.define('PVE.SecurityGroupList', {
|
||||
},
|
||||
callback: function() {
|
||||
reload();
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
Ext.apply(me, {
|
||||
@ -165,7 +165,7 @@ Ext.define('PVE.SecurityGroupList', {
|
||||
selModel: sm,
|
||||
columns: [
|
||||
{ header: gettext('Group'), dataIndex: 'group', width: '100' },
|
||||
{ header: gettext('Comment'), dataIndex: 'comment', renderer: Ext.String.htmlEncode, flex: 1 }
|
||||
{ header: gettext('Comment'), dataIndex: 'comment', renderer: Ext.String.htmlEncode, flex: 1 },
|
||||
],
|
||||
listeners: {
|
||||
itemdblclick: run_editor,
|
||||
@ -176,14 +176,14 @@ Ext.define('PVE.SecurityGroupList', {
|
||||
deselect: function() {
|
||||
me.rule_panel.setBaseUrl(undefined);
|
||||
},
|
||||
show: reload
|
||||
}
|
||||
show: reload,
|
||||
},
|
||||
});
|
||||
|
||||
me.callParent();
|
||||
|
||||
store.load();
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
Ext.define('PVE.SecurityGroups', {
|
||||
@ -200,7 +200,7 @@ Ext.define('PVE.SecurityGroups', {
|
||||
allow_groups: false,
|
||||
list_refs_url: '/cluster/firewall/refs',
|
||||
tbar_prefix: '<b>' + gettext('Rules') + ':</b>',
|
||||
border: false
|
||||
border: false,
|
||||
});
|
||||
|
||||
var sglist = Ext.createWidget('pveSecurityGroupList', {
|
||||
@ -208,7 +208,7 @@ Ext.define('PVE.SecurityGroups', {
|
||||
rule_panel: rule_panel,
|
||||
width: '25%',
|
||||
border: false,
|
||||
split: true
|
||||
split: true,
|
||||
});
|
||||
|
||||
|
||||
@ -218,10 +218,10 @@ Ext.define('PVE.SecurityGroups', {
|
||||
listeners: {
|
||||
show: function() {
|
||||
sglist.fireEvent('show', sglist);
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
me.callParent();
|
||||
}
|
||||
},
|
||||
});
|
||||
|
@ -21,8 +21,8 @@ Ext.define('PVE.dc.StorageView', {
|
||||
canDoBackups: schema.backups,
|
||||
autoShow: true,
|
||||
listeners: {
|
||||
destroy: this.reloadStore
|
||||
}
|
||||
destroy: this.reloadStore,
|
||||
},
|
||||
});
|
||||
},
|
||||
|
||||
@ -33,12 +33,12 @@ Ext.define('PVE.dc.StorageView', {
|
||||
model: 'pve-storage',
|
||||
proxy: {
|
||||
type: 'proxmox',
|
||||
url: "/api2/json/storage"
|
||||
url: "/api2/json/storage",
|
||||
},
|
||||
sorters: {
|
||||
property: 'storage',
|
||||
order: 'DESC'
|
||||
}
|
||||
order: 'DESC',
|
||||
},
|
||||
});
|
||||
|
||||
var reload = function() {
|
||||
@ -62,13 +62,13 @@ Ext.define('PVE.dc.StorageView', {
|
||||
text: gettext('Edit'),
|
||||
disabled: true,
|
||||
selModel: sm,
|
||||
handler: run_editor
|
||||
handler: run_editor,
|
||||
});
|
||||
|
||||
var remove_btn = Ext.create('Proxmox.button.StdRemoveButton', {
|
||||
selModel: sm,
|
||||
baseurl: '/storage/',
|
||||
callback: reload
|
||||
callback: reload,
|
||||
});
|
||||
|
||||
// else we cannot dynamically generate the add menu handlers
|
||||
@ -84,7 +84,7 @@ Ext.define('PVE.dc.StorageView', {
|
||||
addMenuItems.push({
|
||||
text: PVE.Utils.format_storage_type(type),
|
||||
iconCls: 'fa fa-fw fa-' + storage.faIcon,
|
||||
handler: addHandleGenerator(type)
|
||||
handler: addHandleGenerator(type),
|
||||
});
|
||||
}
|
||||
|
||||
@ -93,38 +93,38 @@ Ext.define('PVE.dc.StorageView', {
|
||||
reloadStore: reload,
|
||||
selModel: sm,
|
||||
viewConfig: {
|
||||
trackOver: false
|
||||
trackOver: false,
|
||||
},
|
||||
tbar: [
|
||||
{
|
||||
text: gettext('Add'),
|
||||
menu: new Ext.menu.Menu({
|
||||
items: addMenuItems
|
||||
})
|
||||
items: addMenuItems,
|
||||
}),
|
||||
},
|
||||
remove_btn,
|
||||
edit_btn
|
||||
edit_btn,
|
||||
],
|
||||
columns: [
|
||||
{
|
||||
header: 'ID',
|
||||
flex: 2,
|
||||
sortable: true,
|
||||
dataIndex: 'storage'
|
||||
dataIndex: 'storage',
|
||||
},
|
||||
{
|
||||
header: gettext('Type'),
|
||||
flex: 1,
|
||||
sortable: true,
|
||||
dataIndex: 'type',
|
||||
renderer: PVE.Utils.format_storage_type
|
||||
renderer: PVE.Utils.format_storage_type,
|
||||
},
|
||||
{
|
||||
header: gettext('Content'),
|
||||
flex: 3,
|
||||
sortable: true,
|
||||
dataIndex: 'content',
|
||||
renderer: PVE.Utils.format_content_types
|
||||
renderer: PVE.Utils.format_content_types,
|
||||
},
|
||||
{
|
||||
header: gettext('Path') + '/' + gettext('Target'),
|
||||
@ -136,37 +136,37 @@ Ext.define('PVE.dc.StorageView', {
|
||||
return record.data.target;
|
||||
}
|
||||
return value;
|
||||
}
|
||||
},
|
||||
},
|
||||
{
|
||||
header: gettext('Shared'),
|
||||
flex: 1,
|
||||
sortable: true,
|
||||
dataIndex: 'shared',
|
||||
renderer: Proxmox.Utils.format_boolean
|
||||
renderer: Proxmox.Utils.format_boolean,
|
||||
},
|
||||
{
|
||||
header: gettext('Enabled'),
|
||||
flex: 1,
|
||||
sortable: true,
|
||||
dataIndex: 'disable',
|
||||
renderer: Proxmox.Utils.format_neg_boolean
|
||||
renderer: Proxmox.Utils.format_neg_boolean,
|
||||
},
|
||||
{
|
||||
header: gettext('Bandwidth Limit'),
|
||||
flex: 2,
|
||||
sortable: true,
|
||||
dataIndex: 'bwlimit'
|
||||
}
|
||||
dataIndex: 'bwlimit',
|
||||
},
|
||||
],
|
||||
listeners: {
|
||||
activate: reload,
|
||||
itemdblclick: run_editor
|
||||
}
|
||||
itemdblclick: run_editor,
|
||||
},
|
||||
});
|
||||
|
||||
me.callParent();
|
||||
}
|
||||
},
|
||||
}, function() {
|
||||
|
||||
Ext.define('pve-storage', {
|
||||
@ -174,9 +174,9 @@ Ext.define('PVE.dc.StorageView', {
|
||||
fields: [
|
||||
'path', 'type', 'content', 'server', 'portal', 'target', 'export', 'storage',
|
||||
{ name: 'shared', type: 'boolean'},
|
||||
{ name: 'disable', type: 'boolean'}
|
||||
{ name: 'disable', type: 'boolean'},
|
||||
],
|
||||
idProperty: 'storage'
|
||||
idProperty: 'storage',
|
||||
});
|
||||
|
||||
});
|
||||
|
@ -30,27 +30,27 @@ Ext.define('PVE.dc.Summary', {
|
||||
layout: 'hbox',
|
||||
defaults: {
|
||||
xtype: 'proxmoxGauge',
|
||||
flex: 1
|
||||
flex: 1,
|
||||
},
|
||||
items:[
|
||||
{
|
||||
title: gettext('CPU'),
|
||||
itemId: 'cpu'
|
||||
itemId: 'cpu',
|
||||
},
|
||||
{
|
||||
title: gettext('Memory'),
|
||||
itemId: 'memory'
|
||||
itemId: 'memory',
|
||||
},
|
||||
{
|
||||
title: gettext('Storage'),
|
||||
itemId: 'storage'
|
||||
}
|
||||
]
|
||||
itemId: 'storage',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
itemId: 'nodeview',
|
||||
xtype: 'pveDcNodeView',
|
||||
height: 250
|
||||
height: 250,
|
||||
},
|
||||
{
|
||||
title: gettext('Subscriptions'),
|
||||
@ -66,11 +66,11 @@ Ext.define('PVE.dc.Summary', {
|
||||
if (this.component.userCls === 'pointer') {
|
||||
window.open('https://www.proxmox.com/en/proxmox-ve/pricing', '_blank');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
|
||||
listeners: {
|
||||
@ -88,20 +88,20 @@ Ext.define('PVE.dc.Summary', {
|
||||
model: 'pve-dc-nodes',
|
||||
proxy: {
|
||||
type: 'proxmox',
|
||||
url: "/api2/json/cluster/status"
|
||||
}
|
||||
url: "/api2/json/cluster/status",
|
||||
},
|
||||
});
|
||||
|
||||
var gridstore = Ext.create('Proxmox.data.DiffStore', {
|
||||
rstore: rstore,
|
||||
filters: {
|
||||
property: 'type',
|
||||
value: 'node'
|
||||
value: 'node',
|
||||
},
|
||||
sorters: {
|
||||
property: 'id',
|
||||
direction: 'ASC'
|
||||
}
|
||||
direction: 'ASC',
|
||||
},
|
||||
});
|
||||
|
||||
me.callParent();
|
||||
@ -141,13 +141,13 @@ Ext.define('PVE.dc.Summary', {
|
||||
running: 0,
|
||||
paused: 0,
|
||||
stopped: 0,
|
||||
template: 0
|
||||
template: 0,
|
||||
};
|
||||
var lxc = {
|
||||
running: 0,
|
||||
paused: 0,
|
||||
stopped: 0,
|
||||
template: 0
|
||||
template: 0,
|
||||
};
|
||||
var error = 0;
|
||||
|
||||
@ -215,7 +215,7 @@ Ext.define('PVE.dc.Summary', {
|
||||
text = Ext.String.format(gettext('{0} of {1}'), PVE.Utils.render_size(used), PVE.Utils.render_size(total));
|
||||
storagestat.updateValue((used/total), text);
|
||||
|
||||
gueststatus.updateValues(qemu,lxc,error);
|
||||
gueststatus.updateValues(qemu, lxc, error);
|
||||
|
||||
me.suspendLayout = false;
|
||||
me.updateLayout(true);
|
||||
@ -255,27 +255,27 @@ Ext.define('PVE.dc.Summary', {
|
||||
var data = {
|
||||
title: Proxmox.Utils.unknownText,
|
||||
text: Proxmox.Utils.unknownText,
|
||||
iconCls: PVE.Utils.get_health_icon(undefined, true)
|
||||
iconCls: PVE.Utils.get_health_icon(undefined, true),
|
||||
};
|
||||
if (level === '') {
|
||||
data = {
|
||||
title: gettext('No Subscription'),
|
||||
iconCls: PVE.Utils.get_health_icon('critical', true),
|
||||
text: gettext('You have at least one node without subscription.')
|
||||
text: gettext('You have at least one node without subscription.'),
|
||||
};
|
||||
subs.setUserCls('pointer');
|
||||
} else if (mixed) {
|
||||
data = {
|
||||
title: gettext('Mixed Subscriptions'),
|
||||
iconCls: PVE.Utils.get_health_icon('warning', true),
|
||||
text: gettext('Warning: Your subscription levels are not the same.')
|
||||
text: gettext('Warning: Your subscription levels are not the same.'),
|
||||
};
|
||||
subs.setUserCls('pointer');
|
||||
} else if (level) {
|
||||
data = {
|
||||
title: PVE.Utils.render_support_level(level),
|
||||
iconCls: PVE.Utils.get_health_icon('good', true),
|
||||
text: gettext('Your subscription status is valid.')
|
||||
text: gettext('Your subscription status is valid.'),
|
||||
};
|
||||
subs.setUserCls('');
|
||||
}
|
||||
@ -295,6 +295,6 @@ Ext.define('PVE.dc.Summary', {
|
||||
});
|
||||
|
||||
rstore.startUpdate();
|
||||
}
|
||||
},
|
||||
|
||||
});
|
||||
|
@ -71,7 +71,7 @@ Ext.define('PVE.dc.Support', {
|
||||
} else {
|
||||
me.updateInactive(data);
|
||||
}
|
||||
}
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
@ -79,10 +79,10 @@ Ext.define('PVE.dc.Support', {
|
||||
autoScroll: true,
|
||||
bodyStyle: 'padding:10px',
|
||||
listeners: {
|
||||
activate: reload
|
||||
}
|
||||
activate: reload,
|
||||
},
|
||||
});
|
||||
|
||||
me.callParent();
|
||||
}
|
||||
},
|
||||
});
|
||||
|
@ -137,7 +137,7 @@ Ext.define('PVE.dc.SyncWindow', {
|
||||
reference: 'defaulthint',
|
||||
value: gettext('Default sync options can be set by editing the realm.'),
|
||||
userCls: 'pmx-hint',
|
||||
hidden: true
|
||||
hidden: true,
|
||||
},
|
||||
],
|
||||
}],
|
||||
|
@ -14,7 +14,7 @@ Ext.define('PVE.window.TFAEdit', {
|
||||
|
||||
layout: {
|
||||
type: 'vbox',
|
||||
align: 'stretch'
|
||||
align: 'stretch',
|
||||
},
|
||||
|
||||
updateQrCode: function() {
|
||||
@ -34,7 +34,7 @@ Ext.define('PVE.window.TFAEdit', {
|
||||
'&period=' + values.step +
|
||||
'&digits=' + values.digits +
|
||||
'&algorithm=' + algorithm +
|
||||
'&issuer=' + encodeURIComponent(values.issuer)
|
||||
'&issuer=' + encodeURIComponent(values.issuer),
|
||||
);
|
||||
|
||||
me.lookup('challenge').setVisible(true);
|
||||
@ -44,7 +44,7 @@ Ext.define('PVE.window.TFAEdit', {
|
||||
showError: function(error) {
|
||||
Ext.Msg.alert(
|
||||
gettext('Error'),
|
||||
PVE.Utils.render_u2f_error(error)
|
||||
PVE.Utils.render_u2f_error(error),
|
||||
);
|
||||
},
|
||||
|
||||
@ -56,7 +56,7 @@ Ext.define('PVE.window.TFAEdit', {
|
||||
var msg = Ext.Msg.show({
|
||||
title: 'U2F: '+gettext('Setup'),
|
||||
message: gettext('Please press the button on your U2F Device'),
|
||||
buttons: []
|
||||
buttons: [],
|
||||
});
|
||||
Ext.Function.defer(function() {
|
||||
u2f.register(data.appId, [data], [], function(data) {
|
||||
@ -75,7 +75,7 @@ Ext.define('PVE.window.TFAEdit', {
|
||||
var params = {
|
||||
userid: me.userid,
|
||||
action: 'confirm',
|
||||
response: JSON.stringify(data)
|
||||
response: JSON.stringify(data),
|
||||
};
|
||||
if (Proxmox.UserName !== 'root@pam') {
|
||||
params.password = me.lookup('password').value;
|
||||
@ -89,12 +89,12 @@ Ext.define('PVE.window.TFAEdit', {
|
||||
Ext.Msg.show({
|
||||
title: gettext('Success'),
|
||||
message: gettext('U2F Device successfully connected.'),
|
||||
buttons: Ext.Msg.OK
|
||||
buttons: Ext.Msg.OK,
|
||||
});
|
||||
},
|
||||
failure: function(response, opts) {
|
||||
Ext.Msg.alert(gettext('Error'), response.htmlStatus);
|
||||
}
|
||||
},
|
||||
});
|
||||
},
|
||||
|
||||
@ -128,7 +128,7 @@ Ext.define('PVE.window.TFAEdit', {
|
||||
selectedTab: function(get) {
|
||||
return (get('tfa_type') || 'totp') + '-panel';
|
||||
},
|
||||
}
|
||||
},
|
||||
},
|
||||
|
||||
afterLoading: function(realm_tfa_type, user_tfa_type) {
|
||||
@ -167,8 +167,8 @@ Ext.define('PVE.window.TFAEdit', {
|
||||
gettext('Error'),
|
||||
Ext.String.format(
|
||||
gettext("Custom 2nd factor configuration is not supported on realms with '{0}' TFA."),
|
||||
realm_tfa_type
|
||||
)
|
||||
realm_tfa_type,
|
||||
),
|
||||
);
|
||||
}
|
||||
},
|
||||
@ -180,7 +180,7 @@ Ext.define('PVE.window.TFAEdit', {
|
||||
change: function() {
|
||||
var me = this.getView();
|
||||
me.updateQrCode();
|
||||
}
|
||||
},
|
||||
},
|
||||
'field': {
|
||||
validitychange: function(field, valid) {
|
||||
@ -190,7 +190,7 @@ Ext.define('PVE.window.TFAEdit', {
|
||||
var challenge = me.lookup('challenge');
|
||||
var password = me.lookup('password');
|
||||
viewModel.set('valid', form.isValid() && challenge.isValid() && password.isValid());
|
||||
}
|
||||
},
|
||||
},
|
||||
'#': {
|
||||
show: function() {
|
||||
@ -209,14 +209,14 @@ Ext.define('PVE.window.TFAEdit', {
|
||||
failure: function(response, opts) {
|
||||
me.close();
|
||||
Ext.Msg.alert(gettext('Error'), response.htmlStatus);
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
me.qrdiv = document.createElement('center');
|
||||
me.qrcode = new QRCode(me.qrdiv, {
|
||||
width: 256,
|
||||
height: 256,
|
||||
correctLevel: QRCode.CorrectLevel.M
|
||||
correctLevel: QRCode.CorrectLevel.M,
|
||||
});
|
||||
me.down('#qrbox').getEl().appendChild(me.qrdiv);
|
||||
|
||||
@ -224,14 +224,14 @@ Ext.define('PVE.window.TFAEdit', {
|
||||
me.lookup('password').setVisible(false);
|
||||
me.lookup('password').setDisabled(true);
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
'#tfatabs': {
|
||||
tabchange: function(panel, newcard) {
|
||||
var viewmodel = this.getViewModel();
|
||||
viewmodel.set('in_totp_tab', newcard.itemId === 'totp-panel');
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
applySettings: function() {
|
||||
@ -244,10 +244,10 @@ Ext.define('PVE.window.TFAEdit', {
|
||||
config: PVE.Parser.printPropertyString({
|
||||
type: 'oath',
|
||||
digits: values.digits,
|
||||
step: values.step
|
||||
step: values.step,
|
||||
}),
|
||||
// this is used to verify that the client generates the correct codes:
|
||||
response: me.lookup('challenge').value
|
||||
response: me.lookup('challenge').value,
|
||||
};
|
||||
|
||||
if (Proxmox.UserName !== 'root@pam') {
|
||||
@ -264,7 +264,7 @@ Ext.define('PVE.window.TFAEdit', {
|
||||
},
|
||||
failure: function(response, opts) {
|
||||
Ext.Msg.alert(gettext('Error'), response.htmlStatus);
|
||||
}
|
||||
},
|
||||
});
|
||||
},
|
||||
|
||||
@ -273,7 +273,7 @@ Ext.define('PVE.window.TFAEdit', {
|
||||
var values = me.lookup('totp_form').getValues();
|
||||
var params = {
|
||||
userid: me.getView().userid,
|
||||
action: 'delete'
|
||||
action: 'delete',
|
||||
};
|
||||
|
||||
if (Proxmox.UserName !== 'root@pam') {
|
||||
@ -290,7 +290,7 @@ Ext.define('PVE.window.TFAEdit', {
|
||||
},
|
||||
failure: function(response, opts) {
|
||||
Ext.Msg.alert(gettext('Error'), response.htmlStatus);
|
||||
}
|
||||
},
|
||||
});
|
||||
},
|
||||
|
||||
@ -318,7 +318,7 @@ Ext.define('PVE.window.TFAEdit', {
|
||||
|
||||
var params = {
|
||||
userid: me.getView().userid,
|
||||
action: 'new'
|
||||
action: 'new',
|
||||
};
|
||||
|
||||
if (Proxmox.UserName !== 'root@pam') {
|
||||
@ -335,9 +335,9 @@ Ext.define('PVE.window.TFAEdit', {
|
||||
},
|
||||
failure: function(response, opts) {
|
||||
Ext.Msg.alert(gettext('Error'), response.htmlStatus);
|
||||
}
|
||||
},
|
||||
});
|
||||
}
|
||||
},
|
||||
},
|
||||
|
||||
items: [
|
||||
@ -358,11 +358,11 @@ Ext.define('PVE.window.TFAEdit', {
|
||||
tfa_type: 'totp',
|
||||
border: false,
|
||||
bind: {
|
||||
disabled: '{!canSetupTOTP}'
|
||||
disabled: '{!canSetupTOTP}',
|
||||
},
|
||||
layout: {
|
||||
type: 'vbox',
|
||||
align: 'stretch'
|
||||
align: 'stretch',
|
||||
},
|
||||
items: [
|
||||
{
|
||||
@ -372,7 +372,7 @@ Ext.define('PVE.window.TFAEdit', {
|
||||
reference: 'totp_form',
|
||||
fieldDefaults: {
|
||||
anchor: '100%',
|
||||
padding: '0 5'
|
||||
padding: '0 5',
|
||||
},
|
||||
items: [
|
||||
{
|
||||
@ -380,8 +380,8 @@ Ext.define('PVE.window.TFAEdit', {
|
||||
fieldLabel: gettext('User name'),
|
||||
renderer: Ext.String.htmlEncode,
|
||||
cbind: {
|
||||
value: '{userid}'
|
||||
}
|
||||
value: '{userid}',
|
||||
},
|
||||
},
|
||||
{
|
||||
layout: 'hbox',
|
||||
@ -400,15 +400,15 @@ Ext.define('PVE.window.TFAEdit', {
|
||||
bind: {
|
||||
value: "{secret}",
|
||||
},
|
||||
flex: 4
|
||||
flex: 4,
|
||||
},
|
||||
{
|
||||
xtype: 'button',
|
||||
text: gettext('Randomize'),
|
||||
reference: 'randomize_button',
|
||||
handler: 'randomizeSecret',
|
||||
flex: 1
|
||||
}]
|
||||
flex: 1,
|
||||
}],
|
||||
},
|
||||
{
|
||||
xtype: 'numberfield',
|
||||
@ -418,7 +418,7 @@ Ext.define('PVE.window.TFAEdit', {
|
||||
hidden: true,
|
||||
value: 30,
|
||||
minValue: 10,
|
||||
qrupdate: true
|
||||
qrupdate: true,
|
||||
},
|
||||
{
|
||||
xtype: 'numberfield',
|
||||
@ -429,16 +429,16 @@ Ext.define('PVE.window.TFAEdit', {
|
||||
hidden: true,
|
||||
minValue: 6,
|
||||
maxValue: 8,
|
||||
qrupdate: true
|
||||
qrupdate: true,
|
||||
},
|
||||
{
|
||||
xtype: 'textfield',
|
||||
fieldLabel: gettext('Issuer Name'),
|
||||
name: 'issuer',
|
||||
value: 'Proxmox Web UI',
|
||||
qrupdate: true
|
||||
}
|
||||
]
|
||||
qrupdate: true,
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
xtype: 'box',
|
||||
@ -451,8 +451,8 @@ Ext.define('PVE.window.TFAEdit', {
|
||||
'background-color': 'white',
|
||||
padding: '5px',
|
||||
width: '266px',
|
||||
height: '266px'
|
||||
}
|
||||
height: '266px',
|
||||
},
|
||||
},
|
||||
{
|
||||
xtype: 'textfield',
|
||||
@ -464,9 +464,9 @@ Ext.define('PVE.window.TFAEdit', {
|
||||
visible: '{showTOTPVerifiction}',
|
||||
},
|
||||
padding: '0 5',
|
||||
emptyText: gettext('Scan QR code and enter TOTP auth. code to verify')
|
||||
}
|
||||
]
|
||||
emptyText: gettext('Scan QR code and enter TOTP auth. code to verify'),
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
title: 'U2F',
|
||||
@ -477,20 +477,20 @@ Ext.define('PVE.window.TFAEdit', {
|
||||
padding: '5 5',
|
||||
layout: {
|
||||
type: 'vbox',
|
||||
align: 'middle'
|
||||
align: 'middle',
|
||||
},
|
||||
bind: {
|
||||
disabled: '{!canSetupU2F}'
|
||||
disabled: '{!canSetupU2F}',
|
||||
},
|
||||
items: [
|
||||
{
|
||||
xtype: 'label',
|
||||
width: 500,
|
||||
text: gettext('To register a U2F device, connect the device, then click the button and follow the instructions.')
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
text: gettext('To register a U2F device, connect the device, then click the button and follow the instructions.'),
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
xtype: 'textfield',
|
||||
@ -501,13 +501,13 @@ Ext.define('PVE.window.TFAEdit', {
|
||||
allowBlank: false,
|
||||
validateBlank: true,
|
||||
padding: '0 0 5 5',
|
||||
emptyText: gettext('verify current password')
|
||||
}
|
||||
emptyText: gettext('verify current password'),
|
||||
},
|
||||
],
|
||||
|
||||
buttons: [
|
||||
{
|
||||
xtype: 'proxmoxHelpButton'
|
||||
xtype: 'proxmoxHelpButton',
|
||||
},
|
||||
'->',
|
||||
{
|
||||
@ -515,8 +515,8 @@ Ext.define('PVE.window.TFAEdit', {
|
||||
handler: 'applySettings',
|
||||
bind: {
|
||||
hidden: '{!in_totp_tab}',
|
||||
disabled: '{!valid}'
|
||||
}
|
||||
disabled: '{!valid}',
|
||||
},
|
||||
},
|
||||
{
|
||||
xtype: 'button',
|
||||
@ -524,8 +524,8 @@ Ext.define('PVE.window.TFAEdit', {
|
||||
handler: 'startU2FRegistration',
|
||||
bind: {
|
||||
hidden: '{in_totp_tab}',
|
||||
disabled: '{tfa_type}'
|
||||
}
|
||||
disabled: '{tfa_type}',
|
||||
},
|
||||
},
|
||||
{
|
||||
text: gettext('Delete'),
|
||||
@ -533,9 +533,9 @@ Ext.define('PVE.window.TFAEdit', {
|
||||
disabled: true,
|
||||
handler: 'deleteTFA',
|
||||
bind: {
|
||||
disabled: '{!canDeleteTFA}'
|
||||
}
|
||||
}
|
||||
disabled: '{!canDeleteTFA}',
|
||||
},
|
||||
},
|
||||
],
|
||||
|
||||
initComponent: function() {
|
||||
@ -548,5 +548,5 @@ Ext.define('PVE.window.TFAEdit', {
|
||||
me.callParent();
|
||||
|
||||
Ext.GlobalEvents.fireEvent('proxmoxShowHelp', 'pveum_tfa_auth');
|
||||
}
|
||||
},
|
||||
});
|
||||
|
@ -15,8 +15,8 @@ Ext.define('PVE.dc.Tasks', {
|
||||
model: 'proxmox-tasks',
|
||||
proxy: {
|
||||
type: 'proxmox',
|
||||
url: '/api2/json/cluster/tasks'
|
||||
}
|
||||
url: '/api2/json/cluster/tasks',
|
||||
},
|
||||
});
|
||||
|
||||
var store = Ext.create('Proxmox.data.DiffStore', {
|
||||
@ -26,13 +26,13 @@ Ext.define('PVE.dc.Tasks', {
|
||||
sorters: [
|
||||
{
|
||||
property : 'pid',
|
||||
direction: 'DESC'
|
||||
direction: 'DESC',
|
||||
},
|
||||
{
|
||||
property : 'starttime',
|
||||
direction: 'DESC'
|
||||
}
|
||||
]
|
||||
direction: 'DESC',
|
||||
},
|
||||
],
|
||||
|
||||
});
|
||||
|
||||
@ -64,7 +64,7 @@ Ext.define('PVE.dc.Tasks', {
|
||||
if (status && status != 'OK') {
|
||||
return "proxmox-invalid-row";
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
sortableColumns: false,
|
||||
columns: [
|
||||
@ -74,7 +74,7 @@ Ext.define('PVE.dc.Tasks', {
|
||||
width: 150,
|
||||
renderer: function(value) {
|
||||
return Ext.Date.format(value, "M d H:i:s");
|
||||
}
|
||||
},
|
||||
},
|
||||
{
|
||||
header: gettext("End Time"),
|
||||
@ -92,24 +92,24 @@ Ext.define('PVE.dc.Tasks', {
|
||||
return "";
|
||||
}
|
||||
return Ext.Date.format(value, "M d H:i:s");
|
||||
}
|
||||
},
|
||||
},
|
||||
{
|
||||
header: gettext("Node"),
|
||||
dataIndex: 'node',
|
||||
width: 100
|
||||
width: 100,
|
||||
},
|
||||
{
|
||||
header: gettext("User name"),
|
||||
dataIndex: 'user',
|
||||
renderer: Ext.String.htmlEncode,
|
||||
width: 150
|
||||
width: 150,
|
||||
},
|
||||
{
|
||||
header: gettext("Description"),
|
||||
dataIndex: 'upid',
|
||||
flex: 1,
|
||||
renderer: Proxmox.Utils.render_upid
|
||||
renderer: Proxmox.Utils.render_upid,
|
||||
},
|
||||
{
|
||||
header: gettext("Status"),
|
||||
@ -127,16 +127,16 @@ Ext.define('PVE.dc.Tasks', {
|
||||
}
|
||||
// metaData.attr = 'style="color:red;"';
|
||||
return Proxmox.Utils.errorText + ': ' + value;
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
],
|
||||
listeners: {
|
||||
itemdblclick: run_task_viewer,
|
||||
show: () => taskstore.startUpdate(),
|
||||
destroy: () => taskstore.stopUpdate(),
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
me.callParent();
|
||||
}
|
||||
},
|
||||
});
|
||||
|
@ -38,7 +38,7 @@ Ext.define('PVE.dc.UserEdit', {
|
||||
submitValue: false,
|
||||
disabled: true,
|
||||
hidden: true,
|
||||
validator: validate_pw
|
||||
validator: validate_pw,
|
||||
});
|
||||
|
||||
pwfield = Ext.createWidget('textfield', {
|
||||
@ -48,7 +48,7 @@ Ext.define('PVE.dc.UserEdit', {
|
||||
name: 'password',
|
||||
disabled: true,
|
||||
hidden: true,
|
||||
validator: validate_pw
|
||||
validator: validate_pw,
|
||||
});
|
||||
|
||||
var update_passwd_field = function(realm) {
|
||||
@ -74,7 +74,7 @@ Ext.define('PVE.dc.UserEdit', {
|
||||
value: me.userid,
|
||||
renderer: Ext.String.htmlEncode,
|
||||
allowBlank: false,
|
||||
submitValue: me.isCreate ? true : false
|
||||
submitValue: me.isCreate ? true : false,
|
||||
},
|
||||
pwfield, verifypw,
|
||||
{
|
||||
@ -82,7 +82,7 @@ Ext.define('PVE.dc.UserEdit', {
|
||||
name: 'groups',
|
||||
multiSelect: true,
|
||||
allowBlank: true,
|
||||
fieldLabel: gettext('Group')
|
||||
fieldLabel: gettext('Group'),
|
||||
},
|
||||
{
|
||||
xtype: 'pmxExpireDate',
|
||||
@ -94,31 +94,31 @@ Ext.define('PVE.dc.UserEdit', {
|
||||
name: 'enable',
|
||||
uncheckedValue: 0,
|
||||
defaultValue: 1,
|
||||
checked: true
|
||||
}
|
||||
checked: true,
|
||||
},
|
||||
];
|
||||
|
||||
var column2 = [
|
||||
{
|
||||
xtype: 'textfield',
|
||||
name: 'firstname',
|
||||
fieldLabel: gettext('First Name')
|
||||
fieldLabel: gettext('First Name'),
|
||||
},
|
||||
{
|
||||
xtype: 'textfield',
|
||||
name: 'lastname',
|
||||
fieldLabel: gettext('Last Name')
|
||||
fieldLabel: gettext('Last Name'),
|
||||
},
|
||||
{
|
||||
xtype: 'textfield',
|
||||
name: 'email',
|
||||
fieldLabel: gettext('E-Mail'),
|
||||
vtype: 'proxmoxMail'
|
||||
}
|
||||
vtype: 'proxmoxMail',
|
||||
},
|
||||
];
|
||||
|
||||
if (me.isCreate) {
|
||||
column1.splice(1,0,{
|
||||
column1.splice(1, 0, {
|
||||
xtype: 'pmxRealmComboBox',
|
||||
name: 'realm',
|
||||
fieldLabel: gettext('Realm'),
|
||||
@ -129,9 +129,9 @@ Ext.define('PVE.dc.UserEdit', {
|
||||
change: function(combo, newValue){
|
||||
realm = newValue;
|
||||
update_passwd_field(realm);
|
||||
}
|
||||
},
|
||||
},
|
||||
submitValue: false
|
||||
submitValue: false,
|
||||
});
|
||||
}
|
||||
|
||||
@ -142,15 +142,15 @@ Ext.define('PVE.dc.UserEdit', {
|
||||
{
|
||||
xtype: 'textfield',
|
||||
name: 'comment',
|
||||
fieldLabel: gettext('Comment')
|
||||
}
|
||||
fieldLabel: gettext('Comment'),
|
||||
},
|
||||
],
|
||||
advancedItems: [
|
||||
{
|
||||
xtype: 'textfield',
|
||||
name: 'keys',
|
||||
fieldLabel: gettext('Key IDs')
|
||||
}
|
||||
fieldLabel: gettext('Key IDs'),
|
||||
},
|
||||
],
|
||||
onGetValues: function(values) {
|
||||
if (realm) {
|
||||
@ -162,7 +162,7 @@ Ext.define('PVE.dc.UserEdit', {
|
||||
}
|
||||
|
||||
return values;
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
Ext.applyIf(me, {
|
||||
@ -170,9 +170,9 @@ Ext.define('PVE.dc.UserEdit', {
|
||||
url: url,
|
||||
method: method,
|
||||
fieldDefaults: {
|
||||
labelWidth: 110 // for spanish translation
|
||||
labelWidth: 110, // for spanish translation
|
||||
},
|
||||
items: [ ipanel ]
|
||||
items: [ ipanel ],
|
||||
});
|
||||
|
||||
me.callParent();
|
||||
@ -187,8 +187,8 @@ Ext.define('PVE.dc.UserEdit', {
|
||||
me.down('[name="keys"]').setDisabled(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
});
|
||||
}
|
||||
}
|
||||
},
|
||||
});
|
||||
|
@ -18,8 +18,8 @@ Ext.define('PVE.dc.UserView', {
|
||||
model: 'pve-users',
|
||||
sorters: {
|
||||
property: 'userid',
|
||||
order: 'DESC'
|
||||
}
|
||||
order: 'DESC',
|
||||
},
|
||||
});
|
||||
|
||||
var reload = function() {
|
||||
@ -39,7 +39,7 @@ Ext.define('PVE.dc.UserView', {
|
||||
},
|
||||
callback: function() {
|
||||
reload();
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
var run_editor = function() {
|
||||
@ -48,8 +48,8 @@ Ext.define('PVE.dc.UserView', {
|
||||
return;
|
||||
}
|
||||
|
||||
var win = Ext.create('PVE.dc.UserEdit',{
|
||||
userid: rec.data.userid
|
||||
var win = Ext.create('PVE.dc.UserEdit', {
|
||||
userid: rec.data.userid,
|
||||
});
|
||||
win.on('destroy', reload);
|
||||
win.show();
|
||||
@ -62,7 +62,7 @@ Ext.define('PVE.dc.UserView', {
|
||||
return !!caps.access['User.Modify'];
|
||||
},
|
||||
selModel: sm,
|
||||
handler: run_editor
|
||||
handler: run_editor,
|
||||
});
|
||||
|
||||
var pwchange_btn = new Proxmox.button.Button({
|
||||
@ -71,11 +71,11 @@ Ext.define('PVE.dc.UserView', {
|
||||
selModel: sm,
|
||||
handler: function(btn, event, rec) {
|
||||
var win = Ext.create('Proxmox.window.PasswordEdit', {
|
||||
userid: rec.data.userid
|
||||
userid: rec.data.userid,
|
||||
});
|
||||
win.on('destroy', reload);
|
||||
win.show();
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
var tfachange_btn = new Proxmox.button.Button({
|
||||
@ -85,13 +85,13 @@ Ext.define('PVE.dc.UserView', {
|
||||
handler: function(btn, event, rec) {
|
||||
var d = rec.data;
|
||||
var tfa_type = PVE.Parser.parseTfaType(d.keys);
|
||||
var win = Ext.create('PVE.window.TFAEdit',{
|
||||
var win = Ext.create('PVE.window.TFAEdit', {
|
||||
tfa_type: tfa_type,
|
||||
userid: d.userid
|
||||
userid: d.userid,
|
||||
});
|
||||
win.on('destroy', reload);
|
||||
win.show();
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
var perm_btn = new Proxmox.button.Button({
|
||||
@ -100,10 +100,10 @@ Ext.define('PVE.dc.UserView', {
|
||||
selModel: sm,
|
||||
handler: function(btn, event, rec) {
|
||||
var win = Ext.create('PVE.dc.PermissionView', {
|
||||
userid: rec.data.userid
|
||||
userid: rec.data.userid,
|
||||
});
|
||||
win.show();
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
var tbar = [
|
||||
@ -111,13 +111,13 @@ Ext.define('PVE.dc.UserView', {
|
||||
text: gettext('Add'),
|
||||
disabled: !caps.access['User.Modify'],
|
||||
handler: function() {
|
||||
var win = Ext.create('PVE.dc.UserEdit',{
|
||||
var win = Ext.create('PVE.dc.UserEdit', {
|
||||
});
|
||||
win.on('destroy', reload);
|
||||
win.show();
|
||||
}
|
||||
},
|
||||
},
|
||||
edit_btn, remove_btn, pwchange_btn, tfachange_btn, perm_btn
|
||||
edit_btn, remove_btn, pwchange_btn, tfachange_btn, perm_btn,
|
||||
];
|
||||
|
||||
var render_username = function(userid) {
|
||||
@ -133,7 +133,7 @@ Ext.define('PVE.dc.UserView', {
|
||||
selModel: sm,
|
||||
tbar: tbar,
|
||||
viewConfig: {
|
||||
trackOver: false
|
||||
trackOver: false,
|
||||
},
|
||||
columns: [
|
||||
{
|
||||
@ -141,35 +141,35 @@ Ext.define('PVE.dc.UserView', {
|
||||
width: 200,
|
||||
sortable: true,
|
||||
renderer: render_username,
|
||||
dataIndex: 'userid'
|
||||
dataIndex: 'userid',
|
||||
},
|
||||
{
|
||||
header: gettext('Realm'),
|
||||
width: 100,
|
||||
sortable: true,
|
||||
renderer: render_realm,
|
||||
dataIndex: 'userid'
|
||||
dataIndex: 'userid',
|
||||
},
|
||||
{
|
||||
header: gettext('Enabled'),
|
||||
width: 80,
|
||||
sortable: true,
|
||||
renderer: Proxmox.Utils.format_boolean,
|
||||
dataIndex: 'enable'
|
||||
dataIndex: 'enable',
|
||||
},
|
||||
{
|
||||
header: gettext('Expire'),
|
||||
width: 80,
|
||||
sortable: true,
|
||||
renderer: Proxmox.Utils.format_expire,
|
||||
dataIndex: 'expire'
|
||||
dataIndex: 'expire',
|
||||
},
|
||||
{
|
||||
header: gettext('Name'),
|
||||
width: 150,
|
||||
sortable: true,
|
||||
renderer: PVE.Utils.render_full_name,
|
||||
dataIndex: 'firstname'
|
||||
dataIndex: 'firstname',
|
||||
},
|
||||
{
|
||||
header: 'TFA',
|
||||
@ -185,24 +185,24 @@ Ext.define('PVE.dc.UserView', {
|
||||
return tfa_type;
|
||||
}
|
||||
},
|
||||
dataIndex: 'keys'
|
||||
dataIndex: 'keys',
|
||||
},
|
||||
{
|
||||
header: gettext('Comment'),
|
||||
sortable: false,
|
||||
renderer: Ext.String.htmlEncode,
|
||||
dataIndex: 'comment',
|
||||
flex: 1
|
||||
}
|
||||
flex: 1,
|
||||
},
|
||||
],
|
||||
listeners: {
|
||||
activate: reload,
|
||||
itemdblclick: run_editor
|
||||
}
|
||||
itemdblclick: run_editor,
|
||||
},
|
||||
});
|
||||
|
||||
me.callParent();
|
||||
|
||||
Proxmox.Utils.monStoreErrors(me, store);
|
||||
}
|
||||
},
|
||||
});
|
||||
|
@ -18,5 +18,5 @@ Ext.define('PVE.form.ACMEAccountSelector', {
|
||||
|
||||
isEmpty: function() {
|
||||
return this.getStore().getData().length === 0;
|
||||
}
|
||||
},
|
||||
});
|
||||
|
@ -19,7 +19,7 @@ Ext.define('PVE.form.AgentFeatureSelector', {
|
||||
bind: {
|
||||
disabled: '{!enabled.checked}',
|
||||
},
|
||||
disabled: true
|
||||
disabled: true,
|
||||
},
|
||||
{
|
||||
xtype: 'displayfield',
|
||||
@ -43,7 +43,7 @@ Ext.define('PVE.form.AgentFeatureSelector', {
|
||||
['virtio', 'VirtIO'],
|
||||
['isa', 'ISA'],
|
||||
],
|
||||
}
|
||||
},
|
||||
],
|
||||
|
||||
onGetValues: function(values) {
|
||||
@ -54,5 +54,5 @@ Ext.define('PVE.form.AgentFeatureSelector', {
|
||||
setValues: function(values) {
|
||||
let res = PVE.Parser.parsePropertyString(values.agent, 'enabled');
|
||||
this.callParent([res]);
|
||||
}
|
||||
},
|
||||
});
|
||||
|
@ -4,6 +4,6 @@ Ext.define('PVE.form.BackupModeSelector', {
|
||||
comboItems: [
|
||||
['snapshot', gettext('Snapshot')],
|
||||
['suspend', gettext('Suspend')],
|
||||
['stop', gettext('Stop')]
|
||||
]
|
||||
['stop', gettext('Stop')],
|
||||
],
|
||||
});
|
||||
|
@ -10,14 +10,14 @@ Ext.define('PVE.form.BandwidthField', {
|
||||
},
|
||||
formulas: {
|
||||
unitlabel: (get) => get('unit') + '/s',
|
||||
}
|
||||
},
|
||||
},
|
||||
|
||||
emptyText: '',
|
||||
|
||||
layout: 'hbox',
|
||||
defaults: {
|
||||
hideLabel: true
|
||||
hideLabel: true,
|
||||
},
|
||||
|
||||
units: {
|
||||
|
@ -5,6 +5,6 @@ Ext.define('PVE.form.Boolean', {
|
||||
comboItems: [
|
||||
['__default__', gettext('Default')],
|
||||
[1, gettext('Yes')],
|
||||
[0, gettext('No')]
|
||||
]
|
||||
[0, gettext('No')],
|
||||
],
|
||||
});
|
||||
|
@ -10,9 +10,9 @@ Ext.define('PVE.form.BridgeSelector', {
|
||||
sorters: [
|
||||
{
|
||||
property : 'iface',
|
||||
direction: 'ASC'
|
||||
}
|
||||
]
|
||||
direction: 'ASC',
|
||||
},
|
||||
],
|
||||
},
|
||||
valueField: 'iface',
|
||||
displayField: 'iface',
|
||||
@ -22,21 +22,21 @@ Ext.define('PVE.form.BridgeSelector', {
|
||||
header: gettext('Bridge'),
|
||||
dataIndex: 'iface',
|
||||
hideable: false,
|
||||
width: 100
|
||||
width: 100,
|
||||
},
|
||||
{
|
||||
header: gettext('Active'),
|
||||
width: 60,
|
||||
dataIndex: 'active',
|
||||
renderer: Proxmox.Utils.format_boolean
|
||||
renderer: Proxmox.Utils.format_boolean,
|
||||
},
|
||||
{
|
||||
header: gettext('Comment'),
|
||||
dataIndex: 'comments',
|
||||
renderer: Ext.String.htmlEncode,
|
||||
flex: 1
|
||||
}
|
||||
]
|
||||
flex: 1,
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
setNodename: function(nodename) {
|
||||
@ -51,7 +51,7 @@ Ext.define('PVE.form.BridgeSelector', {
|
||||
me.store.setProxy({
|
||||
type: 'proxmox',
|
||||
url: '/api2/json/nodes/' + me.nodename + '/network?type=' +
|
||||
me.bridgeType
|
||||
me.bridgeType,
|
||||
});
|
||||
|
||||
me.store.load();
|
||||
@ -66,6 +66,6 @@ Ext.define('PVE.form.BridgeSelector', {
|
||||
me.callParent();
|
||||
|
||||
me.setNodename(nodename);
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
|
@ -16,5 +16,5 @@ Ext.define('PVE.form.BusTypeSelector', {
|
||||
me.comboItems.push(['scsi', 'SCSI']);
|
||||
|
||||
me.callParent();
|
||||
}
|
||||
},
|
||||
});
|
||||
|
@ -4,8 +4,8 @@ Ext.define('PVE.data.CPUModel', {
|
||||
{name: 'name'},
|
||||
{name: 'vendor'},
|
||||
{name: 'custom'},
|
||||
{name: 'displayname'}
|
||||
]
|
||||
{name: 'displayname'},
|
||||
],
|
||||
});
|
||||
|
||||
Ext.define('PVE.form.CPUModelSelector', {
|
||||
@ -32,17 +32,17 @@ Ext.define('PVE.form.CPUModelSelector', {
|
||||
dataIndex: 'displayname',
|
||||
hideable: false,
|
||||
sortable: true,
|
||||
flex: 3
|
||||
flex: 3,
|
||||
},
|
||||
{
|
||||
header: gettext('Vendor'),
|
||||
dataIndex: 'vendor',
|
||||
hideable: false,
|
||||
sortable: true,
|
||||
flex: 2
|
||||
}
|
||||
flex: 2,
|
||||
},
|
||||
],
|
||||
width: 360
|
||||
width: 360,
|
||||
},
|
||||
|
||||
store: {
|
||||
@ -50,7 +50,7 @@ Ext.define('PVE.form.CPUModelSelector', {
|
||||
model: 'PVE.data.CPUModel',
|
||||
proxy: {
|
||||
type: 'proxmox',
|
||||
url: '/api2/json/nodes/localhost/cpu'
|
||||
url: '/api2/json/nodes/localhost/cpu',
|
||||
},
|
||||
sorters: [
|
||||
{
|
||||
@ -71,8 +71,8 @@ Ext.define('PVE.form.CPUModelSelector', {
|
||||
// Within same vendor, sort alphabetically
|
||||
return a.name.localeCompare(b.name);
|
||||
},
|
||||
direction: 'ASC'
|
||||
}
|
||||
direction: 'ASC',
|
||||
},
|
||||
],
|
||||
listeners: {
|
||||
load: function(store, records, success) {
|
||||
@ -98,7 +98,7 @@ Ext.define('PVE.form.CPUModelSelector', {
|
||||
|
||||
store.sort();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
|
@ -7,6 +7,6 @@ Ext.define('PVE.form.CacheTypeSelector', {
|
||||
['writethrough', 'Write through'],
|
||||
['writeback', 'Write back'],
|
||||
['unsafe', 'Write back (' + gettext('unsafe') + ')'],
|
||||
['none', gettext('No cache')]
|
||||
]
|
||||
['none', gettext('No cache')],
|
||||
],
|
||||
});
|
||||
|
@ -16,20 +16,20 @@ Ext.define('PVE.form.CalendarEvent', {
|
||||
{ value: '2,22:30', text: gettext("Every day") + " 02:30, 22:30"},
|
||||
{ value: 'mon..fri', text: gettext("Monday to Friday") + " 00:00"},
|
||||
{ value: 'mon..fri */1:00', text: gettext("Monday to Friday") + ': ' + gettext("hourly")},
|
||||
{ value: 'sun 01:00', text: gettext("Sunday") + " 01:00"}
|
||||
]
|
||||
{ value: 'sun 01:00', text: gettext("Sunday") + " 01:00"},
|
||||
],
|
||||
},
|
||||
|
||||
tpl: [
|
||||
'<ul class="x-list-plain"><tpl for=".">',
|
||||
'<li role="option" class="x-boundlist-item">{text}</li>',
|
||||
'</tpl></ul>'
|
||||
'</tpl></ul>',
|
||||
],
|
||||
|
||||
displayTpl: [
|
||||
'<tpl for=".">',
|
||||
'{value}',
|
||||
'</tpl>'
|
||||
]
|
||||
'</tpl>',
|
||||
],
|
||||
|
||||
});
|
||||
|
@ -20,12 +20,12 @@ Ext.define('PVE.form.CephPoolSelector', {
|
||||
sorters: 'name',
|
||||
proxy: {
|
||||
type: 'proxmox',
|
||||
url: '/api2/json/nodes/' + me.nodename + '/ceph/pools'
|
||||
}
|
||||
url: '/api2/json/nodes/' + me.nodename + '/ceph/pools',
|
||||
},
|
||||
});
|
||||
|
||||
Ext.apply(me, {
|
||||
store: store
|
||||
store: store,
|
||||
});
|
||||
|
||||
me.callParent();
|
||||
@ -35,8 +35,8 @@ Ext.define('PVE.form.CephPoolSelector', {
|
||||
if (success && rec.length > 0) {
|
||||
me.select(rec[0]);
|
||||
}
|
||||
}
|
||||
},
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
});
|
||||
|
@ -6,5 +6,5 @@ Ext.define('PVE.form.CompressionSelector', {
|
||||
['lzo', 'LZO (' + gettext('fast') + ')'],
|
||||
['gzip', 'GZIP (' + gettext('good') + ')'],
|
||||
['zstd', 'ZSTD (' + gettext('fast and good') + ')'],
|
||||
]
|
||||
],
|
||||
});
|
||||
|
@ -18,5 +18,5 @@ Ext.define('PVE.form.ContentTypeSelector', {
|
||||
});
|
||||
|
||||
me.callParent();
|
||||
}
|
||||
},
|
||||
});
|
||||
|
@ -75,7 +75,7 @@ clist_loop:
|
||||
fieldLabel: gettext('Bus/Device'),
|
||||
layout: 'hbox',
|
||||
defaults: {
|
||||
hideLabel: true
|
||||
hideLabel: true,
|
||||
},
|
||||
items: [
|
||||
{
|
||||
@ -93,8 +93,8 @@ clist_loop:
|
||||
var field = me.down('field[name=deviceid]');
|
||||
field.setMaxValue(PVE.Utils.diskControllerMaxIDs[value]);
|
||||
field.validate();
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
xtype: 'proxmoxintegerfield',
|
||||
@ -115,11 +115,11 @@ clist_loop:
|
||||
return "This device is already in use.";
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
me.callParent();
|
||||
}
|
||||
},
|
||||
});
|
||||
|
@ -11,8 +11,8 @@ Ext.define('PVE.form.DayOfWeekSelector', {
|
||||
['thu', Ext.util.Format.htmlDecode(Ext.Date.dayNames[4])],
|
||||
['fri', Ext.util.Format.htmlDecode(Ext.Date.dayNames[5])],
|
||||
['sat', Ext.util.Format.htmlDecode(Ext.Date.dayNames[6])],
|
||||
['sun', Ext.util.Format.htmlDecode(Ext.Date.dayNames[0])]
|
||||
['sun', Ext.util.Format.htmlDecode(Ext.Date.dayNames[0])],
|
||||
];
|
||||
this.callParent();
|
||||
}
|
||||
},
|
||||
});
|
||||
|
@ -4,6 +4,6 @@ Ext.define('PVE.form.DiskFormatSelector', {
|
||||
comboItems: [
|
||||
['raw', gettext('Raw disk image') + ' (raw)'],
|
||||
['qcow2', gettext('QEMU image format') + ' (qcow2)'],
|
||||
['vmdk', gettext('VMware image format') + ' (vmdk)']
|
||||
]
|
||||
['vmdk', gettext('VMware image format') + ' (vmdk)'],
|
||||
],
|
||||
});
|
||||
|
@ -4,7 +4,7 @@ Ext.define('PVE.form.DiskStorageSelector', {
|
||||
|
||||
layout: 'fit',
|
||||
defaults: {
|
||||
margin: '0 0 5 0'
|
||||
margin: '0 0 5 0',
|
||||
},
|
||||
|
||||
// the fieldLabel for the storageselector
|
||||
@ -119,9 +119,9 @@ Ext.define('PVE.form.DiskStorageSelector', {
|
||||
listeners: {
|
||||
change: {
|
||||
fn: me.changeStorage,
|
||||
scope: me
|
||||
}
|
||||
}
|
||||
scope: me,
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
xtype: 'pveFileSelector',
|
||||
@ -131,7 +131,7 @@ Ext.define('PVE.form.DiskStorageSelector', {
|
||||
fieldLabel: gettext('Disk image'),
|
||||
nodename: me.nodename,
|
||||
disabled: true,
|
||||
hidden: true
|
||||
hidden: true,
|
||||
},
|
||||
{
|
||||
xtype: 'numberfield',
|
||||
@ -145,7 +145,7 @@ Ext.define('PVE.form.DiskStorageSelector', {
|
||||
maxValue: 128*1024,
|
||||
decimalPrecision: 3,
|
||||
value: me.defaultSize,
|
||||
allowBlank: false
|
||||
allowBlank: false,
|
||||
},
|
||||
{
|
||||
xtype: 'pveDiskFormatSelector',
|
||||
@ -157,13 +157,13 @@ Ext.define('PVE.form.DiskStorageSelector', {
|
||||
disabled: true,
|
||||
hidden: me.storageContent === 'rootdir',
|
||||
value: 'qcow2',
|
||||
allowBlank: false
|
||||
}
|
||||
allowBlank: false,
|
||||
},
|
||||
];
|
||||
|
||||
// use it to disable the children but not ourself
|
||||
me.disabled = false;
|
||||
|
||||
me.callParent();
|
||||
}
|
||||
},
|
||||
});
|
||||
|
@ -3,6 +3,6 @@ Ext.define('PVE.form.EmailNotificationSelector', {
|
||||
alias: ['widget.pveEmailNotificationSelector'],
|
||||
comboItems: [
|
||||
['always', gettext('Always')],
|
||||
['failure', gettext('On failure only')]
|
||||
]
|
||||
['failure', gettext('On failure only')],
|
||||
],
|
||||
});
|
||||
|
@ -12,7 +12,7 @@ Ext.define('PVE.form.FileSelector', {
|
||||
if (!me.disabled) {
|
||||
me.setStorage(me.storage, me.nodename);
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
|
||||
setStorage: function(storage, nodename) {
|
||||
@ -40,7 +40,7 @@ Ext.define('PVE.form.FileSelector', {
|
||||
|
||||
me.store.setProxy({
|
||||
type: 'proxmox',
|
||||
url: url
|
||||
url: url,
|
||||
});
|
||||
|
||||
me.store.removeAll();
|
||||
@ -52,7 +52,7 @@ Ext.define('PVE.form.FileSelector', {
|
||||
},
|
||||
|
||||
store: {
|
||||
model: 'pve-storage-content'
|
||||
model: 'pve-storage-content',
|
||||
},
|
||||
|
||||
allowBlank: false,
|
||||
@ -67,19 +67,19 @@ Ext.define('PVE.form.FileSelector', {
|
||||
header: gettext('Name'),
|
||||
dataIndex: 'text',
|
||||
hideable: false,
|
||||
flex: 1
|
||||
flex: 1,
|
||||
},
|
||||
{
|
||||
header: gettext('Format'),
|
||||
width: 60,
|
||||
dataIndex: 'format'
|
||||
dataIndex: 'format',
|
||||
},
|
||||
{
|
||||
header: gettext('Size'),
|
||||
width: 100,
|
||||
dataIndex: 'size',
|
||||
renderer: Proxmox.Utils.format_size
|
||||
}
|
||||
]
|
||||
}
|
||||
renderer: Proxmox.Utils.format_size,
|
||||
},
|
||||
],
|
||||
},
|
||||
});
|
||||
|
@ -4,6 +4,6 @@ Ext.define('PVE.form.FirewallPolicySelector', {
|
||||
comboItems: [
|
||||
['ACCEPT', 'ACCEPT'],
|
||||
['REJECT', 'REJECT'],
|
||||
[ 'DROP', 'DROP']
|
||||
]
|
||||
[ 'DROP', 'DROP'],
|
||||
],
|
||||
});
|
||||
|
@ -28,19 +28,19 @@ Ext.define('PVE.form.GlobalSearchField', {
|
||||
scrollable: {
|
||||
xtype: 'scroller',
|
||||
y: true,
|
||||
x:false
|
||||
x:false,
|
||||
},
|
||||
store: {
|
||||
model: 'PVEResources',
|
||||
proxy:{
|
||||
type: 'proxmox',
|
||||
url: '/api2/extjs/cluster/resources'
|
||||
}
|
||||
url: '/api2/extjs/cluster/resources',
|
||||
},
|
||||
},
|
||||
plugins: {
|
||||
ptype: 'bufferedrenderer',
|
||||
trailingBufferZone: 20,
|
||||
leadingBufferZone: 20
|
||||
leadingBufferZone: 20,
|
||||
},
|
||||
|
||||
hideMe: function() {
|
||||
@ -70,9 +70,9 @@ Ext.define('PVE.form.GlobalSearchField', {
|
||||
},
|
||||
/* because of lint */
|
||||
focusleave: {
|
||||
fn: 'hideMe'
|
||||
fn: 'hideMe',
|
||||
},
|
||||
focusenter: 'setFocus'
|
||||
focusenter: 'setFocus',
|
||||
},
|
||||
|
||||
columns: [
|
||||
@ -80,29 +80,29 @@ Ext.define('PVE.form.GlobalSearchField', {
|
||||
text: gettext('Type'),
|
||||
dataIndex: 'type',
|
||||
width: 100,
|
||||
renderer: PVE.Utils.render_resource_type
|
||||
renderer: PVE.Utils.render_resource_type,
|
||||
},
|
||||
{
|
||||
text: gettext('Description'),
|
||||
flex: 1,
|
||||
dataIndex: 'text'
|
||||
dataIndex: 'text',
|
||||
},
|
||||
{
|
||||
text: gettext('Node'),
|
||||
dataIndex: 'node'
|
||||
dataIndex: 'node',
|
||||
},
|
||||
{
|
||||
text: gettext('Pool'),
|
||||
dataIndex: 'pool'
|
||||
}
|
||||
]
|
||||
dataIndex: 'pool',
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
customFilter: function(item) {
|
||||
var me = this;
|
||||
var match = 0;
|
||||
var fieldArr = [];
|
||||
var i,j, fields;
|
||||
var i, j, fields;
|
||||
|
||||
// different types of objects have different fields to search
|
||||
// for example, a node will never have a pool and vice versa
|
||||
@ -208,14 +208,14 @@ Ext.define('PVE.form.GlobalSearchField', {
|
||||
listeners: {
|
||||
change: {
|
||||
fn: 'updateFilter',
|
||||
buffer: 250
|
||||
buffer: 250,
|
||||
},
|
||||
specialkey: 'onKey',
|
||||
focusenter: 'loadValues',
|
||||
focusleave: {
|
||||
fn: 'hideGrid',
|
||||
delay: 100
|
||||
}
|
||||
delay: 100,
|
||||
},
|
||||
},
|
||||
|
||||
toggleFocus: function() {
|
||||
@ -248,13 +248,13 @@ Ext.define('PVE.form.GlobalSearchField', {
|
||||
ctrl: true,
|
||||
shift: true,
|
||||
fn: me.toggleFocus,
|
||||
scope: me
|
||||
},{
|
||||
scope: me,
|
||||
}, {
|
||||
key:' ',
|
||||
ctrl: true,
|
||||
fn: me.toggleFocus,
|
||||
scope: me
|
||||
}]
|
||||
scope: me,
|
||||
}],
|
||||
});
|
||||
|
||||
// always select first item and
|
||||
@ -263,9 +263,9 @@ Ext.define('PVE.form.GlobalSearchField', {
|
||||
me.grid.getSelectionModel().select(0);
|
||||
me.grid.store.sort({
|
||||
property: 'relevance',
|
||||
direction: 'DESC'
|
||||
direction: 'DESC',
|
||||
});
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
});
|
||||
|
@ -3,9 +3,9 @@ Ext.define('pve-groups', {
|
||||
fields: [ 'groupid', 'comment', 'users' ],
|
||||
proxy: {
|
||||
type: 'proxmox',
|
||||
url: "/api2/json/access/groups"
|
||||
url: "/api2/json/access/groups",
|
||||
},
|
||||
idProperty: 'groupid'
|
||||
idProperty: 'groupid',
|
||||
});
|
||||
|
||||
Ext.define('PVE.form.GroupSelector', {
|
||||
@ -22,23 +22,23 @@ Ext.define('PVE.form.GroupSelector', {
|
||||
header: gettext('Group'),
|
||||
sortable: true,
|
||||
dataIndex: 'groupid',
|
||||
flex: 1
|
||||
flex: 1,
|
||||
},
|
||||
{
|
||||
header: gettext('Comment'),
|
||||
sortable: false,
|
||||
dataIndex: 'comment',
|
||||
renderer: Ext.String.htmlEncode,
|
||||
flex: 1
|
||||
flex: 1,
|
||||
},
|
||||
{
|
||||
header: gettext('Users'),
|
||||
sortable: false,
|
||||
dataIndex: 'users',
|
||||
renderer: Ext.String.htmlEncode,
|
||||
flex: 1
|
||||
}
|
||||
]
|
||||
flex: 1,
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
initComponent: function() {
|
||||
@ -47,16 +47,16 @@ Ext.define('PVE.form.GroupSelector', {
|
||||
var store = new Ext.data.Store({
|
||||
model: 'pve-groups',
|
||||
sorters: [{
|
||||
property: 'groupid'
|
||||
}]
|
||||
property: 'groupid',
|
||||
}],
|
||||
});
|
||||
|
||||
Ext.apply(me, {
|
||||
store: store
|
||||
store: store,
|
||||
});
|
||||
|
||||
me.callParent();
|
||||
|
||||
store.load();
|
||||
}
|
||||
},
|
||||
});
|
||||
|
@ -70,10 +70,10 @@ Ext.define('PVE.form.GuestIDSelector', {
|
||||
failure: function(response, opts) {
|
||||
me.exists = true;
|
||||
me.validate();
|
||||
}
|
||||
},
|
||||
});
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
me.callParent();
|
||||
@ -84,8 +84,8 @@ Ext.define('PVE.form.GuestIDSelector', {
|
||||
method: 'GET',
|
||||
success: function(response, opts) {
|
||||
me.setRawValue(response.result.data);
|
||||
}
|
||||
},
|
||||
});
|
||||
}
|
||||
}
|
||||
},
|
||||
});
|
||||
|
@ -7,32 +7,32 @@ Ext.define('PVE.form.HotplugFeatureSelector', {
|
||||
|
||||
defaults: {
|
||||
name: 'hotplugCbGroup',
|
||||
submitValue: false
|
||||
submitValue: false,
|
||||
},
|
||||
items: [
|
||||
{
|
||||
boxLabel: gettext('Disk'),
|
||||
inputValue: 'disk',
|
||||
checked: true
|
||||
checked: true,
|
||||
},
|
||||
{
|
||||
boxLabel: gettext('Network'),
|
||||
inputValue: 'network',
|
||||
checked: true
|
||||
checked: true,
|
||||
},
|
||||
{
|
||||
boxLabel: 'USB',
|
||||
inputValue: 'usb',
|
||||
checked: true
|
||||
checked: true,
|
||||
},
|
||||
{
|
||||
boxLabel: gettext('Memory'),
|
||||
inputValue: 'memory'
|
||||
inputValue: 'memory',
|
||||
},
|
||||
{
|
||||
boxLabel: gettext('CPU'),
|
||||
inputValue: 'cpu'
|
||||
}
|
||||
inputValue: 'cpu',
|
||||
},
|
||||
],
|
||||
|
||||
setValue: function(value) {
|
||||
@ -64,6 +64,6 @@ Ext.define('PVE.form.HotplugFeatureSelector', {
|
||||
} else {
|
||||
return { 'hotplug': data.join(',') };
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
});
|
||||
|
@ -10,23 +10,23 @@ Ext.define('PVE.form.IPProtocolSelector', {
|
||||
dataIndex: 'p',
|
||||
hideable: false,
|
||||
sortable: false,
|
||||
width: 100
|
||||
width: 100,
|
||||
},
|
||||
{
|
||||
header: gettext('Number'),
|
||||
dataIndex: 'n',
|
||||
hideable: false,
|
||||
sortable: false,
|
||||
width: 50
|
||||
width: 50,
|
||||
},
|
||||
{
|
||||
header: gettext('Description'),
|
||||
dataIndex: 'd',
|
||||
hideable: false,
|
||||
sortable: false,
|
||||
flex: 1
|
||||
}
|
||||
]
|
||||
flex: 1,
|
||||
},
|
||||
],
|
||||
},
|
||||
store: {
|
||||
fields: [ 'p', 'd', 'n'],
|
||||
@ -81,7 +81,7 @@ Ext.define('PVE.form.IPProtocolSelector', {
|
||||
{ p: 'hip', n: 139, d: 'Host Identity Protocol' },
|
||||
{ p: 'shim6', n: 140, d: 'Shim6 Protocol [RFC5533]' },
|
||||
{ p: 'wesp', n: 141, d: 'Wrapped Encapsulating Security Payload' },
|
||||
{ p: 'rohc', n: 142, d: 'Robust Header Compression' }
|
||||
]
|
||||
}
|
||||
{ p: 'rohc', n: 142, d: 'Robust Header Compression' },
|
||||
],
|
||||
},
|
||||
});
|
||||
|
@ -30,12 +30,12 @@ Ext.define('PVE.form.IPRefSelector', {
|
||||
idProperty: 'ref',
|
||||
proxy: {
|
||||
type: 'proxmox',
|
||||
url: url
|
||||
url: url,
|
||||
},
|
||||
sorters: {
|
||||
property: 'ref',
|
||||
order: 'DESC'
|
||||
}
|
||||
order: 'DESC',
|
||||
},
|
||||
});
|
||||
|
||||
var disable_query_for_ips = function(f, value) {
|
||||
@ -54,7 +54,7 @@ Ext.define('PVE.form.IPRefSelector', {
|
||||
header: gettext('Type'),
|
||||
dataIndex: 'type',
|
||||
hideable: false,
|
||||
width: 60
|
||||
width: 60,
|
||||
});
|
||||
}
|
||||
|
||||
@ -63,24 +63,24 @@ Ext.define('PVE.form.IPRefSelector', {
|
||||
header: gettext('Name'),
|
||||
dataIndex: 'ref',
|
||||
hideable: false,
|
||||
width: 140
|
||||
width: 140,
|
||||
},
|
||||
{
|
||||
header: gettext('Comment'),
|
||||
dataIndex: 'comment',
|
||||
renderer: Ext.String.htmlEncode,
|
||||
flex: 1
|
||||
}
|
||||
flex: 1,
|
||||
},
|
||||
);
|
||||
|
||||
Ext.apply(me, {
|
||||
store: store,
|
||||
listConfig: { columns: columns }
|
||||
listConfig: { columns: columns },
|
||||
});
|
||||
|
||||
me.on('change', disable_query_for_ips);
|
||||
|
||||
me.callParent();
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
|
@ -3,14 +3,14 @@ Ext.define('PVE.form.MDevSelector', {
|
||||
xtype: 'pveMDevSelector',
|
||||
|
||||
store: {
|
||||
fields: [ 'type','available', 'description' ],
|
||||
fields: [ 'type', 'available', 'description' ],
|
||||
filterOnLoad: true,
|
||||
sorters: [
|
||||
{
|
||||
property : 'type',
|
||||
direction: 'ASC'
|
||||
}
|
||||
]
|
||||
direction: 'ASC',
|
||||
},
|
||||
],
|
||||
},
|
||||
autoSelect: false,
|
||||
valueField: 'type',
|
||||
@ -20,12 +20,12 @@ Ext.define('PVE.form.MDevSelector', {
|
||||
{
|
||||
header: gettext('Type'),
|
||||
dataIndex: 'type',
|
||||
flex: 1
|
||||
flex: 1,
|
||||
},
|
||||
{
|
||||
header: gettext('Available'),
|
||||
dataIndex: 'available',
|
||||
width: 80
|
||||
width: 80,
|
||||
},
|
||||
{
|
||||
header: gettext('Description'),
|
||||
@ -37,9 +37,9 @@ Ext.define('PVE.form.MDevSelector', {
|
||||
}
|
||||
|
||||
return value.split('\n').join('<br>');
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
setPciID: function(pciid, force) {
|
||||
@ -69,7 +69,7 @@ Ext.define('PVE.form.MDevSelector', {
|
||||
var me = this;
|
||||
me.store.setProxy({
|
||||
type: 'proxmox',
|
||||
url: '/api2/json/nodes/' + me.nodename + '/hardware/pci/' + me.pciid + '/mdev'
|
||||
url: '/api2/json/nodes/' + me.nodename + '/hardware/pci/' + me.pciid + '/mdev',
|
||||
});
|
||||
me.store.load();
|
||||
},
|
||||
@ -86,6 +86,6 @@ Ext.define('PVE.form.MDevSelector', {
|
||||
if (me.pciid) {
|
||||
me.setPciID(me.pciid, true);
|
||||
}
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
|
@ -83,5 +83,5 @@ Ext.define('PVE.form.MemoryField', {
|
||||
}
|
||||
|
||||
me.callParent();
|
||||
}
|
||||
},
|
||||
});
|
||||
|
@ -5,6 +5,6 @@ Ext.define('PVE.form.NetworkCardSelector', {
|
||||
['e1000', 'Intel E1000'],
|
||||
['virtio', 'VirtIO (' + gettext('paravirtualized') + ')'],
|
||||
['rtl8139', 'Realtek RTL8139'],
|
||||
['vmxnet3', 'VMware vmxnet3']
|
||||
]
|
||||
['vmxnet3', 'VMware vmxnet3'],
|
||||
],
|
||||
});
|
||||
|
@ -22,18 +22,18 @@ Ext.define('PVE.form.NodeSelector', {
|
||||
fields: [ 'node', 'cpu', 'maxcpu', 'mem', 'maxmem', 'uptime' ],
|
||||
proxy: {
|
||||
type: 'proxmox',
|
||||
url: '/api2/json/nodes'
|
||||
url: '/api2/json/nodes',
|
||||
},
|
||||
sorters: [
|
||||
{
|
||||
property : 'node',
|
||||
direction: 'ASC'
|
||||
direction: 'ASC',
|
||||
},
|
||||
{
|
||||
property : 'mem',
|
||||
direction: 'DESC'
|
||||
}
|
||||
]
|
||||
direction: 'DESC',
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
listConfig: {
|
||||
@ -43,23 +43,23 @@ Ext.define('PVE.form.NodeSelector', {
|
||||
dataIndex: 'node',
|
||||
sortable: true,
|
||||
hideable: false,
|
||||
flex: 1
|
||||
flex: 1,
|
||||
},
|
||||
{
|
||||
header: gettext('Memory usage') + " %",
|
||||
renderer: PVE.Utils.render_mem_usage_percent,
|
||||
sortable: true,
|
||||
width: 100,
|
||||
dataIndex: 'mem'
|
||||
dataIndex: 'mem',
|
||||
},
|
||||
{
|
||||
header: gettext('CPU usage'),
|
||||
renderer: PVE.Utils.render_cpu,
|
||||
sortable: true,
|
||||
width: 100,
|
||||
dataIndex: 'cpu'
|
||||
}
|
||||
]
|
||||
dataIndex: 'cpu',
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
validator: function(value) {
|
||||
@ -108,11 +108,11 @@ Ext.define('PVE.form.NodeSelector', {
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
},
|
||||
}));
|
||||
|
||||
me.mon(me.getStore(), 'load', function(){
|
||||
me.isValid();
|
||||
});
|
||||
}
|
||||
},
|
||||
});
|
||||
|
@ -3,14 +3,14 @@ Ext.define('PVE.form.PCISelector', {
|
||||
xtype: 'pvePCISelector',
|
||||
|
||||
store: {
|
||||
fields: [ 'id','vendor_name', 'device_name', 'vendor', 'device', 'iommugroup', 'mdev' ],
|
||||
fields: [ 'id', 'vendor_name', 'device_name', 'vendor', 'device', 'iommugroup', 'mdev' ],
|
||||
filterOnLoad: true,
|
||||
sorters: [
|
||||
{
|
||||
property : 'id',
|
||||
direction: 'ASC'
|
||||
}
|
||||
]
|
||||
direction: 'ASC',
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
autoSelect: false,
|
||||
@ -27,22 +27,22 @@ Ext.define('PVE.form.PCISelector', {
|
||||
{
|
||||
header: 'ID',
|
||||
dataIndex: 'id',
|
||||
width: 100
|
||||
width: 100,
|
||||
},
|
||||
{
|
||||
header: gettext('IOMMU Group'),
|
||||
dataIndex: 'iommugroup',
|
||||
width: 50
|
||||
width: 50,
|
||||
},
|
||||
{
|
||||
header: gettext('Vendor'),
|
||||
dataIndex: 'vendor_name',
|
||||
flex: 2
|
||||
flex: 2,
|
||||
},
|
||||
{
|
||||
header: gettext('Device'),
|
||||
dataIndex: 'device_name',
|
||||
flex: 6
|
||||
flex: 6,
|
||||
},
|
||||
{
|
||||
header: gettext('Mediated Devices'),
|
||||
@ -50,9 +50,9 @@ Ext.define('PVE.form.PCISelector', {
|
||||
flex: 1,
|
||||
renderer: function(val) {
|
||||
return Proxmox.Utils.format_boolean(!!val);
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
setNodename: function(nodename) {
|
||||
@ -66,7 +66,7 @@ Ext.define('PVE.form.PCISelector', {
|
||||
|
||||
me.store.setProxy({
|
||||
type: 'proxmox',
|
||||
url: '/api2/json/nodes/' + me.nodename + '/hardware/pci'
|
||||
url: '/api2/json/nodes/' + me.nodename + '/hardware/pci',
|
||||
});
|
||||
|
||||
me.store.load();
|
||||
@ -85,6 +85,6 @@ Ext.define('PVE.form.PCISelector', {
|
||||
}
|
||||
|
||||
me.setNodename(nodename);
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
|
@ -8,6 +8,6 @@ Ext.define('PVE.form.PermPathSelector', {
|
||||
queryMode: 'local',
|
||||
|
||||
store: {
|
||||
type: 'pvePermPath'
|
||||
}
|
||||
type: 'pvePermPath',
|
||||
},
|
||||
});
|
||||
|
@ -11,7 +11,7 @@ Ext.define('PVE.form.PoolSelector', {
|
||||
|
||||
var store = new Ext.data.Store({
|
||||
model: 'pve-pools',
|
||||
sorters: 'poolid'
|
||||
sorters: 'poolid',
|
||||
});
|
||||
|
||||
Ext.apply(me, {
|
||||
@ -23,23 +23,23 @@ Ext.define('PVE.form.PoolSelector', {
|
||||
header: gettext('Pool'),
|
||||
sortable: true,
|
||||
dataIndex: 'poolid',
|
||||
flex: 1
|
||||
flex: 1,
|
||||
},
|
||||
{
|
||||
header: gettext('Comment'),
|
||||
sortable: false,
|
||||
dataIndex: 'comment',
|
||||
renderer: Ext.String.htmlEncode,
|
||||
flex: 1
|
||||
}
|
||||
]
|
||||
}
|
||||
flex: 1,
|
||||
},
|
||||
],
|
||||
},
|
||||
});
|
||||
|
||||
me.callParent();
|
||||
|
||||
store.load();
|
||||
}
|
||||
},
|
||||
|
||||
}, function() {
|
||||
|
||||
@ -48,9 +48,9 @@ Ext.define('PVE.form.PoolSelector', {
|
||||
fields: [ 'poolid', 'comment' ],
|
||||
proxy: {
|
||||
type: 'proxmox',
|
||||
url: "/api2/json/pools"
|
||||
url: "/api2/json/pools",
|
||||
},
|
||||
idProperty: 'poolid'
|
||||
idProperty: 'poolid',
|
||||
});
|
||||
|
||||
});
|
||||
|
@ -23,13 +23,13 @@ Ext.define('PVE.form.PrivilegesSelector', {
|
||||
|
||||
me.store.sort({
|
||||
property: 'key',
|
||||
direction: 'ASC'
|
||||
direction: 'ASC',
|
||||
});
|
||||
},
|
||||
|
||||
failure: function (response, opts) {
|
||||
Ext.Msg.alert(gettext('Error'), response.htmlStatus);
|
||||
}
|
||||
},
|
||||
});
|
||||
}
|
||||
},
|
||||
});
|
||||
|
@ -8,9 +8,9 @@ Ext.define('PVE.form.QemuBiosSelector', {
|
||||
me.comboItems = [
|
||||
['__default__', PVE.Utils.render_qemu_bios('')],
|
||||
['seabios', PVE.Utils.render_qemu_bios('seabios')],
|
||||
['ovmf', PVE.Utils.render_qemu_bios('ovmf')]
|
||||
['ovmf', PVE.Utils.render_qemu_bios('ovmf')],
|
||||
];
|
||||
|
||||
me.callParent();
|
||||
}
|
||||
},
|
||||
});
|
||||
|
@ -13,7 +13,7 @@ Ext.define('PVE.form.SDNControllerSelector', {
|
||||
model: 'pve-sdn-controller',
|
||||
sorters: {
|
||||
property: 'controller',
|
||||
order: 'DESC'
|
||||
order: 'DESC',
|
||||
},
|
||||
});
|
||||
|
||||
@ -26,16 +26,16 @@ Ext.define('PVE.form.SDNControllerSelector', {
|
||||
header: gettext('Controller'),
|
||||
sortable: true,
|
||||
dataIndex: 'controller',
|
||||
flex: 1
|
||||
flex: 1,
|
||||
},
|
||||
]
|
||||
}
|
||||
],
|
||||
},
|
||||
});
|
||||
|
||||
me.callParent();
|
||||
|
||||
store.load();
|
||||
}
|
||||
},
|
||||
|
||||
}, function() {
|
||||
|
||||
@ -44,9 +44,9 @@ Ext.define('PVE.form.SDNControllerSelector', {
|
||||
fields: [ 'controller' ],
|
||||
proxy: {
|
||||
type: 'proxmox',
|
||||
url: "/api2/json/cluster/sdn/controllers"
|
||||
url: "/api2/json/cluster/sdn/controllers",
|
||||
},
|
||||
idProperty: 'controller'
|
||||
idProperty: 'controller',
|
||||
});
|
||||
|
||||
});
|
||||
|
@ -13,7 +13,7 @@ Ext.define('PVE.form.SDNZoneSelector', {
|
||||
model: 'pve-sdn-zone',
|
||||
sorters: {
|
||||
property: 'zone',
|
||||
order: 'DESC'
|
||||
order: 'DESC',
|
||||
},
|
||||
});
|
||||
|
||||
@ -26,16 +26,16 @@ Ext.define('PVE.form.SDNZoneSelector', {
|
||||
header: gettext('Zone'),
|
||||
sortable: true,
|
||||
dataIndex: 'zone',
|
||||
flex: 1
|
||||
flex: 1,
|
||||
},
|
||||
]
|
||||
}
|
||||
],
|
||||
},
|
||||
});
|
||||
|
||||
me.callParent();
|
||||
|
||||
store.load();
|
||||
}
|
||||
},
|
||||
|
||||
}, function() {
|
||||
|
||||
@ -44,9 +44,9 @@ Ext.define('PVE.form.SDNZoneSelector', {
|
||||
fields: [ 'zone' ],
|
||||
proxy: {
|
||||
type: 'proxmox',
|
||||
url: "/api2/json/cluster/sdn/zones"
|
||||
url: "/api2/json/cluster/sdn/zones",
|
||||
},
|
||||
idProperty: 'zone'
|
||||
idProperty: 'zone',
|
||||
});
|
||||
|
||||
});
|
||||
|
@ -8,6 +8,6 @@ Ext.define('PVE.form.ScsiHwSelector', {
|
||||
['megasas', PVE.Utils.render_scsihw('megasas')],
|
||||
['virtio-scsi-pci', PVE.Utils.render_scsihw('virtio-scsi-pci')],
|
||||
['virtio-scsi-single', PVE.Utils.render_scsihw('virtio-scsi-single')],
|
||||
['pvscsi', PVE.Utils.render_scsihw('pvscsi')]
|
||||
]
|
||||
['pvscsi', PVE.Utils.render_scsihw('pvscsi')],
|
||||
],
|
||||
});
|
||||
|
@ -13,12 +13,12 @@ Ext.define('PVE.form.SecurityGroupsSelector', {
|
||||
idProperty: 'group',
|
||||
proxy: {
|
||||
type: 'proxmox',
|
||||
url: "/api2/json/cluster/firewall/groups"
|
||||
url: "/api2/json/cluster/firewall/groups",
|
||||
},
|
||||
sorters: {
|
||||
property: 'group',
|
||||
order: 'DESC'
|
||||
}
|
||||
order: 'DESC',
|
||||
},
|
||||
});
|
||||
|
||||
Ext.apply(me, {
|
||||
@ -29,19 +29,19 @@ Ext.define('PVE.form.SecurityGroupsSelector', {
|
||||
header: gettext('Security Group'),
|
||||
dataIndex: 'group',
|
||||
hideable: false,
|
||||
width: 100
|
||||
width: 100,
|
||||
},
|
||||
{
|
||||
header: gettext('Comment'),
|
||||
dataIndex: 'comment',
|
||||
renderer: Ext.String.htmlEncode,
|
||||
flex: 1
|
||||
}
|
||||
]
|
||||
}
|
||||
flex: 1,
|
||||
},
|
||||
],
|
||||
},
|
||||
});
|
||||
|
||||
me.callParent();
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
|
@ -22,7 +22,7 @@ Ext.define('PVE.form.SnapshotSelector', {
|
||||
|
||||
me.store.setProxy({
|
||||
type: 'proxmox',
|
||||
url: '/api2/json/nodes/' + me.nodename + '/' + me.guestType + '/' + me.vmid +'/snapshot'
|
||||
url: '/api2/json/nodes/' + me.nodename + '/' + me.guestType + '/' + me.vmid +'/snapshot',
|
||||
});
|
||||
|
||||
me.store.load();
|
||||
@ -45,7 +45,7 @@ Ext.define('PVE.form.SnapshotSelector', {
|
||||
|
||||
var store = Ext.create('Ext.data.Store', {
|
||||
fields: [ 'name'],
|
||||
filterOnLoad: true
|
||||
filterOnLoad: true,
|
||||
});
|
||||
|
||||
Ext.apply(me, {
|
||||
@ -56,14 +56,14 @@ Ext.define('PVE.form.SnapshotSelector', {
|
||||
header: gettext('Snapshot'),
|
||||
dataIndex: 'name',
|
||||
hideable: false,
|
||||
flex: 1
|
||||
}
|
||||
]
|
||||
}
|
||||
flex: 1,
|
||||
},
|
||||
],
|
||||
},
|
||||
});
|
||||
|
||||
me.callParent();
|
||||
|
||||
me.loadStore(me.nodename, me.vmid);
|
||||
}
|
||||
},
|
||||
});
|
||||
|
@ -39,8 +39,8 @@ Ext.define('PVE.form.SpiceEnhancementSelector', {
|
||||
value: gettext('Make sure the SPICE WebDav daemon is installed in the VM.'),
|
||||
bind: {
|
||||
hidden: '{!foldersharing.checked}',
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
],
|
||||
|
||||
onGetValues: function(values) {
|
||||
|
@ -12,26 +12,26 @@ Ext.define('PVE.form.StorageSelector', {
|
||||
header: gettext('Name'),
|
||||
dataIndex: 'storage',
|
||||
hideable: false,
|
||||
flex: 1
|
||||
flex: 1,
|
||||
},
|
||||
{
|
||||
header: gettext('Type'),
|
||||
width: 75,
|
||||
dataIndex: 'type'
|
||||
dataIndex: 'type',
|
||||
},
|
||||
{
|
||||
header: gettext('Avail'),
|
||||
width: 90,
|
||||
dataIndex: 'avail',
|
||||
renderer: Proxmox.Utils.format_size
|
||||
renderer: Proxmox.Utils.format_size,
|
||||
},
|
||||
{
|
||||
header: gettext('Capacity'),
|
||||
width: 90,
|
||||
dataIndex: 'total',
|
||||
renderer: Proxmox.Utils.format_size
|
||||
}
|
||||
]
|
||||
renderer: Proxmox.Utils.format_size,
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
reloadStorageList: function() {
|
||||
@ -41,7 +41,7 @@ Ext.define('PVE.form.StorageSelector', {
|
||||
}
|
||||
|
||||
var params = {
|
||||
format: 1
|
||||
format: 1,
|
||||
};
|
||||
var url = '/api2/json/nodes/' + me.nodename + '/storage';
|
||||
if (me.storageContent) {
|
||||
@ -54,7 +54,7 @@ Ext.define('PVE.form.StorageSelector', {
|
||||
me.store.setProxy({
|
||||
type: 'proxmox',
|
||||
url: url,
|
||||
extraParams: params
|
||||
extraParams: params,
|
||||
});
|
||||
|
||||
me.store.load();
|
||||
@ -95,12 +95,12 @@ Ext.define('PVE.form.StorageSelector', {
|
||||
model: 'pve-storage-status',
|
||||
sorters: {
|
||||
property: 'storage',
|
||||
order: 'DESC'
|
||||
}
|
||||
order: 'DESC',
|
||||
},
|
||||
});
|
||||
|
||||
Ext.apply(me, {
|
||||
store: store
|
||||
store: store,
|
||||
});
|
||||
|
||||
me.callParent();
|
||||
@ -108,13 +108,13 @@ Ext.define('PVE.form.StorageSelector', {
|
||||
if (nodename) {
|
||||
me.setNodename(nodename);
|
||||
}
|
||||
}
|
||||
},
|
||||
}, function() {
|
||||
|
||||
Ext.define('pve-storage-status', {
|
||||
extend: 'Ext.data.Model',
|
||||
fields: [ 'storage', 'active', 'type', 'avail', 'total' ],
|
||||
idProperty: 'storage'
|
||||
idProperty: 'storage',
|
||||
});
|
||||
|
||||
});
|
||||
|
@ -45,16 +45,16 @@ Ext.define('PVE.form.TokenSelector', {
|
||||
sortable: true,
|
||||
dataIndex: 'id',
|
||||
renderer: Ext.String.htmlEncode,
|
||||
flex: 1
|
||||
flex: 1,
|
||||
},
|
||||
{
|
||||
header: gettext('Comment'),
|
||||
sortable: false,
|
||||
dataIndex: 'comment',
|
||||
renderer: Ext.String.htmlEncode,
|
||||
flex: 1
|
||||
}
|
||||
]
|
||||
flex: 1,
|
||||
},
|
||||
],
|
||||
},
|
||||
}, function() {
|
||||
Ext.define('pve-tokens', {
|
||||
@ -62,8 +62,8 @@ Ext.define('PVE.form.TokenSelector', {
|
||||
fields: [
|
||||
'id', 'userid', 'tokenid', 'comment',
|
||||
{ type: 'boolean', name: 'privsep' },
|
||||
{ type: 'date', dateFormat: 'timestamp', name: 'expire' }
|
||||
{ type: 'date', dateFormat: 'timestamp', name: 'expire' },
|
||||
],
|
||||
idProperty: 'id'
|
||||
idProperty: 'id',
|
||||
});
|
||||
});
|
||||
|
@ -45,8 +45,8 @@ Ext.define('PVE.form.USBSelector', {
|
||||
filters: [
|
||||
function (item) {
|
||||
return !!item.data.usbpath && !!item.data.prodid && item.data['class'] != 9;
|
||||
}
|
||||
]
|
||||
},
|
||||
],
|
||||
});
|
||||
let emptyText = '';
|
||||
if (me.type === 'device') {
|
||||
@ -65,19 +65,19 @@ Ext.define('PVE.form.USBSelector', {
|
||||
header: (me.type === 'device')?gettext('Device'):gettext('Port'),
|
||||
sortable: true,
|
||||
dataIndex: 'usbid',
|
||||
width: 80
|
||||
width: 80,
|
||||
},
|
||||
{
|
||||
header: gettext('Manufacturer'),
|
||||
sortable: true,
|
||||
dataIndex: 'manufacturer',
|
||||
width: 150
|
||||
width: 150,
|
||||
},
|
||||
{
|
||||
header: gettext('Product'),
|
||||
sortable: true,
|
||||
dataIndex: 'product',
|
||||
flex: 1
|
||||
flex: 1,
|
||||
},
|
||||
{
|
||||
header: gettext('Speed'),
|
||||
@ -93,16 +93,16 @@ Ext.define('PVE.form.USBSelector', {
|
||||
"1.5": "USB 1.x",
|
||||
};
|
||||
return speed_map[value] || value + " Mbps";
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
});
|
||||
|
||||
me.callParent();
|
||||
|
||||
store.load();
|
||||
}
|
||||
},
|
||||
|
||||
}, function() {
|
||||
|
||||
@ -116,14 +116,14 @@ Ext.define('PVE.form.USBSelector', {
|
||||
return val;
|
||||
}
|
||||
return data.get('vendid') + ':' + data.get('prodid');
|
||||
}
|
||||
},
|
||||
},
|
||||
'speed', 'product', 'manufacturer', 'vendid', 'prodid', 'usbpath',
|
||||
{ name: 'port' , type: 'number' },
|
||||
{ name: 'level' , type: 'number' },
|
||||
{ name: 'class' , type: 'number' },
|
||||
{ name: 'devnum' , type: 'number' },
|
||||
{ name: 'busnum' , type: 'number' },
|
||||
{ name: 'port', type: 'number' },
|
||||
{ name: 'level', type: 'number' },
|
||||
{ name: 'class', type: 'number' },
|
||||
{ name: 'devnum', type: 'number' },
|
||||
{ name: 'busnum', type: 'number' },
|
||||
{
|
||||
name: 'product_and_id',
|
||||
type: 'string',
|
||||
@ -133,7 +133,7 @@ Ext.define('PVE.form.USBSelector', {
|
||||
return res;
|
||||
},
|
||||
},
|
||||
]
|
||||
],
|
||||
});
|
||||
|
||||
Ext.define('pve-usb-port', {
|
||||
@ -141,19 +141,19 @@ Ext.define('PVE.form.USBSelector', {
|
||||
fields: [
|
||||
{
|
||||
name: 'usbid',
|
||||
convert: function(val,data) {
|
||||
convert: function(val, data) {
|
||||
if (val) {
|
||||
return val;
|
||||
}
|
||||
return data.get('busnum') + '-' + data.get('usbpath');
|
||||
}
|
||||
},
|
||||
},
|
||||
'speed', 'product', 'manufacturer', 'vendid', 'prodid', 'usbpath',
|
||||
{ name: 'port' , type: 'number' },
|
||||
{ name: 'level' , type: 'number' },
|
||||
{ name: 'class' , type: 'number' },
|
||||
{ name: 'devnum' , type: 'number' },
|
||||
{ name: 'busnum' , type: 'number' },
|
||||
{ name: 'port', type: 'number' },
|
||||
{ name: 'level', type: 'number' },
|
||||
{ name: 'class', type: 'number' },
|
||||
{ name: 'devnum', type: 'number' },
|
||||
{ name: 'busnum', type: 'number' },
|
||||
{
|
||||
name: 'product_and_id',
|
||||
type: 'string',
|
||||
@ -163,6 +163,6 @@ Ext.define('PVE.form.USBSelector', {
|
||||
return res;
|
||||
},
|
||||
},
|
||||
]
|
||||
],
|
||||
});
|
||||
});
|
||||
|
@ -17,8 +17,8 @@ Ext.define('PVE.form.UserSelector', {
|
||||
var store = new Ext.data.Store({
|
||||
model: 'pve-users',
|
||||
sorters: [{
|
||||
property: 'userid'
|
||||
}]
|
||||
property: 'userid',
|
||||
}],
|
||||
});
|
||||
|
||||
Ext.apply(me, {
|
||||
@ -30,45 +30,45 @@ Ext.define('PVE.form.UserSelector', {
|
||||
sortable: true,
|
||||
dataIndex: 'userid',
|
||||
renderer: Ext.String.htmlEncode,
|
||||
flex: 1
|
||||
flex: 1,
|
||||
},
|
||||
{
|
||||
header: gettext('Name'),
|
||||
sortable: true,
|
||||
renderer: PVE.Utils.render_full_name,
|
||||
dataIndex: 'firstname',
|
||||
flex: 1
|
||||
flex: 1,
|
||||
},
|
||||
{
|
||||
header: gettext('Comment'),
|
||||
sortable: false,
|
||||
dataIndex: 'comment',
|
||||
renderer: Ext.String.htmlEncode,
|
||||
flex: 1
|
||||
}
|
||||
]
|
||||
}
|
||||
flex: 1,
|
||||
},
|
||||
],
|
||||
},
|
||||
});
|
||||
|
||||
me.callParent();
|
||||
|
||||
store.load({ params: { enabled: 1 }});
|
||||
}
|
||||
},
|
||||
|
||||
}, function() {
|
||||
|
||||
Ext.define('pve-users', {
|
||||
extend: 'Ext.data.Model',
|
||||
fields: [
|
||||
'userid', 'firstname', 'lastname' , 'email', 'comment',
|
||||
'userid', 'firstname', 'lastname', 'email', 'comment',
|
||||
{ type: 'boolean', name: 'enable' },
|
||||
{ type: 'date', dateFormat: 'timestamp', name: 'expire' }
|
||||
{ type: 'date', dateFormat: 'timestamp', name: 'expire' },
|
||||
],
|
||||
proxy: {
|
||||
type: 'proxmox',
|
||||
url: "/api2/json/access/users"
|
||||
url: "/api2/json/access/users",
|
||||
},
|
||||
idProperty: 'userid'
|
||||
idProperty: 'userid',
|
||||
});
|
||||
|
||||
});
|
||||
|
@ -32,9 +32,9 @@ Ext.define('PVE.form.VlanField', {
|
||||
|
||||
Ext.apply(me, {
|
||||
minValue: 1,
|
||||
maxValue: 4094
|
||||
maxValue: 4094,
|
||||
});
|
||||
|
||||
me.callParent();
|
||||
}
|
||||
},
|
||||
});
|
||||
|
@ -3,7 +3,7 @@ Ext.define('PVE.form.VMCPUFlagSelector', {
|
||||
alias: 'widget.vmcpuflagselector',
|
||||
|
||||
mixins: {
|
||||
field: 'Ext.form.field.Field'
|
||||
field: 'Ext.form.field.Field',
|
||||
},
|
||||
|
||||
disableSelection: true,
|
||||
@ -32,13 +32,13 @@ Ext.define('PVE.form.VMCPUFlagSelector', {
|
||||
{ flag: 'pdpe1gb', desc: 'Allow guest OS to use 1GB size pages, if host HW supports it' },
|
||||
{ flag: 'hv-tlbflush', desc: 'Improve performance in overcommitted Windows guests. May lead to guest bluescreens on old CPUs.' },
|
||||
{ flag: 'hv-evmcs', desc: 'Improve performance for nested virtualization. Only supported on Intel CPUs.' },
|
||||
{ flag: 'aes', desc: 'Activate AES instruction set for HW acceleration.' }
|
||||
{ flag: 'aes', desc: 'Activate AES instruction set for HW acceleration.' },
|
||||
],
|
||||
listeners: {
|
||||
update: function() {
|
||||
this.commitChanges();
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
getValue: function() {
|
||||
@ -105,7 +105,7 @@ Ext.define('PVE.form.VMCPUFlagSelector', {
|
||||
default: return 'Unknown';
|
||||
}
|
||||
},
|
||||
width: 65
|
||||
width: 65,
|
||||
},
|
||||
{
|
||||
xtype: 'widgetcolumn',
|
||||
@ -131,34 +131,34 @@ Ext.define('PVE.form.VMCPUFlagSelector', {
|
||||
view.dirty = view.getValue() !== view.originalValue;
|
||||
view.checkDirty();
|
||||
//view.checkChange();
|
||||
}
|
||||
},
|
||||
},
|
||||
items: [
|
||||
{
|
||||
boxLabel: '-',
|
||||
boxLabelAlign: 'before',
|
||||
inputValue: '-'
|
||||
inputValue: '-',
|
||||
},
|
||||
{
|
||||
checked: true,
|
||||
inputValue: '='
|
||||
inputValue: '=',
|
||||
},
|
||||
{
|
||||
boxLabel: '+',
|
||||
inputValue: '+'
|
||||
}
|
||||
]
|
||||
}
|
||||
inputValue: '+',
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
{
|
||||
dataIndex: 'flag',
|
||||
width: 100
|
||||
width: 100,
|
||||
},
|
||||
{
|
||||
dataIndex: 'desc',
|
||||
cellWrap: true,
|
||||
flex: 1
|
||||
}
|
||||
flex: 1,
|
||||
},
|
||||
],
|
||||
|
||||
initComponent: function() {
|
||||
@ -172,5 +172,5 @@ Ext.define('PVE.form.VMCPUFlagSelector', {
|
||||
me.value = me.originalValue = '';
|
||||
|
||||
me.callParent(arguments);
|
||||
}
|
||||
},
|
||||
});
|
||||
|
@ -4,7 +4,7 @@ Ext.define('PVE.form.VMSelector', {
|
||||
alias: 'widget.vmselector',
|
||||
|
||||
mixins: {
|
||||
field: 'Ext.form.field.Field'
|
||||
field: 'Ext.form.field.Field',
|
||||
},
|
||||
|
||||
allowBlank: true,
|
||||
@ -19,8 +19,8 @@ Ext.define('PVE.form.VMSelector', {
|
||||
sorters: 'vmid',
|
||||
filters: [{
|
||||
property: 'type',
|
||||
value: /lxc|qemu/
|
||||
}]
|
||||
value: /lxc|qemu/,
|
||||
}],
|
||||
},
|
||||
columns: [
|
||||
{
|
||||
@ -28,34 +28,34 @@ Ext.define('PVE.form.VMSelector', {
|
||||
dataIndex: 'vmid',
|
||||
width: 80,
|
||||
filter: {
|
||||
type: 'number'
|
||||
}
|
||||
type: 'number',
|
||||
},
|
||||
},
|
||||
{
|
||||
header: gettext('Node'),
|
||||
dataIndex: 'node'
|
||||
dataIndex: 'node',
|
||||
},
|
||||
{
|
||||
header: gettext('Status'),
|
||||
dataIndex: 'status',
|
||||
filter: {
|
||||
type: 'list'
|
||||
}
|
||||
type: 'list',
|
||||
},
|
||||
},
|
||||
{
|
||||
header: gettext('Name'),
|
||||
dataIndex: 'name',
|
||||
flex: 1,
|
||||
filter: {
|
||||
type: 'string'
|
||||
}
|
||||
type: 'string',
|
||||
},
|
||||
},
|
||||
{
|
||||
header: gettext('Pool'),
|
||||
dataIndex: 'pool',
|
||||
filter: {
|
||||
type: 'list'
|
||||
}
|
||||
type: 'list',
|
||||
},
|
||||
},
|
||||
{
|
||||
header: gettext('Type'),
|
||||
@ -75,41 +75,41 @@ Ext.define('PVE.form.VMSelector', {
|
||||
store: {
|
||||
data: [
|
||||
{id: 'qemu', text: gettext('Virtual Machine')},
|
||||
{id: 'lxc', text: gettext('LXC Container')}
|
||||
{id: 'lxc', text: gettext('LXC Container')},
|
||||
],
|
||||
// due to EXTJS-18711
|
||||
// we have to do a static list via a store
|
||||
// but to avoid creating an object,
|
||||
// we have to have a pseudo un function
|
||||
un: function(){}
|
||||
}
|
||||
}
|
||||
un: function(){},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
header: 'HA ' + gettext('Status'),
|
||||
dataIndex: 'hastate',
|
||||
flex: 1,
|
||||
filter: {
|
||||
type: 'list'
|
||||
}
|
||||
}
|
||||
type: 'list',
|
||||
},
|
||||
},
|
||||
],
|
||||
|
||||
selModel: {
|
||||
selType: 'checkboxmodel',
|
||||
mode: 'SIMPLE'
|
||||
mode: 'SIMPLE',
|
||||
},
|
||||
|
||||
checkChangeEvents: [
|
||||
'selectionchange',
|
||||
'change'
|
||||
'change',
|
||||
],
|
||||
|
||||
listeners: {
|
||||
selectionchange: function() {
|
||||
// to trigger validity and error checks
|
||||
this.checkChange();
|
||||
}
|
||||
},
|
||||
},
|
||||
|
||||
getValue: function() {
|
||||
@ -138,7 +138,7 @@ Ext.define('PVE.form.VMSelector', {
|
||||
var store = me.getStore();
|
||||
|
||||
value.forEach(function(item) {
|
||||
var rec = store.findRecord('vmid',item, 0, false, true, true);
|
||||
var rec = store.findRecord('vmid', item, 0, false, true, true);
|
||||
console.log(store);
|
||||
|
||||
if (rec) {
|
||||
@ -156,11 +156,11 @@ Ext.define('PVE.form.VMSelector', {
|
||||
var me = this;
|
||||
if (me.allowBlank === false &&
|
||||
me.getSelectionModel().getCount() === 0) {
|
||||
me.addBodyCls(['x-form-trigger-wrap-default','x-form-trigger-wrap-invalid']);
|
||||
me.addBodyCls(['x-form-trigger-wrap-default', 'x-form-trigger-wrap-invalid']);
|
||||
return [gettext('No VM selected')];
|
||||
}
|
||||
|
||||
me.removeBodyCls(['x-form-trigger-wrap-default','x-form-trigger-wrap-invalid']);
|
||||
me.removeBodyCls(['x-form-trigger-wrap-default', 'x-form-trigger-wrap-invalid']);
|
||||
return [];
|
||||
},
|
||||
|
||||
@ -173,7 +173,7 @@ Ext.define('PVE.form.VMSelector', {
|
||||
me.store.filters.add({
|
||||
property: 'node',
|
||||
exactMatch: true,
|
||||
value: me.nodename
|
||||
value: me.nodename,
|
||||
});
|
||||
}
|
||||
|
||||
@ -191,12 +191,12 @@ Ext.define('PVE.form.VMSelector', {
|
||||
if (statusfilter !== '') {
|
||||
me.store.filters.add({
|
||||
property: 'template',
|
||||
value: 0
|
||||
},{
|
||||
value: 0,
|
||||
}, {
|
||||
id: 'x-gridfilter-status',
|
||||
operator: 'in',
|
||||
property: 'status',
|
||||
value: [statusfilter]
|
||||
value: [statusfilter],
|
||||
});
|
||||
}
|
||||
}
|
||||
@ -205,11 +205,11 @@ Ext.define('PVE.form.VMSelector', {
|
||||
var sm = me.getSelectionModel();
|
||||
|
||||
if (me.selectAll) {
|
||||
me.mon(store,'load', function(){
|
||||
me.mon(store, 'load', function(){
|
||||
me.getSelectionModel().selectAll(false);
|
||||
});
|
||||
}
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
@ -231,8 +231,8 @@ Ext.define('PVE.form.VMComboSelector', {
|
||||
sorters: 'vmid',
|
||||
filters: [{
|
||||
property: 'type',
|
||||
value: /lxc|qemu/
|
||||
}]
|
||||
value: /lxc|qemu/,
|
||||
}],
|
||||
},
|
||||
|
||||
listConfig: {
|
||||
@ -244,35 +244,35 @@ Ext.define('PVE.form.VMComboSelector', {
|
||||
dataIndex: 'vmid',
|
||||
width: 80,
|
||||
filter: {
|
||||
type: 'number'
|
||||
}
|
||||
type: 'number',
|
||||
},
|
||||
},
|
||||
{
|
||||
header: gettext('Name'),
|
||||
dataIndex: 'name',
|
||||
flex: 1,
|
||||
filter: {
|
||||
type: 'string'
|
||||
}
|
||||
type: 'string',
|
||||
},
|
||||
},
|
||||
{
|
||||
header: gettext('Node'),
|
||||
dataIndex: 'node'
|
||||
dataIndex: 'node',
|
||||
},
|
||||
{
|
||||
header: gettext('Status'),
|
||||
dataIndex: 'status',
|
||||
filter: {
|
||||
type: 'list'
|
||||
}
|
||||
type: 'list',
|
||||
},
|
||||
},
|
||||
{
|
||||
header: gettext('Pool'),
|
||||
dataIndex: 'pool',
|
||||
hidden: true,
|
||||
filter: {
|
||||
type: 'list'
|
||||
}
|
||||
type: 'list',
|
||||
},
|
||||
},
|
||||
{
|
||||
header: gettext('Type'),
|
||||
@ -292,11 +292,11 @@ Ext.define('PVE.form.VMComboSelector', {
|
||||
store: {
|
||||
data: [
|
||||
{id: 'qemu', text: gettext('Virtual Machine')},
|
||||
{id: 'lxc', text: gettext('LXC Container')}
|
||||
{id: 'lxc', text: gettext('LXC Container')},
|
||||
],
|
||||
un: function(){} // due to EXTJS-18711
|
||||
}
|
||||
}
|
||||
un: function(){}, // due to EXTJS-18711
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
header: 'HA ' + gettext('Status'),
|
||||
@ -304,9 +304,9 @@ Ext.define('PVE.form.VMComboSelector', {
|
||||
hidden: true,
|
||||
flex: 1,
|
||||
filter: {
|
||||
type: 'list'
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
type: 'list',
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
});
|
||||
|
@ -1,5 +1,5 @@
|
||||
Ext.define('PVE.form.VNCKeyboardSelector', {
|
||||
extend: 'Proxmox.form.KVComboBox',
|
||||
alias: ['widget.VNCKeyboardSelector'],
|
||||
comboItems: PVE.Utils.kvm_keymap_array()
|
||||
comboItems: PVE.Utils.kvm_keymap_array(),
|
||||
});
|
||||
|
@ -20,18 +20,18 @@ Ext.define('PVE.form.ViewSelector', {
|
||||
var default_views = {
|
||||
server: {
|
||||
text: gettext('Server View'),
|
||||
groups: ['node']
|
||||
groups: ['node'],
|
||||
},
|
||||
folder: {
|
||||
text: gettext('Folder View'),
|
||||
groups: ['type']
|
||||
groups: ['type'],
|
||||
},
|
||||
storage: {
|
||||
text: gettext('Storage View'),
|
||||
groups: ['node'],
|
||||
filterfn: function(node) {
|
||||
return node.data.type === 'storage' || node.data.type === 'node';
|
||||
}
|
||||
},
|
||||
},
|
||||
pool: {
|
||||
text: gettext('Pool View'),
|
||||
@ -40,8 +40,8 @@ Ext.define('PVE.form.ViewSelector', {
|
||||
filterfn: function(node) {
|
||||
return node.data.type === 'qemu' || node.data.type === 'lxc' || node.data.type === 'openvz' ||
|
||||
node.data.type === 'pool';
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
var groupdef = [];
|
||||
@ -53,10 +53,10 @@ Ext.define('PVE.form.ViewSelector', {
|
||||
model: 'KeyValue',
|
||||
proxy: {
|
||||
type: 'memory',
|
||||
reader: 'array'
|
||||
reader: 'array',
|
||||
},
|
||||
data: groupdef,
|
||||
autoload: true
|
||||
autoload: true,
|
||||
});
|
||||
|
||||
Ext.apply(me, {
|
||||
@ -86,7 +86,7 @@ Ext.define('PVE.form.ViewSelector', {
|
||||
stateEvents: [ 'select' ],
|
||||
stateful: true,
|
||||
stateId: 'pveview',
|
||||
id: 'view'
|
||||
id: 'view',
|
||||
});
|
||||
|
||||
me.callParent();
|
||||
@ -99,5 +99,5 @@ Ext.define('PVE.form.ViewSelector', {
|
||||
|
||||
var sp = Ext.state.Manager.getProvider();
|
||||
me.mon(sp, 'statechange', statechange, me);
|
||||
}
|
||||
},
|
||||
});
|
||||
|
@ -5,6 +5,6 @@ Ext.define('PVE.form.iScsiProviderSelector', {
|
||||
['comstar', 'Comstar'],
|
||||
[ 'istgt', 'istgt'],
|
||||
[ 'iet', 'IET'],
|
||||
[ 'LIO', 'LIO']
|
||||
]
|
||||
[ 'LIO', 'LIO'],
|
||||
],
|
||||
});
|
||||
|
@ -43,7 +43,7 @@ Ext.define('PVE.grid.BackupView', {
|
||||
property: 'volid',
|
||||
value: '',
|
||||
anyMatch: true,
|
||||
caseSensitive: false
|
||||
caseSensitive: false,
|
||||
};
|
||||
|
||||
var vmidFilter = {
|
||||
@ -56,13 +56,13 @@ Ext.define('PVE.grid.BackupView', {
|
||||
model: 'pve-storage-content',
|
||||
sorters: {
|
||||
property: 'volid',
|
||||
order: 'DESC'
|
||||
order: 'DESC',
|
||||
},
|
||||
filters: [
|
||||
vmtypeFilter,
|
||||
searchFilter,
|
||||
vmidFilter,
|
||||
]
|
||||
],
|
||||
});
|
||||
|
||||
let updateFilter = function() {
|
||||
@ -85,7 +85,7 @@ Ext.define('PVE.grid.BackupView', {
|
||||
|
||||
me.store.setProxy({
|
||||
type: 'proxmox',
|
||||
url: url
|
||||
url: url,
|
||||
});
|
||||
|
||||
reload();
|
||||
@ -110,8 +110,8 @@ Ext.define('PVE.grid.BackupView', {
|
||||
});
|
||||
}
|
||||
setStorage(value);
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
var storagefilter = Ext.create('Ext.form.field.Text', {
|
||||
@ -126,8 +126,8 @@ Ext.define('PVE.grid.BackupView', {
|
||||
me.store.clearFilter(true);
|
||||
searchFilter.value = field.getValue();
|
||||
updateFilter();
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
var vmidfilterCB = Ext.create('Ext.form.field.Checkbox', {
|
||||
@ -155,11 +155,11 @@ Ext.define('PVE.grid.BackupView', {
|
||||
listeners : {
|
||||
close: function() {
|
||||
reload();
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
});
|
||||
win.show();
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
var restore_btn = Ext.create('Proxmox.button.Button', {
|
||||
@ -175,11 +175,11 @@ Ext.define('PVE.grid.BackupView', {
|
||||
vmid: vmid,
|
||||
volid: rec.data.volid,
|
||||
volidText: PVE.Utils.render_storage_content(rec.data.volid, {}, rec),
|
||||
vmtype: vmtype
|
||||
vmtype: vmtype,
|
||||
});
|
||||
win.show();
|
||||
win.on('destroy', reload);
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
var delete_btn = Ext.create('Proxmox.button.StdRemoveButton', {
|
||||
@ -199,7 +199,7 @@ Ext.define('PVE.grid.BackupView', {
|
||||
},
|
||||
callback: function() {
|
||||
reload();
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
var config_btn = Ext.create('Proxmox.button.Button', {
|
||||
@ -217,11 +217,11 @@ Ext.define('PVE.grid.BackupView', {
|
||||
|
||||
var win = Ext.create('PVE.window.BackupConfig', {
|
||||
volume: rec.data.volid,
|
||||
pveSelNode: me.pveSelNode
|
||||
pveSelNode: me.pveSelNode,
|
||||
});
|
||||
|
||||
win.show();
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
Ext.apply(me, {
|
||||
@ -278,7 +278,7 @@ Ext.define('PVE.grid.BackupView', {
|
||||
storagesel,
|
||||
'-',
|
||||
vmidfilterCB,
|
||||
storagefilter
|
||||
storagefilter,
|
||||
],
|
||||
},
|
||||
columns: [
|
||||
@ -287,7 +287,7 @@ Ext.define('PVE.grid.BackupView', {
|
||||
flex: 2,
|
||||
sortable: true,
|
||||
renderer: PVE.Utils.render_storage_content,
|
||||
dataIndex: 'volid'
|
||||
dataIndex: 'volid',
|
||||
},
|
||||
{
|
||||
header: gettext('Notes'),
|
||||
@ -298,18 +298,18 @@ Ext.define('PVE.grid.BackupView', {
|
||||
{
|
||||
header: gettext('Date'),
|
||||
width: 150,
|
||||
dataIndex: 'vdate'
|
||||
dataIndex: 'vdate',
|
||||
},
|
||||
{
|
||||
header: gettext('Format'),
|
||||
width: 100,
|
||||
dataIndex: 'format'
|
||||
dataIndex: 'format',
|
||||
},
|
||||
{
|
||||
header: gettext('Size'),
|
||||
width: 100,
|
||||
renderer: Proxmox.Utils.format_size,
|
||||
dataIndex: 'size'
|
||||
dataIndex: 'size',
|
||||
},
|
||||
{
|
||||
header: gettext('VMID'),
|
||||
@ -325,10 +325,10 @@ Ext.define('PVE.grid.BackupView', {
|
||||
header: gettext('Verify State'),
|
||||
dataIndex: 'verification',
|
||||
renderer: PVE.Utils.render_backup_verification,
|
||||
}
|
||||
]
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
me.callParent();
|
||||
}
|
||||
},
|
||||
});
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user