mirror of
https://github.com/GoodOlClint/PSProxmoxVE.git
synced 2026-08-28 16:06:59 +00:00
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:
@@ -108,10 +108,14 @@ BeforeAll {
|
|||||||
}
|
}
|
||||||
|
|
||||||
AfterAll {
|
AfterAll {
|
||||||
# Best-effort cleanup of HA rules created during testing
|
# Best-effort cleanup of HA artifacts created during testing
|
||||||
if ($script:HaRuleCreated) {
|
if ($script:HaRuleCreated) {
|
||||||
try { Remove-PveHaRule -Rule 'pester-rule-1' -Confirm:$false -ErrorAction SilentlyContinue } catch { }
|
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).
|
# Node removal from a 2-node cluster is not possible via API (quorum loss).
|
||||||
# Test infrastructure handles cleanup via reprovisioning.
|
# Test infrastructure handles cleanup via reprovisioning.
|
||||||
@@ -416,11 +420,22 @@ Describe 'Cluster Config & HA Lifecycle — Integration' -Tag 'Integration' {
|
|||||||
if (Skip-IfNoPve9) { return }
|
if (Skip-IfNoPve9) { return }
|
||||||
if (Skip-IfNoCluster) { 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' `
|
{ New-PveHaRule -Type 'node-affinity' `
|
||||||
-Properties @{
|
-Properties @{
|
||||||
rule = 'pester-rule-1'
|
rule = 'pester-rule-1'
|
||||||
resources = 'vm:99999'
|
resources = "vm:$($script:HaTestVmId)"
|
||||||
nodes = $script:Node
|
nodes = $script:Node
|
||||||
} `
|
} `
|
||||||
-Comment 'Pester test rule' `
|
-Comment 'Pester test rule' `
|
||||||
@@ -488,6 +503,11 @@ Describe 'Cluster Config & HA Lifecycle — Integration' -Tag 'Integration' {
|
|||||||
$rules = Get-PveHaRule -ErrorAction Stop
|
$rules = Get-PveHaRule -ErrorAction Stop
|
||||||
$match = @($rules) | Where-Object { $_.Rule -eq 'pester-rule-1' }
|
$match = @($rules) | Where-Object { $_.Rule -eq 'pester-rule-1' }
|
||||||
$match | Should -BeNullOrEmpty
|
$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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user