mkellermann97 21e6bcad3b feat: complete 3 partially-done feature issues (#410 CPU flags, #426 ProxLB tags, #413 SR test-failover NIC isolation)
#410 — Extra CPU Flags: a tri-state (+/-/default) toggle panel in the VM-config
Hardware tab that splices a `flags=+aes;-pcid;...` segment into the composite
`cpu=` string, mirroring the existing reported-model/level editors. Backend
passes `cpu=` through untouched (rides the delta-save). i18n ×7.

#426 — ProxLB VM tags drive placement (opt-in per cluster, default off):
_derive_proxlb_tag_rules() parses plb_affinity_/plb_anti_affinity_/plb_ignore_/
plb_pin_<node> tags into the existing affinity engine + balancing exclusions +
target pins. Wired into _check_affinity_violation, _enforce_affinity_rules,
find_migration_candidate and get_best_target_node. New per-cluster
`proxlb_tags_enabled` column (schema+migration+load+save+PegaProxConfig+PATCH
whitelist) and a Balancing-settings toggle. Off = exact prior behaviour.

#413 — Site Recovery:
  * Test Failover can now bring clones up with all NICs disconnected
    (link_down) so a DR test can't collide with production IPs — new per-plan
    `test_disconnect_nics` option (schema+migration+create/update+plan-settings
    toggle). Runs while the clone is still stopped, so it boots disconnected.
  * Planned/Failback: fast pre-flight (_target_vmid_exists) short-circuits a
    doomed qmigrate when the target VMID is already replication-seeded, pointing
    the operator at Emergency Failover instead of churning (fail-fast, no data
    loss, no semantic change).
  * Fix a latent wrapper-unwrap bug: get_vm_config returns {'success','config'}
    with the flat netN/scsiN keys under config['raw']; the cross-cluster
    storage-remap loop iterated the wrapper, so every failover silently fell
    back to default storage. Now reads config['raw']. Same unwrap applied to the
    new NIC-disconnect helper.

Verified: 22/22 in-process assertions (tag derivation for all 4 tag types,
pin→affinity-violation integration, both DB column migrations + save/load
round-trips, NIC-disconnect against the real get_vm_config shape, VMID probe),
CPU-flag splice invariants, frontend Babel build clean, adversarial review
(OFF-path no-op + SQL positional-INSERT alignment confirmed).
2026-07-04 21:01:15 +02:00
..
2026-02-27 09:53:38 +01:00