// 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: {
+Ext.define('PVE.Utils', {
+ utilities: {
// this singleton contains miscellaneous 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.',
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' },
{ 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) {
}
var icon = 'faded fa-question';
- switch(state) {
+ switch (state) {
case 'good':
icon = 'good fa-check';
break;
if (av === undefined && bv === undefined) {
return 0;
- } else if (av === undefined) {
+ } else if (av === undefined) {
return -1;
} else if (bv === undefined) {
return 1;
// else we need to look at the next parts
}
}
-
},
get_ceph_icon_html: function(health, fw) {
},
map_ceph_health: {
- 'HEALTH_OK':'good',
- 'HEALTH_UPGRADE':'upgrade',
- 'HEALTH_OLD':'old',
- 'HEALTH_WARN':'warning',
- 'HEALTH_ERR':'critical'
+ 'HEALTH_OK': 'good',
+ 'HEALTH_UPGRADE': 'upgrade',
+ 'HEALTH_OLD': 'old',
+ 'HEALTH_WARN': 'warning',
+ 'HEALTH_ERR': 'critical',
},
render_ceph_health: function(healthObj) {
var state = {
iconCls: PVE.Utils.get_health_icon(),
- text: ''
+ text: '',
};
if (!healthObj || !healthObj.status) {
},
render_zfs_health: function(value) {
- if (typeof value == 'undefined'){
+ if (typeof value == 'undefined') {
return "";
}
var iconCls = 'question-circle';
}
return '<i class="fa fa-' + iconCls + '"></i> ' + value;
-
},
render_pbs_fingerprint: fp => fp.substring(0, 23),
if (v === undefined || v === null) {
return i('question-circle-o warning', gettext('None'));
}
- let tip = ""
+ let tip = "";
let txt = gettext('Failed');
let iconCls = 'times critical';
if (v.state === 'ok') {
var dows = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'];
var selected = [];
var cur = -1;
- val.split(',').forEach(function(day){
+ val.split(',').forEach(function(day) {
cur++;
var dow = (dows.indexOf(day)+6)%7;
if (cur === dow) {
return info;
},
- render_kvm_ostype: function (value) {
+ render_kvm_ostype: function(value) {
var osinfo = PVE.Utils.get_kvm_osinfo(value);
if (osinfo.desc && osinfo.desc !== '-') {
return osinfo.base + ' ' + osinfo.desc;
}
},
- render_hotplug_features: function (value) {
+ render_hotplug_features: function(value) {
var fa = [];
if (!value || (value === '0')) {
render_qga_features: function(value) {
if (!value) {
- return Proxmox.Utils.defaultText + ' (' + Proxmox.Utils.disabledText + ')';
+ return Proxmox.Utils.defaultText + ' (' + Proxmox.Utils.disabledText + ')';
}
var props = PVE.Parser.parsePropertyString(value, 'enabled');
if (!PVE.Parser.parseBoolean(props.enabled)) {
var agentstring = Proxmox.Utils.enabledText;
Ext.Object.each(props, function(key, value) {
- var keystring = '' ;
+ var keystring = '';
agentstring += ', ' + key + ': ';
if (key === 'type') {
sl: 'Slovenian',
sv: 'Swedish',
//th: 'Thai',
- tr: 'Turkish'
+ tr: 'Turkish',
},
kvm_vga_drivers: {
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) {
+ render_kvm_language: function(value) {
if (!value || value === '__default__') {
return Proxmox.Utils.defaultText;
}
'__default__': Proxmox.Utils.defaultText + ' (xterm.js)',
'vv': 'SPICE (remote-viewer)',
'html5': 'HTML5 (noVNC)',
- 'xtermjs': 'xterm.js'
+ 'xtermjs': 'xterm.js',
},
render_console_viewer: function(value) {
});
},
- render_kvm_vga_driver: function (value) {
+ render_kvm_vga_driver: function(value) {
if (!value) {
return Proxmox.Utils.defaultText;
}
'vztmpl': gettext('Container template'),
'iso': gettext('ISO image'),
'rootdir': gettext('Container'),
- 'snippets': gettext('Snippets')
+ 'snippets': gettext('Snippets'),
},
volume_is_qemu_backup: function(volid, format) {
dir: {
name: Proxmox.Utils.directoryText,
ipanel: 'DirInputPanel',
- faIcon: 'folder'
+ faIcon: 'folder',
+ backups: true,
},
lvm: {
name: 'LVM',
ipanel: 'LVMInputPanel',
- faIcon: 'folder'
+ faIcon: 'folder',
+ backups: false,
},
lvmthin: {
name: 'LVM-Thin',
ipanel: 'LvmThinInputPanel',
- faIcon: 'folder'
+ faIcon: 'folder',
+ backups: false,
},
nfs: {
name: 'NFS',
ipanel: 'NFSInputPanel',
- faIcon: 'building'
+ faIcon: 'building',
+ backups: true,
},
cifs: {
name: 'CIFS',
ipanel: 'CIFSInputPanel',
- faIcon: 'building'
+ faIcon: 'building',
+ backups: true,
},
glusterfs: {
name: 'GlusterFS',
ipanel: 'GlusterFsInputPanel',
- faIcon: 'building'
+ faIcon: 'building',
+ backups: true,
},
iscsi: {
name: 'iSCSI',
ipanel: 'IScsiInputPanel',
- faIcon: 'building'
+ faIcon: 'building',
+ backups: false,
},
cephfs: {
name: 'CephFS',
ipanel: 'CephFSInputPanel',
- faIcon: 'building'
+ faIcon: 'building',
+ backups: true,
},
pvecephfs: {
name: 'CephFS (PVE)',
ipanel: 'CephFSInputPanel',
hideAdd: true,
- faIcon: 'building'
+ faIcon: 'building',
+ backups: true,
},
rbd: {
name: 'RBD',
ipanel: 'RBDInputPanel',
- faIcon: 'building'
+ faIcon: 'building',
+ backups: false,
},
pveceph: {
name: 'RBD (PVE)',
ipanel: 'RBDInputPanel',
hideAdd: true,
- faIcon: 'building'
+ faIcon: 'building',
+ backups: false,
},
zfs: {
name: 'ZFS over iSCSI',
ipanel: 'ZFSInputPanel',
- faIcon: 'building'
+ faIcon: 'building',
+ backups: false,
},
zfspool: {
name: 'ZFS',
ipanel: 'ZFSPoolInputPanel',
- faIcon: 'folder'
+ faIcon: 'folder',
+ backups: false,
},
pbs: {
name: 'Proxmox Backup Server',
ipanel: 'PBSInputPanel',
faIcon: 'floppy-o',
+ backups: true,
},
drbd: {
name: 'DRBD',
hideAdd: true,
+ backups: false,
},
},
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',
},
},
if (value.managed) {
text = value.state || Proxmox.Utils.noneText;
- text += ', ' + Proxmox.Utils.groupText + ': ';
+ text += ', ' + Proxmox.Utils.groupText + ': ';
text += value.group || Proxmox.Utils.noneText;
}
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) {
+ render_serverity: function(value) {
return PVE.Utils.log_severity_hash[value] || value;
},
render_cpu: function(value, metaData, record, rowIndex, colIndex, store) {
-
if (!(record.data.uptime && Ext.isNumeric(value))) {
return '';
}
},
render_size: function(value, metaData, record, rowIndex, colIndex, store) {
-
if (!Ext.isNumeric(value)) {
return '';
}
if (!Ext.isNumeric(value) || value === -1) {
return '';
}
- if (value > 1 ) {
+ if (value > 1) {
// we got no percentage but bytes
var mem = value;
var maxmem = record.data.maxmem;
},
render_mem_usage: function(value, metaData, record, rowIndex, colIndex, store) {
-
var mem = value;
var maxmem = record.data.maxmem;
},
calculate_disk_usage: function(data) {
-
if (!Ext.isNumeric(data.disk) ||
data.type === 'qemu' ||
(data.type === 'lxc' && data.uptime === 0) ||
},
render_disk_usage: function(value, metaData, record, rowIndex, colIndex, store) {
-
var disk = value;
var maxdisk = record.data.maxdisk;
var type = record.data.type;
},
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> ';
+ var fa = '<i class="fa-fw x-grid-icon-custom ' + cls + '"></i> ';
return fa + value;
},
'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;
+ return "U2F Error: " + ErrorNames[error] || Proxmox.Utils.unknownText;
},
windowHostname: function() {
},
defaultViewer: function(consoles) {
-
var allowSpice, allowXtermjs;
if (consoles === true) {
vmname: vmname,
node: nodename,
resize: scaling,
- cmd: cmd
+ cmd: cmd,
});
var nw = window.open("?" + url, '_blank', "innerWidth=745,innerheight=427");
if (nw) {
}
},
- openSpiceViewer: function(url, params){
-
+ openSpiceViewer: function(url, params) {
var downloadWithName = function(uri, name) {
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
// but we do not set 'download' tag for other environments, because
// It can have strange side effects (additional user prompt on firefox)
- var andriod = navigator.userAgent.match(/Android/i) ? true : false;
+ var andriod = !!navigator.userAgent.match(/Android/i);
if (andriod) {
link.download = name;
}
url: url,
params: params,
method: 'POST',
- failure: function(response, opts){
+ failure: function(response, opts) {
Ext.Msg.alert('Error', response.htmlStatus);
},
- success: function(response, opts){
+ success: function(response, opts) {
var raw = "[virt-viewer]\n";
Ext.Object.each(response.result.data, function(k, v) {
raw += k + "=" + v + "\n";
encodeURIComponent(raw);
downloadWithName(url, "pve-spice.vv");
- }
+ },
});
},
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);
// test automation helper
call_menu_handler: function(menu, text) {
-
var list = menu.query('menuitem');
Ext.Array.each(list, function(item) {
if (template) {
if (type === 'qemu' || type == 'lxc') {
menu = Ext.create('PVE.menu.TemplateMenu', {
- pveSelNode: record
+ pveSelNode: record,
});
}
} else if (type === 'qemu' ||
type === 'node') {
menu = Ext.create('PVE.' + type + '.CmdMenu', {
pveSelNode: record,
- nodename: record.data.node
+ nodename: record.data.node,
});
} else {
return;
if (Ext.isArray(types)) {
busses = types;
} else if (Ext.isDefined(types)) {
- busses = [ types ];
+ busses = [types];
}
// check if we only have valid busses
hardware_counts: { net: 32, usb: 5, hostpci: 16, audio: 1, efidisk: 1, serial: 4, rng: 1 },
- cleanEmptyObjectKeys: function (obj) {
+ cleanEmptyObjectKeys: function(obj) {
var propName;
for (propName in obj) {
if (obj.hasOwnProperty(propName)) {
acme.domains = [domain];
} else {
acme.domains.push(domain);
- acme.domains = acme.domains.filter((value, index, self) => {
- return self.indexOf(value) === index;
- });
+ acme.domains = acme.domains.filter((value, index, self) => self.indexOf(value) === index);
}
return acme;
},
remove_domain_from_acme: function(acme, domain) {
if (acme.domains !== undefined) {
- acme.domains = acme.domains.filter((value, index, self) => {
- return self.indexOf(value) === index && value !== domain;
- });
+ acme.domains = acme.domains.filter((value, index, self) => self.indexOf(value) === index && value !== domain);
}
return acme;
},
handleStoreErrorOrMask: function(me, store, regex, callback) {
-
- me.mon(store, 'load', function (proxy, response, success, operation) {
-
+ me.mon(store, 'load', function(proxy, response, success, operation) {
if (success) {
Proxmox.Utils.setErrorMask(me, false);
return;
});
},
- showCephInstallOrMask: function(container, msg, nodename, callback){
+ showCephInstallOrMask: function(container, msg, nodename, callback) {
var regex = new RegExp("not (installed|initialized)", "i");
if (msg.match(regex)) {
if (Proxmox.UserName === 'root@pam') {
container.el.mask();
- if (!container.down('pveCephInstallWindow')){
- var isInstalled = msg.match(/not initialized/i) ? true : false;
+ if (!container.down('pveCephInstallWindow')) {
+ var isInstalled = !!msg.match(/not initialized/i);
var win = Ext.create('PVE.ceph.Install', {
- nodename: nodename
+ nodename: nodename,
});
win.getViewModel().set('isInstalled', isInstalled);
container.add(win);
cpu_vendor_map: {
'default': 'QEMU',
'AuthenticAMD': 'AMD',
- 'GenuineIntel': 'Intel'
+ 'GenuineIntel': 'Intel',
},
cpu_vendor_order: {
vzumount: ['CT', gettext('Unmount')],
zfscreate: [gettext('ZFS Storage'), gettext('Create')],
});
- }
+ },
});