From e7b1c8488c1fcd66be0c03dbcdc09cf9a5829950 Mon Sep 17 00:00:00 2001 From: Clint Branham Date: Wed, 25 Mar 2026 10:30:02 -0500 Subject: [PATCH] fix: HA rule test creates real VM + HA resource before rule PVE 9 rejects rules referencing unmanaged resources. Test now creates a minimal VM, registers it as a disabled HA resource, then creates the node-affinity rule. Cleanup removes rule, resource, and VM. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../ZZ.ClusterConfig.Integration.Tests.ps1 | 26 ++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/tests/PSProxmoxVE.Tests/Integration/ZZ.ClusterConfig.Integration.Tests.ps1 b/tests/PSProxmoxVE.Tests/Integration/ZZ.ClusterConfig.Integration.Tests.ps1 index 657e6d0..3b35cf6 100644 --- a/tests/PSProxmoxVE.Tests/Integration/ZZ.ClusterConfig.Integration.Tests.ps1 +++ b/tests/PSProxmoxVE.Tests/Integration/ZZ.ClusterConfig.Integration.Tests.ps1 @@ -108,10 +108,14 @@ BeforeAll { } AfterAll { - # Best-effort cleanup of HA rules created during testing + # Best-effort cleanup of HA artifacts created during testing if ($script:HaRuleCreated) { try { Remove-PveHaRule -Rule 'pester-rule-1' -Confirm:$false -ErrorAction SilentlyContinue } catch { } } + if ($script:HaTestVmId) { + try { Remove-PveHaResource -Sid "vm:$($script:HaTestVmId)" -Confirm:$false -ErrorAction SilentlyContinue } catch { } + try { Remove-PveVm -Node $script:Node -VmId $script:HaTestVmId -Confirm:$false -ErrorAction SilentlyContinue } catch { } + } # Node removal from a 2-node cluster is not possible via API (quorum loss). # Test infrastructure handles cleanup via reprovisioning. @@ -416,11 +420,22 @@ Describe 'Cluster Config & HA Lifecycle — Integration' -Tag 'Integration' { if (Skip-IfNoPve9) { return } if (Skip-IfNoCluster) { return } - # Create a node-affinity rule that pins a fake resource to node A + # HA rules require a managed resource — create a minimal VM and + # register it as an HA resource first + $script:HaTestVmId = Get-PveClusterNextId -ErrorAction Stop + New-PveVm -Node $script:Node -VmId $script:HaTestVmId ` + -Name 'pester-ha-test' -Memory 128 -Cores 1 ` + -Confirm:$false -ErrorAction Stop | Out-Null + + New-PveHaResource -Sid "vm:$($script:HaTestVmId)" ` + -State 'disabled' ` + -Confirm:$false -ErrorAction Stop + + # Now create a node-affinity rule for that resource { New-PveHaRule -Type 'node-affinity' ` -Properties @{ rule = 'pester-rule-1' - resources = 'vm:99999' + resources = "vm:$($script:HaTestVmId)" nodes = $script:Node } ` -Comment 'Pester test rule' ` @@ -488,6 +503,11 @@ Describe 'Cluster Config & HA Lifecycle — Integration' -Tag 'Integration' { $rules = Get-PveHaRule -ErrorAction Stop $match = @($rules) | Where-Object { $_.Rule -eq 'pester-rule-1' } $match | Should -BeNullOrEmpty + + # Clean up HA resource and test VM + try { Remove-PveHaResource -Sid "vm:$($script:HaTestVmId)" -Confirm:$false -ErrorAction SilentlyContinue } catch { } + try { Remove-PveVm -Node $script:Node -VmId $script:HaTestVmId -Confirm:$false -ErrorAction SilentlyContinue } catch { } + $script:HaTestVmId = $null } }