Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 22 additions & 4 deletions ui/src/features/migration/VmsSelectionStep.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -1017,6 +1017,12 @@ function VmsSelectionStep({
interfaceIndex: number,
preserveIp: boolean
) => {
const currentIpValue =
bulkEditIPs?.[vmName]?.[interfaceIndex] ?? bulkExistingIPs?.[vmName]?.[interfaceIndex] ?? ''
if (!preserveIp && parseIpList(currentIpValue).length > 1) {
return
}

setBulkPreserveIp((prev) => ({
...prev,
[vmName]: { ...prev[vmName], [interfaceIndex]: preserveIp }
Expand Down Expand Up @@ -1105,6 +1111,13 @@ function VmsSelectionStep({
[vmName]: { ...prev[vmName], [interfaceIndex]: value }
}))

if (parseIpList(value).length > 1) {
setBulkPreserveIp((prev) => ({
...prev,
[vmName]: { ...prev[vmName], [interfaceIndex]: true }
}))
}
Comment on lines +1114 to +1119
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In handleBulkIpChange, when multiple IPs are detected, the code forces preserveIp to true, but there's no check to prevent the user from later trying to disable it through other means. Consider adding a similar check in other functions that might modify the preserveIp state.


// Track latest user-entered value as "current" when Preserve IP is disabled.
if (bulkPreserveIp?.[vmName]?.[interfaceIndex] === false) {
setBulkCurrentIPs((prev) => ({
Expand Down Expand Up @@ -1698,7 +1711,8 @@ function VmsSelectionStep({
const initialPreserveMac = vm.preserveMac?.[index] !== false

const isPoweredOff = vm.vmState !== 'running'
const effectivePreserveIp = isPoweredOff ? false : initialPreserveIp
const hasMultipleIps = parseIpList(originalIp).length > 1
const effectivePreserveIp = isPoweredOff ? false : hasMultipleIps ? true : initialPreserveIp
initialBulkPreserveIp[vmName][index] = effectivePreserveIp
initialBulkPreserveMac[vmName][index] = initialPreserveMac

Expand All @@ -1721,7 +1735,9 @@ function VmsSelectionStep({
initialBulkCurrentIPs[vmName][0] = currentIp

const isPoweredOff = vm.vmState !== 'running'
const effectivePreserveIp = isPoweredOff ? false : vm.preserveIp?.[0] !== false
const hasMultipleIps = parseIpList(originalIp).length > 1
const effectivePreserveIp =
isPoweredOff ? false : hasMultipleIps ? true : vm.preserveIp?.[0] !== false
const initialPreserveMac = vm.preserveMac?.[0] !== false

initialBulkPreserveIp[vmName][0] = effectivePreserveIp
Expand Down Expand Up @@ -2326,8 +2342,10 @@ function VmsSelectionStep({
const status = bulkValidationStatus[vmName]?.[interfaceIndex]
const message = bulkValidationMessages[vmName]?.[interfaceIndex]
const isPoweredOff = vm.vmState !== 'running'
const hasMultipleIps = parseIpList(ip).length > 1
const preserveIp =
!isPoweredOff && bulkPreserveIp?.[vmName]?.[interfaceIndex] !== false
!isPoweredOff &&
(hasMultipleIps || bulkPreserveIp?.[vmName]?.[interfaceIndex] !== false)
const preserveMac = bulkPreserveMac?.[vmName]?.[interfaceIndex] !== false
const discoveredIp = bulkExistingIPs?.[vmName]?.[interfaceIndex] || ''
const currentIp =
Expand Down Expand Up @@ -2435,7 +2453,7 @@ function VmsSelectionStep({
<Switch
size="small"
checked={preserveIp}
disabled={isPoweredOff}
disabled={isPoweredOff || hasMultipleIps}
onChange={(e) =>
handleBulkPreserveIpChange(
vmName,
Expand Down
Loading