mirror of
https://git.proxmox.com/git/pve-manager
synced 2025-06-02 16:57:17 +00:00

this fixes two problems: * we were loading the store before the parent ComboGrid class could put a listener on the load event * displayField must now be set in class body, take opportunity to move out what we can of the mega initComponent() this two fixes allow the HA GroupEdit Window to properly display the existing members of a HA Group when editing group membership
99 lines
2.0 KiB
JavaScript
99 lines
2.0 KiB
JavaScript
Ext.define('PVE.form.NodeSelector', {
|
|
extend: 'PVE.form.ComboGrid',
|
|
alias: ['widget.pveNodeSelector'],
|
|
|
|
// invalidate nodes which are offline
|
|
onlineValidator: false,
|
|
|
|
selectCurNode: false,
|
|
|
|
// only allow those nodes (array)
|
|
allowedNodes: undefined,
|
|
|
|
valueField: 'node',
|
|
displayField: 'node',
|
|
store: {
|
|
fields: [ 'node', 'cpu', 'maxcpu', 'mem', 'maxmem', 'uptime' ],
|
|
proxy: {
|
|
type: 'pve',
|
|
url: '/api2/json/nodes'
|
|
},
|
|
sorters: [
|
|
{
|
|
property : 'node',
|
|
direction: 'ASC'
|
|
},
|
|
{
|
|
property : 'mem',
|
|
direction: 'DESC'
|
|
}
|
|
]
|
|
},
|
|
|
|
listConfig: {
|
|
columns: [
|
|
{
|
|
header: gettext('Node'),
|
|
dataIndex: 'node',
|
|
sortable: true,
|
|
hideable: false,
|
|
flex: 1
|
|
},
|
|
{
|
|
header: gettext('Memory usage'),
|
|
renderer: PVE.Utils.render_mem_usage,
|
|
sortable: true,
|
|
width: 100,
|
|
dataIndex: 'mem'
|
|
},
|
|
{
|
|
header: gettext('CPU usage'),
|
|
renderer: PVE.Utils.render_cpu,
|
|
sortable: true,
|
|
width: 100,
|
|
dataIndex: 'cpu'
|
|
}
|
|
],
|
|
},
|
|
|
|
validator: function(value) {
|
|
/*jslint confusion: true */
|
|
var me = this;
|
|
if (!me.onlineValidator || (me.allowBlank && !value)) {
|
|
return true;
|
|
}
|
|
|
|
var offline = [];
|
|
var notAllowed = [];
|
|
|
|
Ext.Array.each(value.split(/\s*,\s*/), function(node) {
|
|
var rec = me.store.findRecord(me.valueField, node);
|
|
if (!(rec && rec.data) || !Ext.isNumeric(rec.data.mem)) {
|
|
offline.push(node);
|
|
} else if (me.allowedNodes && !Ext.Array.contains(me.allowedNodes, node)) {
|
|
notAllowed.push(node);
|
|
}
|
|
});
|
|
|
|
if (notAllowed.length !== 0) {
|
|
return "Node " + notAllowed.join(', ') + " is not allowed for this action!";
|
|
}
|
|
|
|
if (offline.length !== 0) {
|
|
return "Node " + offline.join(', ') + " seems to be offline!";
|
|
}
|
|
return true;
|
|
},
|
|
|
|
initComponent: function() {
|
|
var me = this;
|
|
|
|
if (me.selectCurNode && PVE.curSelectedNode.data.node) {
|
|
me.preferredValue = PVE.curSelectedNode.data.node;
|
|
}
|
|
|
|
me.callParent();
|
|
me.getStore().load();
|
|
}
|
|
});
|