[pve-devel] [PATCH manager v7 4/4] fix #5175: ui: allow configuring and live migration of mapped pci resources
Dominik Csapak
d.csapak at proxmox.com
Tue Mar 11 14:20:53 CET 2025
if the hardware/driver is capable, the admin can now mark a pci device
as 'live-migration-capable', which then tries enabling live migration
for such devices.
mark it as experimental when configuring and in the migrate window
also change 'hideComment' to 'globalEdit' and reverse the logic
(so hideComment => !globalEdit) to better reflect what it does now.
Signed-off-by: Dominik Csapak <d.csapak at proxmox.com>
---
changes from v6:
* dropped the check for 'mappedResources' since it was always true
* renamed 'hideComment' to 'globalEdit' (and reversed it)
-> no change in logic
www/manager6/window/Migrate.js | 25 ++++++++++++++++++++-----
www/manager6/window/PCIMapEdit.js | 20 ++++++++++++++++----
2 files changed, 36 insertions(+), 9 deletions(-)
diff --git a/www/manager6/window/Migrate.js b/www/manager6/window/Migrate.js
index 604b63e7..dba5556b 100644
--- a/www/manager6/window/Migrate.js
+++ b/www/manager6/window/Migrate.js
@@ -244,10 +244,10 @@ Ext.define('PVE.window.Migrate', {
}
let blockingResources = [];
- let mappedResources = migrateStats['mapped-resources'] ?? [];
+ let mappedResources = migrateStats['mapped-resource-info'] ?? {};
for (const res of migrateStats.local_resources) {
- if (mappedResources.indexOf(res) === -1) {
+ if (!mappedResources[res]) {
blockingResources.push(res);
}
}
@@ -271,14 +271,29 @@ Ext.define('PVE.window.Migrate', {
}
}
- if (mappedResources && mappedResources.length) {
- if (vm.get('running')) {
+ if (vm.get('running')) {
+ let allowed = [];
+ let notAllowed = [];
+ for (const [key, resource] of Object.entries(mappedResources)) {
+ if (resource['live-migration']) {
+ allowed.push(key);
+ } else {
+ notAllowed.push(key);
+ }
+ }
+ if (notAllowed.length > 0) {
migration.possible = false;
migration.preconditions.push({
text: Ext.String.format('Can\'t migrate running VM with mapped resources: {0}',
- mappedResources.join(', ')),
+ notAllowed.join(', ')),
severity: 'error',
});
+ } else if (allowed.length > 0) {
+ migration.preconditions.push({
+ text: Ext.String.format('Live-migrating running VM with mapped resources (Experimental): {0}',
+ allowed.join(', ')),
+ severity: 'warning',
+ });
}
}
diff --git a/www/manager6/window/PCIMapEdit.js b/www/manager6/window/PCIMapEdit.js
index faf58255..8b7ff826 100644
--- a/www/manager6/window/PCIMapEdit.js
+++ b/www/manager6/window/PCIMapEdit.js
@@ -16,7 +16,7 @@ Ext.define('PVE.window.PCIMapEditWindow', {
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.globalEdit = !me.name || me.entryOnly;
me.hideNodeSelector = me.nodename || me.entryOnly;
me.hideNode = !me.nodename || !me.hideNodeSelector;
return {
@@ -241,7 +241,19 @@ Ext.define('PVE.window.PCIMapEditWindow', {
name: 'mdev',
cbind: {
deleteEmpty: '{!isCreate}',
- disabled: '{hideComment}',
+ disabled: '{!globalEdit}',
+ },
+ },
+ {
+ xtype: 'proxmoxcheckbox',
+ fieldLabel: gettext('Live Migration Capable'),
+ labelWidth: 200,
+ boxLabel: `<i class="fa fa-exclamation-triangle warning"></i> ${gettext('Experimental')}`,
+ reference: 'live-migration-capable',
+ name: 'live-migration-capable',
+ cbind: {
+ deleteEmpty: '{!isCreate}',
+ disabled: '{!globalEdit}',
},
},
],
@@ -271,8 +283,8 @@ Ext.define('PVE.window.PCIMapEditWindow', {
name: 'description',
cbind: {
deleteEmpty: '{!isCreate}',
- disabled: '{hideComment}',
- hidden: '{hideComment}',
+ disabled: '{!globalEdit}',
+ hidden: '{!globalEdit}',
},
},
],
--
2.39.5
More information about the pve-devel
mailing list