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) <noreply@anthropic.com>
This commit is contained in:
Clint Branham
2026-03-25 10:30:02 -05:00
parent 9636c45a40
commit e7b1c8488c
@@ -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
}
}