cbindData: function(initialConfig) {
let me = this;
- me.isCreate = !me.name || !me.nodename;
+ me.isCreate = (!me.name || !me.nodename) && !me.entryOnly;
me.method = me.name ? 'PUT' : 'POST';
+ me.hideMapping = !!me.entryOnly;
+ me.hideComment = me.name && !me.entryOnly;
+ me.hideNodeSelector = me.nodename || me.entryOnly;
+ me.hideNode = !me.nodename || !me.hideNodeSelector;
return {
name: me.name,
nodename: me.nodename,
let me = this;
let view = me.getView();
me.originalMap = [...values.map];
- values.map = PVE.Parser.filterPropertyStringList(values.map, (e) => e.node === view.nodename);
+ let configuredNodes = [];
+ values.map = PVE.Parser.filterPropertyStringList(values.map, (e) => {
+ configuredNodes.push(e.node);
+ return e.node === view.nodename;
+ });
+
+ me.lookup('nodeselector').disallowedNodes = configuredNodes;
return values;
},
me.lookup('iommu_warning').setVisible(
records.every((val) => val.data.iommugroup === -1),
);
+
+ let value = me.lookup('pciselector').getValue();
+ me.checkIsolated(value);
+ },
+
+ checkIsolated: function(value) {
+ let me = this;
+
+ let store = me.lookup('pciselector').getStore();
+
+ let isIsolated = function(entry) {
+ let isolated = true;
+ let parsed = PVE.Parser.parsePropertyString(entry);
+ parsed.iommugroup = parseInt(parsed.iommugroup, 10);
+ if (!parsed.iommugroup) {
+ return isolated;
+ }
+ store.each(({ data }) => {
+ let isSubDevice = data.id.startsWith(parsed.path);
+ if (data.iommugroup === parsed.iommugroup && data.id !== parsed.path && !isSubDevice) {
+ isolated = false;
+ return false;
+ }
+ return true;
+ });
+ return isolated;
+ };
+
+ let showWarning = false;
+ if (Ext.isArray(value)) {
+ for (const entry of value) {
+ if (!isIsolated(entry)) {
+ showWarning = true;
+ break;
+ }
+ }
+ } else {
+ showWarning = isIsolated(value);
+ }
+ me.lookup('group_warning').setVisible(showWarning);
},
mdevChange: function(mdevField, value) {
pciChange: function(_field, value) {
let me = this;
me.lookup('multiple_warning').setVisible(Ext.isArray(value) && value.length > 1);
+ me.checkIsolated(value);
},
control: {
hidden: true,
columnWidth: 1,
padding: '0 0 10 0',
- value: 'No IOMMU detected, please activate it.' +
- 'See Documentation for further information.',
+ value: gettext('No IOMMU detected, please activate it. See Documentation for further information.'),
userCls: 'pmx-hint',
},
{
hidden: true,
columnWidth: 1,
padding: '0 0 10 0',
- value: 'When multiple devices are selected, the first free one will be chosen' +
- ' on guest start.',
+ value: gettext('When multiple devices are selected, the first free one will be chosen on guest start.'),
userCls: 'pmx-hint',
},
{
columnWidth: 1,
padding: '0 0 10 0',
itemId: 'iommuwarning',
- value: 'The selected Device is not in a seperate IOMMU group, make sure this is intended.',
+ value: gettext('A selected device is not in a separate IOMMU group, make sure this is intended.'),
userCls: 'pmx-hint',
},
],
allowBlank: false,
},
{
- xtype: 'pmxDisplayEditField',
+ xtype: 'displayfield',
fieldLabel: gettext('Mapping on Node'),
labelWidth: 120,
name: 'node',
- editConfig: {
- xtype: 'pveNodeSelector',
- },
cbind: {
- editable: '{!nodename}',
value: '{nodename}',
+ disabled: '{hideNode}',
+ hidden: '{hideNode}',
+ },
+ allowBlank: false,
+ },
+ {
+ xtype: 'pveNodeSelector',
+ reference: 'nodeselector',
+ fieldLabel: gettext('Mapping on Node'),
+ labelWidth: 120,
+ name: 'node',
+ cbind: {
+ disabled: '{hideNodeSelector}',
+ hidden: '{hideNodeSelector}',
},
allowBlank: false,
},
],
column2: [
- {
- // as spacer
- xtype: 'displayfield',
- },
{
xtype: 'proxmoxcheckbox',
- fieldLabel: gettext('Mediated Devices'),
- labelWidth: 120,
+ fieldLabel: gettext('Use with Mediated Devices'),
+ labelWidth: 200,
reference: 'mdev',
name: 'mdev',
cbind: {
deleteEmpty: '{!isCreate}',
+ disabled: '{hideComment}',
},
},
],
name: 'map',
cbind: {
nodename: '{nodename}',
+ disabled: '{hideMapping}',
+ hidden: '{hideMapping}',
},
allowBlank: false,
onLoadCallBack: 'checkIommu',
name: 'description',
cbind: {
deleteEmpty: '{!isCreate}',
+ disabled: '{hideComment}',
+ hidden: '{hideComment}',
},
},
],