[pve-devel] [RFC PATCH manager] migrate: fix conntrack migration and ha-resources checkbox
Thomas Lamprecht
t.lamprecht at proxmox.com
Fri Aug 1 08:38:16 CEST 2025
Am 31.07.25 um 17:58 schrieb Gabriel Goller:
> The checkbox wasn't displayed and following errors were on the console:
>
> failed to query /capabilites/qemu/migration on '': [object Object] pvemanagerlib.js:20401:25
> Uncaught (in promise) TypeError: comigratedHAResources is not iterable
> checkQemuPreconditions https://172.16.0.18:8006/pve2/js/pvemanagerlib.js?ver=9.0.0~17:20595
>
> Error is an object, so we need to print it in the next line, otherwise
> only [object Object] is shown. Check if comigratedHAResources is
> iterable, otherwise don't iterate over it.
>
> Signed-off-by: Gabriel Goller <g.goller at proxmox.com>
> ---
>
> Tested this quickly but no idea if it's correct. Maybe Daniel and
> Christoph could have a look at it.
>
> www/manager6/window/Migrate.js | 5 +++--
> 1 file changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/www/manager6/window/Migrate.js b/www/manager6/window/Migrate.js
> index b5ecb9603cf1..c884fbddd1aa 100644
> --- a/www/manager6/window/Migrate.js
> +++ b/www/manager6/window/Migrate.js
> @@ -254,7 +254,8 @@ Ext.define('PVE.window.Migrate', {
> } catch (err) {
> // Only emit a warning in the case the target node does not (yet) support the
> // `capabilites/qemu/migration` endpoint and simply treat all features as unsupported.
> - console.warn(`failed to query /capabilites/qemu/migration on '${target}': ${err}`);
FWIW, could be also done by moving it out from the template string to a separate param:
console.warn(`failed to query /capabilites/qemu/migration on '${target}':`, err);
> + console.warn(`failed to query /capabilites/qemu/migration on '${target}':`);
> + console.warn(err);
> }
>
> me.fetchingNodeMigrateInfo = false;
> @@ -447,7 +448,7 @@ Ext.define('PVE.window.Migrate', {
> }
>
> let comigratedHAResources = migrateStats['comigrated-ha-resources'];
> - if (comigratedHAResources !== undefined) {
> + if (comigratedHAResources !== undefined && typeof comigratedHAResources[Symbol.iterator] === 'function') {
If it exists this is always an array per the schema though,
so the following might be enough:
if (typeof comigratedHAResources === 'array') {
Or use the ExtJS frameworks' Ext.isIterable() while under the hood it's a bit more
heuristic than your check, it should cover all (for us) relevant cases
if (Ext.isIterable(comigratedHAResources)) {
Your variant might be fine as Proxmox.Utils method though, but rather overkill for
now.
> for (const sid of comigratedHAResources) {
> const text = Ext.String.format(
> gettext(
More information about the pve-devel
mailing list