Gave this a quick spin by running `ha-manager add ct:101` for a VM with VMID 101 and `ha-manager add vm:102` for a container with VMID 102. Works as advertised, the error message is informative enough and is definitely preferrable to constantly failing tasks from HA. The case with `ha-manager add ct:101 --type vm` is already covered, but this covers the case that I think is easier to miss.
The code changes themselves look simple enough and lgtm! Consider this: Tested-by: Michael Köppl <[email protected]> Reviewed-by: Michael Köppl <[email protected]> On Mon Jan 12, 2026 at 11:16 AM CET, Daniel Kral wrote: > Otherwise a HA resource with the wrong guest type can be added to the HA > resources configuration, which will make its methods (start, shutdown, > migrate, ...) fail. > > This does not fixup existing HA resource entries with the wrong guest > type, but manual removal, e.g., through `ha-manager remove <sid>` and > re-adding it correctly, is still possible. > > Signed-off-by: Daniel Kral <[email protected]> > --- > src/PVE/HA/Resources/PVECT.pm | 12 +++++++++--- > src/PVE/HA/Resources/PVEVM.pm | 12 +++++++++--- > 2 files changed, 18 insertions(+), 6 deletions(-) > > diff --git a/src/PVE/HA/Resources/PVECT.pm b/src/PVE/HA/Resources/PVECT.pm > index 091249d7..55f0373b 100644 > --- a/src/PVE/HA/Resources/PVECT.pm > +++ b/src/PVE/HA/Resources/PVECT.pm > @@ -53,13 +53,19 @@ sub exists { > my ($class, $vmid, $noerr) = @_; > > my $vmlist = PVE::Cluster::get_vmlist(); > + my $entry = $vmlist->{ids}->{$vmid}; > > - if (!defined($vmlist->{ids}->{$vmid})) { > + if (!defined($entry)) { > die "resource 'ct:$vmid' does not exist in cluster\n" if !$noerr; > return undef; > - } else { > - return 1; > } > + > + if ($entry->{type} ne 'lxc') { > + die "resource 'ct:$vmid' is not a container\n" if !$noerr; > + return undef; > + } > + > + return 1; > } > > sub start { > diff --git a/src/PVE/HA/Resources/PVEVM.pm b/src/PVE/HA/Resources/PVEVM.pm > index d1bc3329..3664837b 100644 > --- a/src/PVE/HA/Resources/PVEVM.pm > +++ b/src/PVE/HA/Resources/PVEVM.pm > @@ -53,13 +53,19 @@ sub exists { > my ($class, $vmid, $noerr) = @_; > > my $vmlist = PVE::Cluster::get_vmlist(); > + my $entry = $vmlist->{ids}->{$vmid}; > > - if (!defined($vmlist->{ids}->{$vmid})) { > + if (!defined($entry)) { > die "resource 'vm:$vmid' does not exist in cluster\n" if !$noerr; > return undef; > - } else { > - return 1; > } > + > + if ($entry->{type} ne 'qemu') { > + die "resource 'vm:$vmid' is not a VM\n" if !$noerr; > + return undef; > + } > + > + return 1; > } > > sub start { _______________________________________________ pve-devel mailing list [email protected] https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
