[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