Skip to content

[Bug]: Proxmox VE Cluster Migration #1669

Description

@Mwalton4uk

Describe the bug

When a Virtual Machine or Container migrates to another node in the cluster, Pulse correctly tracks the migration and displays the resource on its new node. However, the Web Interface URL assignment and any linked Availability Checks are not carried over to the new location.

Example: A Home Assistant VM named haos on Node 1 has a Web Interface URL and an Availability Check linked via "Link to resource (optional)". Upon migration to another node, both associations are lost.

To reproduce

  1. Add Proxmox VE Cluster API
  2. Attach a "Web Interface URL" and/or "Link to resource (optional)" to a VM/CT
  3. Migrate VM/CT to another node within same cluster

Expected behavior

I would expect, since the API is on the cluster level, for Pulse to track the move and keep/move the paired "Web Interface URL" and/or "Link to resource (optional)".

Pulse version

v6.1.2

Agent version

v6.1.2

Image tag or digest

v6.1.2

Installation type

ProxmoxVE LXC

Relevant logs or diagnostics

{
  "version": "6.1.2",
  "runtime": "go",
  "uptime": 55177.300792141,
  "nodes": [
    {
      "id": "node-1",
      "name": "node-1",
      "host": "node-1",
      "type": "pve",
      "authMethod": "api_token",
      "connected": true,
      "details": {
        "node_count": 3,
        "version": "pve-manager/9.2.6/7f8d010005bd72cb"
      },
      "clusterInfo": {
        "nodes": 4
      },
      "vmDiskCheck": {
        "vmsFound": 5,
        "vmsWithAgent": 0,
        "vmsWithDiskData": 0,
        "testResult": "No running VMs found to test",
        "permissions": [],
        "recommendations": [
          "Start a VM to test disk monitoring"
        ],
        "problematicVMs": [],
        "filesystemsFound": []
      },
      "physicalDisks": {
        "nodesChecked": 3,
        "nodesWithDisks": 3,
        "totalDisks": 9,
        "nodeResults": [
          {
            "nodeName": "opal-hv-01",
            "diskCount": 3,
            "diskDevices": [
              "/dev/nvme0n1",
              "/dev/nvme1n1",
              "/dev/nvme2n1"
            ]
          },
          {
            "nodeName": "opal-hv-02",
            "diskCount": 3,
            "diskDevices": [
              "/dev/nvme0n1",
              "/dev/nvme1n1",
              "/dev/nvme2n1"
            ]
          },
          {
            "nodeName": "opal-hv-04",
            "diskCount": 3,
            "diskDevices": [
              "/dev/nvme1n1",
              "/dev/nvme2n1",
              "/dev/nvme3n1"
            ]
          }
        ],
        "testResult": "Found 9 disks across 3 of 3 nodes",
        "recommendations": []
      }
    }
  ],
  "pbs": [],
  "system": {
    "os": "linux",
    "arch": "amd64",
    "goVersion": "go1.26.5",
    "numCPU": 12,
    "numGoroutine": 102,
    "memoryMB": 127
  },
  "metricsStore": {
    "enabled": true,
    "status": "healthy",
    "dbSize": 617766912,
    "rawCount": 502876,
    "minuteCount": 1255292,
    "hourlyCount": 60254,
    "dailyCount": 1970,
    "totalPoints": 1820392,
    "notes": []
  },
  "discovery": {
    "enabled": false,
    "configuredSubnet": "[REDACTED_SUBNET]",
    "environmentOverride": "[REDACTED]",
    "subnetAllowlist": [],
    "subnetBlocklist": [
      "[REDACTED_SUBNET]"
    ],
    "scanning": false,
    "history": []
  },
  "apiTokens": {
    "enabled": true,
    "tokenCount": 16,
    "recommendTokenSetup": false,
    "unusedTokenCount": 9,
    "notes": [
      "9 API token(s) have never been used. Remove unused tokens or update the corresponding agents."
    ],
    "tokens": [
      {
        "id": "token-1",
        "name": "token-1",
        "hint": "[REDACTED]",
        "createdAt": "2026-08-01T21:11:19Z",
        "lastUsedAt": "2026-08-02T11:50:40Z",
        "source": "user"
      },
      {
        "id": "token-2",
        "name": "token-2",
        "hint": "[REDACTED]",
        "createdAt": "2026-08-01T21:10:56Z",
        "source": "user"
      },
      {
        "id": "token-3",
        "name": "token-3",
        "hint": "[REDACTED]",
        "createdAt": "2026-08-01T21:10:23Z",
        "lastUsedAt": "2026-08-02T11:50:49Z",
        "source": "user"
      },
      {
        "id": "token-4",
        "name": "token-4",
        "hint": "[REDACTED]",
        "createdAt": "2026-08-01T21:08:43Z",
        "lastUsedAt": "2026-08-02T11:50:38Z",
        "source": "user"
      },
      {
        "id": "token-5",
        "name": "token-5",
        "hint": "[REDACTED]",
        "createdAt": "2026-07-26T09:54:17Z",
        "source": "user"
      },
      {
        "id": "token-6",
        "name": "token-6",
        "hint": "[REDACTED]",
        "createdAt": "2026-07-25T20:06:29Z",
        "source": "user"
      },
      {
        "id": "token-7",
        "name": "token-7",
        "hint": "[REDACTED]",
        "createdAt": "2026-07-25T19:53:34Z",
        "lastUsedAt": "2026-08-02T11:50:53Z",
        "source": "user"
      },
      {
        "id": "token-8",
        "name": "token-8",
        "hint": "[REDACTED]",
        "createdAt": "2026-07-25T19:52:58Z",
        "lastUsedAt": "2026-08-02T11:50:50Z",
        "source": "user"
      },
      {
        "id": "token-9",
        "name": "token-9",
        "hint": "[REDACTED]",
        "createdAt": "2026-07-25T19:52:53Z",
        "source": "user"
      },
      {
        "id": "token-10",
        "name": "token-10",
        "hint": "[REDACTED]",
        "createdAt": "2026-07-25T19:52:53Z",
        "source": "user"
      },
      {
        "id": "token-11",
        "name": "token-11",
        "hint": "[REDACTED]",
        "createdAt": "2026-07-25T19:52:52Z",
        "source": "user"
      },
      {
        "id": "token-12",
        "name": "token-12",
        "hint": "[REDACTED]",
        "createdAt": "2026-07-25T19:52:52Z",
        "source": "user"
      },
      {
        "id": "token-13",
        "name": "token-13",
        "hint": "[REDACTED]",
        "createdAt": "2026-07-25T19:52:49Z",
        "source": "user"
      },
      {
        "id": "token-14",
        "name": "token-14",
        "hint": "[REDACTED]",
        "createdAt": "2026-07-25T19:48:02Z",
        "lastUsedAt": "2026-08-02T11:50:42Z",
        "source": "user"
      },
      {
        "id": "token-15",
        "name": "token-15",
        "hint": "[REDACTED]",
        "createdAt": "2026-07-25T19:43:43Z",
        "source": "user"
      },
      {
        "id": "token-16",
        "name": "token-16",
        "hint": "[REDACTED]",
        "createdAt": "2026-07-25T19:37:51Z",
        "lastUsedAt": "2026-07-25T19:43:43Z",
        "source": "user"
      }
    ],
    "usage": [
      {
        "tokenId": "946870f4-1445-4313-9d01-a9c92a6e01fe",
        "agentCount": 1,
        "agents": [
          "opal-docker-04"
        ]
      },
      {
        "tokenId": "af84ad32-9e9a-431a-b3e4-6e33b680e3b8",
        "agentCount": 1,
        "agents": [
          "opal-docker-02"
        ]
      },
      {
        "tokenId": "d027f9c7-866d-4dd8-9938-d905c40ac58a",
        "agentCount": 1,
        "agents": [
          "opal-docker-01"
        ]
      }
    ]
  },
  "dockerAgents": {
    "agentsTotal": 3,
    "agentsOnline": 3,
    "agentsReportingVersion": 3,
    "agentsWithTokenBinding": 3,
    "agentsWithoutTokenBinding": 0,
    "agentsNeedingAttention": 0,
    "recommendedAgentVersion": "v6.1.2",
    "attention": [],
    "notes": [
      "All Docker / Podman modules are reporting with dedicated tokens and the expected version."
    ]
  },
  "alerts": {
    "missingCooldown": false,
    "missingGroupingWindow": false,
    "notes": [],
    "overrides": [
      {
        "key": "override-1",
        "disabled": true
      },
      {
        "key": "override-2",
        "disabled": true
      },
      {
        "key": "override-3",
        "disabled": true
      },
      {
        "key": "override-4",
        "thresholds": {
          "memory": 0
        }
      }
    ]
  },
  "aiChat": {
    "enabled": false,
    "running": false,
    "healthy": false,
    "model": "openai:gpt-5.6-sol",
    "assistantRuntimeConnected": false,
    "notes": []
  },
  "errors": [],
  "nodeSnapshots": [
    {
      "instance": "node-1",
      "node": "opal-hv-01",
      "retrievedAt": "2026-08-02T11:51:03.883639131Z",
      "memorySource": "available-field",
      "memory": {
        "total": 33347325952,
        "used": 28845821952,
        "free": 638320640,
        "cache": 3863183360,
        "usage": 86.50115452591477
      },
      "raw": {
        "total": 33347325952,
        "used": 28845821952,
        "free": 638320640,
        "available": 4501504000,
        "avail": 0,
        "buffers": 0,
        "cached": 0,
        "shared": 0,
        "effectiveAvailable": 4501504000,
        "totalMinusUsed": 4501504000,
        "fallbackTotal": 33347325952,
        "fallbackUsed": 28840783872,
        "fallbackFree": 4506542080,
        "proxmoxMemorySource": "node-status"
      }
    },
    {
      "instance": "node-2",
      "node": "opal-hv-02",
      "retrievedAt": "2026-08-02T11:51:03.853318712Z",
      "memorySource": "available-field",
      "memory": {
        "total": 33348235264,
        "used": 16498696192,
        "free": 12145135616,
        "cache": 4704403456,
        "usage": 49.47397084549967
      },
      "raw": {
        "total": 33348235264,
        "used": 16498696192,
        "free": 12145135616,
        "available": 16849539072,
        "avail": 0,
        "buffers": 0,
        "cached": 0,
        "shared": 0,
        "effectiveAvailable": 16849539072,
        "totalMinusUsed": 16849539072,
        "fallbackTotal": 33348235264,
        "fallbackUsed": 16558559232,
        "fallbackFree": 16789676032,
        "proxmoxMemorySource": "node-status"
      }
    },
    {
      "instance": "node-3",
      "node": "opal-hv-04",
      "retrievedAt": "2026-08-02T11:51:03.839676374Z",
      "memorySource": "available-field",
      "memory": {
        "total": 540659404800,
        "used": 149096017920,
        "free": 384704466944,
        "cache": 6858919936,
        "usage": 27.576699229925243
      },
      "raw": {
        "total": 540659404800,
        "used": 149096017920,
        "free": 384704466944,
        "available": 391563386880,
        "avail": 0,
        "buffers": 0,
        "cached": 0,
        "shared": 0,
        "effectiveAvailable": 391563386880,
        "totalMinusUsed": 391563386880,
        "fallbackTotal": 540659404800,
        "fallbackUsed": 149122056192,
        "fallbackFree": 391537348608,
        "proxmoxMemorySource": "node-status"
      }
    }
  ],
  "guestSnapshots": [
    {
      "guestType": "qemu",
      "instance": "node-1",
      "node": "opal-hv-01",
      "name": "haos",
      "vmid": 100,
      "status": "running",
      "retrievedAt": "2026-08-02T11:50:53.983937116Z",
      "memorySource": "guest-agent-meminfo",
      "fallbackReason": "guest-agent-meminfo",
      "memory": {
        "total": 4294967296,
        "used": 2567835648,
        "free": 109088768,
        "cache": 1618042880,
        "usage": 59.78708267211914
      },
      "raw": {
        "listingMem": 3949580288,
        "listingMaxmem": 4294967296,
        "statusMem": 3949494272,
        "statusMaxmem": 4294967296,
        "guestAgentMemAvailable": 1727131648,
        "guestAgentMemFree": 109088768,
        "guestAgentMemBuffers": 97427456,
        "guestAgentMemCached": 1429729280,
        "guestAgentSReclaimable": 159633408,
        "guestAgentShmem": 6176768,
        "agent": 1
      },
      "notes": []
    },
    {
      "guestType": "qemu",
      "instance": "node-2",
      "node": "opal-hv-01",
      "name": "opal-docker-01",
      "vmid": 102,
      "status": "running",
      "retrievedAt": "2026-08-02T11:51:04.12031424Z",
      "memorySource": "guest-agent-meminfo",
      "fallbackReason": "guest-agent-meminfo",
      "memory": {
        "total": 17179869184,
        "used": 13265903616,
        "free": 877359104,
        "cache": 3036606464,
        "usage": 77.21772193908691
      },
      "raw": {
        "listingMem": 17193054208,
        "listingMaxmem": 17179869184,
        "statusMem": 17193054208,
        "statusMaxmem": 17179869184,
        "guestAgentMemAvailable": 3913965568,
        "guestAgentMemFree": 877359104,
        "guestAgentMemBuffers": 106717184,
        "guestAgentMemCached": 2973491200,
        "guestAgentSReclaimable": 914739200,
        "guestAgentShmem": 441122816,
        "agent": 1
      },
      "notes": []
    },
    {
      "guestType": "lxc",
      "instance": "node-3",
      "node": "opal-hv-02",
      "name": "pulse",
      "vmid": 106,
      "status": "running",
      "retrievedAt": "2026-08-02T11:51:03.923321678Z",
      "memorySource": "unavailable",
      "fallbackReason": "cache-aware-memory-unavailable",
      "memory": {
        "total": 1073741824,
        "used": 0,
        "free": 0,
        "usageUnavailable": true,
        "usage": 0
      },
      "raw": {
        "listingMem": 287485952,
        "listingMaxmem": 1073741824,
        "rrdMaxMem": 1073741824
      },
      "notes": []
    },
    {
      "guestType": "qemu",
      "instance": "node-4",
      "node": "opal-hv-02",
      "name": "opal-docker-02",
      "vmid": 103,
      "status": "running",
      "retrievedAt": "2026-08-02T11:50:53.983602675Z",
      "memorySource": "guest-agent-meminfo",
      "fallbackReason": "guest-agent-meminfo",
      "memory": {
        "total": 17179869184,
        "used": 3826642944,
        "free": 8428986368,
        "cache": 4924239872,
        "usage": 22.273993492126465
      },
      "raw": {
        "listingMem": 9130057728,
        "listingMaxmem": 17179869184,
        "statusMem": 9130041344,
        "statusMaxmem": 17179869184,
        "guestAgentMemAvailable": 13353226240,
        "guestAgentMemFree": 8428986368,
        "guestAgentMemBuffers": 327757824,
        "guestAgentMemCached": 5042737152,
        "guestAgentSReclaimable": 233611264,
        "guestAgentShmem": 329920512,
        "agent": 1
      },
      "notes": []
    },
    {
      "guestType": "qemu",
      "instance": "node-5",
      "node": "opal-hv-04",
      "name": "TrueNAS",
      "vmid": 101,
      "status": "running",
      "retrievedAt": "2026-08-02T11:51:04.125776005Z",
      "memorySource": "guest-agent-meminfo",
      "fallbackReason": "guest-agent-meminfo",
      "memory": {
        "total": 103079215104,
        "used": 98498084864,
        "free": 4581130240,
        "usage": 95.55571873982748
      },
      "raw": {
        "listingMem": 103353864192,
        "listingMaxmem": 103079215104,
        "statusMem": 103353626624,
        "statusMaxmem": 103079215104,
        "guestAgentMemAvailable": 4581130240,
        "guestAgentMemFree": 5045968896,
        "guestAgentMemBuffers": 606208,
        "guestAgentMemCached": 240181248,
        "guestAgentSReclaimable": 186060800,
        "guestAgentShmem": 7647232,
        "agent": 1
      },
      "notes": []
    },
    {
      "guestType": "qemu",
      "instance": "node-6",
      "node": "opal-hv-04",
      "name": "opal-docker-04",
      "vmid": 105,
      "status": "running",
      "retrievedAt": "2026-08-02T11:51:04.16313535Z",
      "memorySource": "guest-agent-meminfo",
      "fallbackReason": "guest-agent-meminfo",
      "memory": {
        "total": 17179869184,
        "used": 4408832000,
        "free": 391966720,
        "cache": 12379070464,
        "usage": 25.662779808044434
      },
      "raw": {
        "listingMem": 17277771776,
        "listingMaxmem": 17179869184,
        "statusMem": 17277534208,
        "statusMaxmem": 17179869184,
        "guestAgentMemAvailable": 12771037184,
        "guestAgentMemFree": 391966720,
        "guestAgentMemBuffers": 285413376,
        "guestAgentMemCached": 11616714752,
        "guestAgentSReclaimable": 918945792,
        "guestAgentShmem": 93577216,
        "agent": 1
      },
      "notes": []
    }
  ],
  "memorySources": [
    {
      "instance": "node-1",
      "source": "available-field",
      "nodeCount": 3,
      "lastUpdated": "2026-08-02T11:51:03Z",
      "fallback": false,
      "trust": "preferred"
    }
  ],
  "memorySourceBreakdown": [
    {
      "instance": "opal-hv-01",
      "scope": "guest",
      "source": "guest-agent-meminfo",
      "count": 5,
      "lastUpdated": "2026-08-02T11:51:04Z",
      "fallback": true,
      "trust": "fallback",
      "fallbackReasons": [
        "guest-agent-meminfo"
      ]
    },
    {
      "instance": "opal-hv-01",
      "scope": "guest",
      "source": "unavailable",
      "count": 1,
      "lastUpdated": "2026-08-02T11:51:03Z",
      "fallback": true,
      "trust": "unavailable",
      "fallbackReasons": [
        "cache-aware-memory-unavailable"
      ]
    },
    {
      "instance": "opal-hv-01",
      "scope": "node",
      "source": "available-field",
      "count": 3,
      "lastUpdated": "2026-08-02T11:51:03Z",
      "fallback": false,
      "trust": "preferred",
      "fallbackReasons": []
    }
  ]
}

Confirmations

  • I verified the exact Pulse version and image reference from the running instance.
  • I searched existing issues for duplicates.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions